diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..8e286b7d1 --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +# Please copy this file and rename as .env, pymilvus will read .env file if provided + +MILVUS_URI= +# MILVUS_URI=https://username:password@in01-random123.xxx.com:19530 + +# Milvus connections configs +MILVUS_CONN_ALIAS=default +MILVUS_CONN_TIMEOUT=10 + diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml index 20a492b28..7723a30b4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -1,6 +1,7 @@ name: 🐞 Bug report description: Create a report to help us improve pymilvus title: "[Bug]: " +labels: [kind/bug] body: - type: markdown attributes: @@ -58,4 +59,4 @@ body: If applicable, add screenshots to help explain your problem. Links? References? Anything that will give us more context about the issue you are encountering! validations: - required: false \ No newline at end of file + required: false diff --git a/.github/ISSUE_TEMPLATE/enhancement.yaml b/.github/ISSUE_TEMPLATE/enhancement.yaml new file mode 100644 index 000000000..a9b3d8b8f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/enhancement.yaml @@ -0,0 +1,37 @@ +name: Enhancement request +description: As a developer, I want to make an enhancement for PyMilvus +title: "[Enhancement]: " +labels: [kind/enhancement] +body: +- type: markdown + attributes: + value: | + Thanks for taking the time to request/suggest an enhancement for PyMilvus! Please fill the form in English! +- type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue related to this already exists. + options: + - label: I have searched the existing issues + required: true +- type: textarea + attributes: + label: What would you like to be added? + description: A concise description of what you're expecting/suggesting. + placeholder: | + I would like to suggest/request a feature that's like... + validations: + required: true +- type: textarea + attributes: + label: Why is this needed? + description: A concise description of the reason/motivation + validations: + required: false +- type: textarea + attributes: + label: Anything else? + description: | + Links? References? Screenshots? Anything that will give us more context about this! + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index 0893549d4..61241d900 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -1,6 +1,7 @@ name: 🚀 Feature request description: Suggest an idea for pymilvus title: "[FEATURE]: " +labels: [kind/feature] body: - type: markdown attributes: @@ -37,4 +38,4 @@ body: label: Anything else? description: Add any other context, code examples, or references to existing implementations about the feature request here. validations: - required: false \ No newline at end of file + required: false diff --git a/.github/ISSUE_TEMPLATE/general-question.yaml b/.github/ISSUE_TEMPLATE/general-question.yaml index 82989736e..20b1080da 100644 --- a/.github/ISSUE_TEMPLATE/general-question.yaml +++ b/.github/ISSUE_TEMPLATE/general-question.yaml @@ -1,6 +1,7 @@ name: 🤔 General question description: Ask a general question about pymilvus title: "[QUESTION]: " +labels: [kind/question] body: - type: checkboxes attributes: @@ -19,4 +20,4 @@ body: label: Anything else? description: Add any other context, code examples, or references about the question? validations: - required: false \ No newline at end of file + required: false diff --git a/.github/mergify.yml b/.github/mergify.yml index c42de342e..7a96a0e5b 100644 --- a/.github/mergify.yml +++ b/.github/mergify.yml @@ -1,10 +1,44 @@ pull_request_rules: - name: Test passed conditions: - - base=master - - "status-success=Run Python Tests (3.6)" + - or: + - base=master + - base~=2\.\d + # Require that Python tests succeed on Windows (any Python version, any Windows build) + - "status-success~=Run Python Tests \\(\\d+\\.\\d+, windows-\\S+\\)" + # Require that Python tests succeed on Ubuntu (any Python version, any Ubuntu build) + - "status-success~=Run Python Tests \\(\\d+\\.\\d+, ubuntu-\\S+\\)" + # Require that proto checks pass for any Python version + - "status-success~=Run Check Proto \\(\\d+\\.\\d+\\)" + # Require that code lint checks pass for any Python version + - "status-success~=Code lint check \\(\\d+\\.\\d+\\)" actions: label: add: - ci-passed + - name: Add needs-dco label when DCO check failed + conditions: + - or: + - base=master + - base~=2\.\d + - -status-success=DCO + actions: + label: + remove: + - dco-passed + add: + - needs-dco + + - name: Add dco-passed label when DCO check passed + conditions: + - or: + - base=master + - base~=2\.\d + - status-success=DCO + actions: + label: + remove: + - needs-dco + add: + - dco-passed diff --git a/.github/workflows/check_milvus_proto.yml b/.github/workflows/check_milvus_proto.yml new file mode 100644 index 000000000..8825a842a --- /dev/null +++ b/.github/workflows/check_milvus_proto.yml @@ -0,0 +1,36 @@ +name: Check proto on pull request + +on: + pull_request: + branches: + - master + +jobs: + build: + name: Run Check Proto + runs-on: ubuntu-22.04 + strategy: + matrix: + python-version: [3.8, 3.13] + steps: + - uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Fetch tags + run: | + git fetch --prune --unshallow --tags + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" + + - name: Try generate proto + run: | + git submodule update --init + make gen_proto + make check_proto_product + diff --git a/.github/workflows/code_checker.yml b/.github/workflows/code_checker.yml new file mode 100644 index 000000000..f05b82117 --- /dev/null +++ b/.github/workflows/code_checker.yml @@ -0,0 +1,31 @@ +name: Code checker on pull request + +on: + pull_request: + branches: + - master + +jobs: + code-lint: + name: Code lint check + runs-on: ubuntu-22.04 + strategy: + matrix: + python-version: [3.8, 3.13] + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + - name: Check pyproject.toml install + run: | + pip install -e . + - name: Install requirements + run: | + pip install -e ".[dev]" + - name: Run pylint + shell: bash + run: | + make lint diff --git a/.github/workflows/doc_update_event.yml b/.github/workflows/doc_update_event.yml deleted file mode 100644 index 015a28f1f..000000000 --- a/.github/workflows/doc_update_event.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: web-content - Dispatch event after docs files updated - -on: - push: - branches-ignore: - - 'master' - - '1.*' - paths: - - 'docs/**' - -jobs: - dispatch_event: - name: Dispatch event - runs-on: ubuntu-latest - steps: - - id: extract_branch - name: Extract branch name - shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - - id: dispatch_branch_name - name: Dispatch branch name if update any docs - run: | - curl \ - -X POST \ - -H "Accept: application/vnd.github.v3+json" \ - "https://api.github.com/repos/milvus-io/web-content/actions/workflows/updateApiByBranchEvent.yml/dispatches" \ - -d '{"ref":"master", "inputs": { "branchName": "${{ steps.extract_branch.outputs.branch }}", "repoName": "${{ github.event.repository.name }}" } }' \ - -u ".:${{secrets.DOC_TOKEN}}" \ No newline at end of file diff --git a/.github/workflows/nightly_ci.yml b/.github/workflows/nightly_ci.yml index bca377b5b..152ad8ea8 100644 --- a/.github/workflows/nightly_ci.yml +++ b/.github/workflows/nightly_ci.yml @@ -1,5 +1,7 @@ name: Nightly CI on: + workflow_dispatch: + schedule: # * is a special character in YAML so you have to quote this string # ┌───────────── minute (0 - 59) @@ -18,12 +20,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6] + python-version: [3.8] env: IMAGE_REPO: "milvusdb" TAG_PREFIX: "master-" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Get the latest of Milvus dev image tag shell: bash @@ -37,18 +39,19 @@ jobs: IMAGE_TAG=${{ steps.extracter.outputs.tag }} docker-compose up -d - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Clone Milvus Repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: repository: milvus-io/milvus path: 'milvus' - name: Install PyMilvus run: | + python3 -m pip install setuptools --upgrade python3 -m pip install --no-cache-dir -r milvus/tests/python_client/requirements.txt python3 -m pip uninstall -y pymilvus python3 setup.py install @@ -56,4 +59,4 @@ jobs: - name: Smoke Test working-directory: milvus/tests/python_client run: | - pytest -n 2 --tags L0 + pytest -n 2 --tags L0 L1 diff --git a/.github/workflows/publish_dev_package.yml b/.github/workflows/publish_dev_package.yml index c83e2c429..3277131a6 100644 --- a/.github/workflows/publish_dev_package.yml +++ b/.github/workflows/publish_dev_package.yml @@ -3,24 +3,27 @@ name: Publish Python 🐍 distributions 📦 to TestPyPI on: push: branches: - - 'master' + - master jobs: build-n-publish: name: Build and publish Python 🐍 distributions 📦 to TestPyPI - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest + environment: testpypi + permissions: + id-token: write steps: - name: Check out from Git - uses: actions/checkout@master + uses: actions/checkout@v4 - name: Get history and tags for SCM versioning run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - - name: Set up Python 3.7 - uses: actions/setup-python@v1 + - name: Set up Python 3.13 + uses: actions/setup-python@v5 with: - python-version: 3.7 + python-version: 3.13 - name: Install pypa/build run: >- python -m @@ -36,8 +39,7 @@ jobs: --outdir dist/ . - name: Publish distribution 📦 to Test PyPI - uses: pypa/gh-action-pypi-publish@master + uses: pypa/gh-action-pypi-publish@release/v1 with: - password: ${{ secrets.TOKEN_TEST_PYPI }} - repository_url: https://test.pypi.org/legacy/ + repository-url: https://test.pypi.org/legacy/ diff --git a/.github/workflows/publish_on_release.yml b/.github/workflows/publish_on_release.yml new file mode 100644 index 000000000..e84142a54 --- /dev/null +++ b/.github/workflows/publish_on_release.yml @@ -0,0 +1,42 @@ +name: Publish 🐍 On Release to PyPI + +on: + release: + types: [published] + +jobs: + build-n-publish: + name: Build and publish Python 🐍 distributions 📦 to PyPI + runs-on: ubuntu-latest + environment: pypi + permissions: + id-token: write + + steps: + - name: Check out from Git + uses: actions/checkout@v4 + - name: Get history and tags for SCM versioning + run: | + git fetch --prune --unshallow + git fetch --depth=1 origin +refs/tags/*:refs/tags/* + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: 3.13 + - name: Install pypa/build + run: >- + python -m + pip install + build + --user + - name: Build a binary wheel and a source tarball + run: >- + python -m + build + --sdist + --wheel + --outdir dist/ + . + - name: Publish distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags') + uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 58ade644f..f545a92c5 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,6 +1,9 @@ name: Test on pull request on: + push: + branches: + - master pull_request: branches: - master @@ -8,29 +11,34 @@ on: jobs: build: name: Run Python Tests - runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6] + python-version: [3.8, 3.13] + os: [ubuntu-22.04, windows-2022] + runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v2 + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} + - name: Fetch tags + run: | + git fetch --prune --unshallow --tags - - name: Fetch tags - run: | - git fetch --prune --unshallow --tags + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -e ".[dev]" - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install pytest - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Test and generate coverage with pytest + run: | + make coverage - - name: Test with pytest - run: | - make unittest + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/update-milvus-pymilvus-dev.yml b/.github/workflows/update-milvus-pymilvus-dev.yml new file mode 100644 index 000000000..549f48e0e --- /dev/null +++ b/.github/workflows/update-milvus-pymilvus-dev.yml @@ -0,0 +1,170 @@ +name: Update PyMilvus in Milvus + +on: + schedule: + - cron: "5 2 * * *" # daily at 02:05 UTC + workflow_dispatch: + +permissions: + contents: write + pull-requests: write + +jobs: + bump: + runs-on: ubuntu-latest + strategy: + fail-fast: false # Continue with other branches even if one fails + matrix: + branch: [master, '2.5', '2.6'] + steps: + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Configure Git Identity + run: | + echo "Configuring git identity" + echo "Author name: ${{ secrets.GIT_AUTHOR_NAME }}" + echo "Author email: ${{ secrets.GIT_AUTHOR_EMAIL }}" + git config --global user.name "${{ secrets.GIT_AUTHOR_NAME }}" + git config --global user.email "${{ secrets.GIT_AUTHOR_EMAIL }}" + + - name: Checkout pymilvus (repo root for workflow) + uses: actions/checkout@v4 + with: + ref: ${{ matrix.branch }} + persist-credentials: false + + - name: Get history and tags for SCM versioning + run: | + git fetch --prune --unshallow + git fetch --depth=1 origin +refs/tags/*:refs/tags/* + + - name: Checkout Milvus (upstream) + uses: actions/checkout@v4 + with: + repository: milvus-io/milvus + ref: ${{ matrix.branch }} + path: milvus-upstream + fetch-depth: 0 + persist-credentials: false + + - name: Determine latest dev version + id: version + run: | + python -m pip install setuptools_scm --user + VERSION=$(python -c "import _version_helper; print(_version_helper.version)") + echo "latest=$VERSION" >> $GITHUB_OUTPUT + echo "Detected version: $VERSION" + + - name: Read current pinned version in Milvus + id: current + run: | + set -euo pipefail + file="milvus-upstream/tests/python_client/requirements.txt" + if [ ! -f "$file" ]; then + echo "Requirements file not found: $file" + echo "current=not-found" >> $GITHUB_OUTPUT + exit 0 + fi + curr="$(grep -E '^pymilvus(\[bulk_writer\])?==' "$file" | head -n1 | awk -F'==' '{print $2}')" || curr="not-found" + echo "found=$curr" + echo "current=$curr" >> $GITHUB_OUTPUT + + - name: Skip if up-to-date + if: steps.current.outputs.current == steps.version.outputs.latest + run: echo "Already up-to-date. Skipping." + + - name: Check for existing PR + if: steps.current.outputs.current != steps.version.outputs.latest + id: check_pr + env: + GH_TOKEN: ${{ secrets.MILVUS_UPDATE_TOKEN }} + run: | + set -euo pipefail + TARGET_VERSION="${{ steps.version.outputs.latest }}" + TARGET_BRANCH="${{ matrix.branch }}" + + # Search for open PRs with matching title pattern + PR_TITLE_PATTERN="test: Increase PyMilvus version to ${TARGET_VERSION} for ${TARGET_BRANCH} branch" + echo "Checking for existing PRs with title pattern: $PR_TITLE_PATTERN" + + # List open PRs and check if any match our criteria + EXISTING_PR=$(gh pr list --repo milvus-io/milvus --base "${TARGET_BRANCH}" --state open --json number,title,author --jq ".[] | select(.title == \"${PR_TITLE_PATTERN}\") | .number" || echo "") + + if [ -n "$EXISTING_PR" ]; then + echo "Found existing PR #$EXISTING_PR with same version update" + echo "exists=true" >> $GITHUB_OUTPUT + echo "pr_number=$EXISTING_PR" >> $GITHUB_OUTPUT + else + echo "No existing PR found for this version update" + echo "exists=false" >> $GITHUB_OUTPUT + fi + + - name: Skip if PR already exists + if: steps.current.outputs.current != steps.version.outputs.latest && steps.check_pr.outputs.exists == 'true' + run: | + echo "PR #${{ steps.check_pr.outputs.pr_number }} already exists for updating to version ${{ steps.version.outputs.latest }}" + echo "Skipping PR creation to avoid duplicate." + + - name: Prepare branch + if: steps.current.outputs.current != steps.version.outputs.latest && steps.check_pr.outputs.exists != 'true' + run: | + set -euo pipefail + cd milvus-upstream + # Create unique branch name with target branch reference + TARGET_BRANCH="$(echo '${{ matrix.branch }}' | sed 's/\./-/g')" + BR="bot/pymilvus-update-for-${TARGET_BRANCH}-${{ steps.version.outputs.latest }}-$(date -u +%Y%m%d%H%M%S)" + echo "BRANCH=$BR" >> $GITHUB_ENV + git switch -c "$BR" + + - name: Update requirements.txt + if: steps.current.outputs.current != steps.version.outputs.latest && steps.check_pr.outputs.exists != 'true' + run: | + set -euo pipefail + file="milvus-upstream/tests/python_client/requirements.txt" + ver="${{ steps.version.outputs.latest }}" + # Replace exact pins for both lines + sed -i -E "s/^pymilvus==[0-9A-Za-z\.\-]+/pymilvus==${ver}/" "$file" + sed -i -E "s/^pymilvus\[bulk_writer\]==[0-9A-Za-z\.\-]+/pymilvus[bulk_writer]==${ver}/" "$file" + echo "Updated to $ver" + grep -nE '^pymilvus(\[bulk_writer\])?==' "$file" || true + + - name: Commit + if: steps.current.outputs.current != steps.version.outputs.latest && steps.check_pr.outputs.exists != 'true' + run: | + set -euo pipefail + cd milvus-upstream + git add tests/python_client/requirements.txt + git commit -sm "test: Increase PyMilvus version to ${{ steps.version.outputs.latest }}" + + + - name: Push to fork + if: steps.current.outputs.current != steps.version.outputs.latest && steps.check_pr.outputs.exists != 'true' + run: | + set -euo pipefail + cd milvus-upstream + cat ~/.git-credentials || echo "no cached creds" + git remote -v + echo "BRANCH=${{ env.BRANCH }}" + echo "REPO_FORK=${{ vars.REPO_FORK }}" + remote="https://x-access-token:${{ secrets.MILVUS_UPDATE_TOKEN }}@github.com/${{ vars.REPO_FORK }}.git" + git remote add fork "$remote" || git remote set-url fork "$remote" + GIT_CURL_VERBOSE=1 GIT_TRACE=1 git push -u fork "$BRANCH" + + - name: Open PR to milvus-io/milvus + if: steps.current.outputs.current != steps.version.outputs.latest && steps.check_pr.outputs.exists != 'true' + env: + GH_TOKEN: ${{ secrets.MILVUS_UPDATE_TOKEN }} + run: | + set -euo pipefail + title="test: Increase PyMilvus version to ${{ steps.version.outputs.latest }} for ${{ matrix.branch }} branch" + body="Automated daily bump from pymilvus ${{ matrix.branch }} branch. Updates tests/python_client/requirements.txt." + head="$(echo ${{ vars.REPO_FORK }} | cut -d'/' -f1):${BRANCH}" + base="${{ matrix.branch }}" + echo "title=$title" + echo "body=$body" + echo "head=$head" + echo "base=$base" + gh pr create --repo milvus-io/milvus --title "$title" --body "$body" --head "$head" --base "$base" diff --git a/.gitignore b/.gitignore index aab1f8d41..1ced343a5 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ venv/ # Env .env +.venv/ # Local Temp temp/ @@ -29,6 +30,16 @@ TODO # GitHub .coverage htmlcov/ -debug/ +**/debug/ .codecov.yml coverage.xml + +# Example data +/examples/bulk_writer + +# uv +uv.lock + +# AI rules +WARP.md +CLAUDE.md diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..e2d891f4f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "pymilvus/grpc_gen/milvus-proto"] + path = pymilvus/grpc_gen/milvus-proto + url = https://github.com/milvus-io/milvus-proto.git diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..80f966798 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,20 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + - repo: local + hooks: + - id: make-format + name: Format code with black and ruff + entry: make format + language: system + pass_filenames: false + always_run: true + stages: [pre-commit] + + - id: make-lint + name: Lint code with black and ruff + entry: make lint + language: system + pass_filenames: false + always_run: true + stages: [pre-commit] diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86d27776d..266568221 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,4 +69,4 @@ Note: the problems, features, and questions mentioned here are not limited to Py ## Congratulations! You are now the contributor to the Milvus community! -Apart from dealing with codes and machines, you are always welcome to communicate with any member from the Milvus community. New faces join us every day, and they may as well encounter the same challenges as you faced beore. Feel free to help them. You can pass on the collaborative spirit from the assistance you acquired when you first joined the community. Let us build a collaborative, open-source, exuberant, and tolerant community together! \ No newline at end of file +Apart from dealing with codes and machines, you are always welcome to communicate with any member from the Milvus community. New faces join us every day, and they may as well encounter the same challenges as you faced beore. Feel free to help them. You can pass on the collaborative spirit from the assistance you acquired when you first joined the community. Let us build a collaborative, open-source, exuberant, and tolerant community together! diff --git a/Makefile b/Makefile index 46f4295e8..6ded97b5a 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,17 @@ unittest: - PYTHONPATH=`pwd` python3 -m pytest tests --cov=pymilvus + PYTHONPATH=`pwd` python3 -m pytest tests --cov=pymilvus -v lint: - PYTHONPATH=`pwd` pylint --rcfile=pylint.conf pymilvus + PYTHONPATH=`pwd` python3 -m black pymilvus --check + PYTHONPATH=`pwd` python3 -m ruff check pymilvus -codecov: - PYTHONPATH=`pwd` pytest --cov=pymilvus --cov-report=xml tests -x -rxXs +format: + pip install -e ".[dev]" + PYTHONPATH=`pwd` python3 -m black pymilvus + PYTHONPATH=`pwd` python3 -m ruff check pymilvus --fix + +coverage: + PYTHONPATH=`pwd` pytest --cov=pymilvus --cov-report=xml tests -x -v -rxXs example: PYTHONPATH=`pwd` python examples/example.py @@ -16,5 +22,18 @@ example_index: package: python3 -m build --sdist --wheel --outdir dist/ . +get_proto: + git submodule update --init + gen_proto: - cd pymilvus/grpc_gen/proto && ./python_gen.sh + pip install -e ".[dev]" + cd pymilvus/grpc_gen && ./python_gen.sh + +check_proto_product: gen_proto + ./check_proto_product.sh + +version: + python -m setuptools_scm + +install: + pip install -e . diff --git a/OWNERS b/OWNERS index 915480704..75479033e 100644 --- a/OWNERS +++ b/OWNERS @@ -1,8 +1,13 @@ filters: ".*": reviewers: - - fzliu + - czs007 - XuanYang-CN - wangting0128 + - longjiquan + - tedxu approvers: - XuanYang-CN + - longjiquan + - czs007 + - tedxu diff --git a/README.md b/README.md index 9e197bc1c..83532255e 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ [![version](https://img.shields.io/pypi/v/pymilvus.svg?color=blue)](https://pypi.org/project/pymilvus/) [![Supported Python Versions](https://img.shields.io/pypi/pyversions/pymilvus?logo=python&logoColor=blue)](https://pypi.org/project/pymilvus/) -[![Downloads](https://pepy.tech/badge/pymilvus)](https://pepy.tech/project/pymilvus) -[![Downloads](https://pepy.tech/badge/pymilvus/month)](https://pepy.tech/project/pymilvus/month) -[![Downloads](https://pepy.tech/badge/pymilvus/week)](https://pepy.tech/project/pymilvus/week) -[![license](https://img.shields.io/hexpm/l/plug.svg?color=green)](https://github.com/milvus-io/pymilvus/blob/master/LICENSE) -[![Mergify Status][mergify-status]][mergify] +[![Downloads](https://static.pepy.tech/badge/pymilvus)](https://pepy.tech/project/pymilvus) +[![Downloads](https://static.pepy.tech/badge/pymilvus/month)](https://pepy.tech/project/pymilvus) +[![Downloads](https://static.pepy.tech/badge/pymilvus/week)](https://pepy.tech/project/pymilvus) +[![license](https://img.shields.io/hexpm/l/plug.svg?color=green)](https://github.com/milvus-io/pymilvus/blob/master/LICENSE) +![Static Badge](https://img.shields.io/badge/slack-%23py--milvus-blue?style=social&logo=slack&link=https%3A%2F%2Fmilvusio.slack.com%2Farchives%2FC024XTWMT4L) Python SDK for [Milvus](https://github.com/milvus-io/milvus). To contribute code to this project, please read our [contribution guidelines](https://github.com/milvus-io/milvus/blob/master/CONTRIBUTING.md) first. If you have some ideas or encounter a problem, you can find us in the Slack channel [#py-milvus](https://milvusio.slack.com/archives/C024XTWMT4L). @@ -17,23 +17,31 @@ The following collection shows Milvus versions and recommended PyMilvus versions |Milvus version| Recommended PyMilvus version | |:-----:|:-----:| -| 1.0.* | 1.0.1 | -| 1.1.* | 1.1.2 | -| 2.0.0 | 2.0.0 | +| 1.0.\* | 1.0.1 | +| 1.1.\* | 1.1.2 | +| 2.0.\* | 2.0.2 | +| 2.1.\* | 2.1.3 | +| 2.2.\* | 2.2.15 | +| 2.3.\* | 2.3.7 | +| 2.4.\* | 2.4.X | +| 2.5.\* | 2.5.X | +| 2.6.\* | 2.6.X | ## Installation -You can install PyMilvus via `pip` or `pip3` for Python 3.6+: +You can install PyMilvus via `pip` or `pip3` for Python 3.8+: ```shell $ pip3 install pymilvus +$ pip3 install pymilvus[model] # for milvus-model +$ pip3 install pymilvus[bulk_writer] # for bulk_writer ``` You can install a specific version of PyMilvus by: ```shell -$ pip3 install pymilvus==2.0.0 +$ pip3 install pymilvus==2.4.10 ``` You can upgrade PyMilvus to the latest version by: @@ -42,40 +50,87 @@ You can upgrade PyMilvus to the latest version by: $ pip3 install --upgrade pymilvus ``` +## FAQ +Q1. How to get submodules? -## Documentation +A1. The following command will get the protos matching to the generated files, for protos of certain version, see +[milvus-proto](https://github.com/milvus-io/milvus-proto#usage) for details. +```shell +$ git submodule update --init +``` -Documentation is available online: https://milvus.io/api-reference/pymilvus/v2.0/install.html. +Q2. How to generate python files from milvus-proto? +A2. +```shell +$ make gen_proto +``` -## Packages +Q3. How to use the local PyMilvus repository for Milvus server? -### Released packages +A3. +```shell +$ make install +``` -The release of PyMilvus is managed on GitHub, and GitHub Actions will package and upload each version to PyPI. +Q4. How to check and auto-fix the coding styles? -The release version number of PyMilvus follows PEP440, the format is x.y.z, and the corresponding git tag name is vx.y.z (x/y/z are numbers from 0 to 9). +A4. +```shell +make lint +make format +``` -For example, after PyMilvus 1.0.1 is released, a tag named v1.0.1 can be found on GitHub, and a package with version 1.0.1 can be downloaded on PyPI. +Q5. How to set up pre-commit hooks to automatically check and fix the coding styles? -### Developing packages +Once installed, the hooks will automatically run `make format` and `make lint` before each commit. If the checks fail, the commit will be aborted, and you'll need to fix the issues before committing again. -The commits on the development branch of each version will be packaged and uploaded to Test PyPI. -Development branches refer to branches such as 1.0 and 1.1, and version releases are generated from the development branches, such as 1.0.1 and 1.0.2. +A5. Pre-commit hooks help ensure code quality by automatically running linting and formatting checks before each commit. +```shell +# Install pre-commit (if not already installed) +$ pip install pre-commit -The package name generated by the development branch is x.y.z.dev, where is the number of commits that differ from the most recent release. +# Install the git hook scripts +$ pre-commit install +``` -For example, after the release of 1.0.1, two commits were submitted on the 1.0 branch. At this time, the automatic packaging version number of the development branch is 1.0.1.dev2. +Q7. How to run unittests? -To install the package on test.pypi.org, you need to append the parameter --index-url after pip, for example: +A7 ```shell -$ python3 -m pip install --index-url https://test.pypi.org/simple/ pymilvus +$ pip install ".[dev]" +$ make unittest ``` +Q8. `zsh: no matches found: pymilvus[model]`, how do I solve this? -## License -[Apache License 2.0](LICENSE) +A8 +```shell +$ pip install "pymilvus[model]" +``` + +## Documentation + +Documentation is available online: https://milvus.io/api-reference/pymilvus/v2.4.x/About.md + +## Developing package releases + +The commits on the development branch of each version will be packaged and uploaded to [Test PyPI](https://test.pypi.org/). + +The package name generated by the development branch is x.y.z.rc, where is the number of commits that differ from the most recent release. + +- For example, after the release of **2.3.4**, two commits were submitted on the 2.3 branch. +The version number of the latest commit of 2.3 branch is **2.3.5.rc2**. +- For example, after the release of **2.3.4**, 10 commits were submitted on the master branch. +The version number of the latest commit of master branch is **2.4.0.rc10**. -[mergify]: https://mergify.io -[mergify-status]: https://img.shields.io/endpoint.svg?url=https://gh.mergify.io/badges/milvus-io/pymilvus&style=plastic + +To install the package on Test PyPi, you need to append `--extra-index-url` after pip, for example: +```shell +$ python3 -m pip install --extra-index-url https://test.pypi.org/simple/ pymilvus==2.1.0.dev66 +``` + + +## License +[Apache License 2.0](LICENSE) diff --git a/_version_helper.py b/_version_helper.py new file mode 100644 index 000000000..e3e9f116a --- /dev/null +++ b/_version_helper.py @@ -0,0 +1,91 @@ +""" +this module is a hack only in place to allow for setuptools +to use the attribute for the versions + +it works only if the backend-path of the build-system section +from pyproject.toml is respected +""" +from __future__ import annotations + +import logging +from typing import Callable + +from setuptools import build_meta as build_meta # noqa +from setuptools_scm import Configuration, get_version, git, hg +from setuptools_scm import _types as _t +from setuptools_scm.fallbacks import parse_pkginfo +from setuptools_scm.version import ( + SEMVER_MINOR, + ScmVersion, + _parse_version_tag, + get_no_local_node, + guess_next_simple_semver, + guess_next_version, +) + +log = logging.getLogger("setuptools_scm") +# todo: take fake entrypoints from pyproject.toml +try_parse: list[Callable[[_t.PathT, Configuration], ScmVersion | None]] = [ + parse_pkginfo, + git.parse, + hg.parse, + git.parse_archival, + hg.parse_archival, +] + + +def parse(root: str, config: Configuration) -> ScmVersion | None: + for maybe_parse in try_parse: + try: + parsed = maybe_parse(root, config) + except OSError as e: + log.info("parse with %s failed with: %s", maybe_parse, e) + else: + if parsed is not None: + return parsed + +fmt = "{guessed}rc{distance}" # align with PEP440 public version that has no dot before rc + +def custom_version(version: ScmVersion) -> str: + if version.exact: + return version.format_with("{tag}") + if version.branch is not None: + # Does the branch name (stripped of namespace) parse as a version? + branch_ver_data = _parse_version_tag( + version.branch.split("/")[-1], version.config + ) + if branch_ver_data is not None: + branch_ver = branch_ver_data["version"] + if branch_ver[0] == "v": + # Allow branches that start with 'v', similar to Version. + branch_ver = branch_ver[1:] + # Does the branch version up to the minor part match the tag? If not it + # might be like, an issue number or something and not a version number, so + # we only want to use it if it matches. + tag_ver_up_to_minor = str(version.tag).split(".")[:SEMVER_MINOR] + branch_ver_up_to_minor = branch_ver.split(".")[:SEMVER_MINOR] + if branch_ver_up_to_minor == tag_ver_up_to_minor: + # We're in a release/maintenance branch, next is a patch/rc/beta bump: + return version.format_next_version(guess_next_version, fmt=fmt) + # We're in a development branch, next is a minor bump: + return version.format_next_version(guess_next_simple_semver, retain=SEMVER_MINOR, fmt=fmt) + + +def scm_version() -> str: + return get_version( + relative_to=__file__, + parse=parse, + version_scheme=custom_version, + local_scheme=get_no_local_node, + ) + + +version: str + + +def __getattr__(name: str) -> str: + if name == "version": + global version + version = scm_version() + return version + raise AttributeError(name) diff --git a/check_proto_product.sh b/check_proto_product.sh new file mode 100755 index 000000000..b833ddc83 --- /dev/null +++ b/check_proto_product.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# Licensed to the LF AI & Data foundation under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +SCRIPTS_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +cd ${SCRIPTS_DIR} + +GO_SRC_DIR="${SCRIPTS_DIR}/$1" + +if [[ $(uname -s) == "Darwin" ]]; then + if ! brew --prefix --installed grep >/dev/null 2>&1; then + brew install grep + fi + export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH" +fi + +if test -z "$(git status | grep -E "*pb2.py|*pb2_grpc.py")"; then + echo "Success to check the proto files" + exit 0 +else + echo "The milvus-proto commit doesn't match with files generated by proto!" + exit 1 +fi diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..e72c09e55 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,16 @@ +# Configuration File for CodeCov +coverage: + precision: 2 + round: down + range: "70...100" + + # status: + # project: + # default: + # target: 77% + # threshold: 0% #Allow the coverage to drop by threshold%, and posting a success status. + # patch: + # default: + # target: 80% #target of patch diff + # threshold: 0% + # if_ci_failed: error #success, failure, error, ignore diff --git a/docs/source/api/api.rst b/docs/source/api/api.rst index f6e0b935d..055977f2b 100644 --- a/docs/source/api/api.rst +++ b/docs/source/api/api.rst @@ -1,7 +1,7 @@ .. _api: API Reference -============ +============= .. toctree:: :maxdepth: 1 diff --git a/docs/source/api/collection.rst b/docs/source/api/collection.rst index af98da73d..c9bbcde40 100644 --- a/docs/source/api/collection.rst +++ b/docs/source/api/collection.rst @@ -1,6 +1,6 @@ -========= +========== Collection -========= +========== The scheme of a collection is fixed when collection created. Collection scheme consists of many fields, and must contain a vector field. A field to collection is like a column to RDBMS table. Data type are the same in one field. @@ -61,6 +61,8 @@ Methods +---------------------------------------------------------------+--------------------------------------------------------------------------+ | `search() <#pymilvus.Collection.search>`_ | Vector similarity search with an optional boolean expression as filters. | +---------------------------------------------------------------+--------------------------------------------------------------------------+ +| `upsert() <#pymilvus.Collection.upsert>`_ | Upsert data of collection. | ++---------------------------------------------------------------+--------------------------------------------------------------------------+ | `query() <#pymilvus.Collection.query>`_ | Query with a set of criteria. | +---------------------------------------------------------------+--------------------------------------------------------------------------+ | `partition() <#pymilvus.Collection.partition>`_ | Return the partition corresponding to name. | diff --git a/docs/source/api/partition.rst b/docs/source/api/partition.rst index e11475f45..28f6b2472 100644 --- a/docs/source/api/partition.rst +++ b/docs/source/api/partition.rst @@ -37,23 +37,25 @@ Methods --------------------- -+--------------------------------------------+-------------------------------------------------------------------------+ -| API | Description | -+============================================+=========================================================================+ -| `drop() <#pymilvus.Partition.drop>`_ | Drop the Partition, as well as its corresponding index files. | -+--------------------------------------------+-------------------------------------------------------------------------+ -| `load() <#pymilvus.Partition.load>`_ | Load the Partition from disk to memory. | -+--------------------------------------------+-------------------------------------------------------------------------+ -| `release() <#pymilvus.Partition.release>`_ | Release the Partition from memory. | -+--------------------------------------------+-------------------------------------------------------------------------+ -| `insert() <#pymilvus.Partition.insert>`_ | Insert data into partition. | -+--------------------------------------------+-------------------------------------------------------------------------+ -| `delete() <#pymilvus.Partition.delete>`_ | Delete entities with an expression condition. | -+---------------------------------------------------------------+------------------------------------------------------+ -| `search() <#pymilvus.Partition.search>`_ | Vector similarity search with an optional boolean expression as filters.| -+--------------------------------------------+-------------------------------------------------------------------------+ -| `query() <#pymilvus.Partition.query>`_ | Query with a set of criteria. | -+--------------------------------------------+-------------------------------------------------------------------------+ ++--------------------------------------------+--------------------------------------------------------------------------+ +| API | Description | ++============================================+==========================================================================+ +| `drop() <#pymilvus.Partition.drop>`_ | Drop the Partition, as well as its corresponding index files. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `load() <#pymilvus.Partition.load>`_ | Load the Partition from disk to memory. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `release() <#pymilvus.Partition.release>`_ | Release the Partition from memory. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `insert() <#pymilvus.Partition.insert>`_ | Insert data into partition. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `delete() <#pymilvus.Partition.delete>`_ | Delete entities with an expression condition. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `upsert() <#pymilvus.Collection.upsert>`_ | Upsert data of collection. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `search() <#pymilvus.Partition.search>`_ | Vector similarity search with an optional boolean expression as filters. | ++--------------------------------------------+--------------------------------------------------------------------------+ +| `query() <#pymilvus.Partition.query>`_ | Query with a set of criteria. | ++--------------------------------------------+--------------------------------------------------------------------------+ API Refereences --------------- @@ -61,5 +63,5 @@ API Refereences .. autoclass:: pymilvus.Partition :member-order: bysource - :members: description, name, is_empty, num_entities, drop, load, release, insert, search, query + :members: description, name, is_empty, num_entities, drop, load, release, insert, search, query, delete diff --git a/docs/source/api/utility.rst b/docs/source/api/utility.rst index d0458c7e5..aed9b0087 100644 --- a/docs/source/api/utility.rst +++ b/docs/source/api/utility.rst @@ -26,12 +26,8 @@ Methods +--------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ | `drop_collections(collection_name, [timeout, using]) <#pymilvus.utility.drop_collection>`_ | Drop a collection by name. | +--------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ -| `calc_distance(vectors_left, vectors_right, params, [timeout, using]) <#pymilvus.utility.calc_distance>`_ | Calculate distance between two vector arrays. | -+--------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ | `get_query_segment_info([timeout, using]) <#pymilvus.utility.get_query_segment_info>`_ | Get segments information from query nodes. | +--------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ -| `load_balance(src_node_id, dst_node_id, sealed_segment_ids, [timeout, using]) <#pymilvus.utility.load_balance>`_ | Do load balancing between query nodes. | -+--------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ | `mkts_from_hybridts(ts, [milliseconds, delta]) <#pymilvus.utility.mkts_from_hybridts>`_ | Generate hybrid timestamp with a known one. | +--------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------+ | `mkts_from_unixtime(timestamp, [milliseconds, delta]) <#pymilvus.utility.mkts_from_unixtime>`_ | Generate hybrid timestamp with Unix time. | @@ -55,6 +51,6 @@ APIs References :member-order: bysource :members: loading_progress, wait_for_loading_complete, index_building_progress, wait_for_index_building_complete, has_collection, has_partition, list_collections, - drop_collection, calc_distance, get_query_segment_info, load_balance, + drop_collection, get_query_segment_info, mkts_from_hybridts, mkts_from_unixtime, mkts_from_datetime, hybridts_to_unixtime, hybridts_to_datetime, create_alias, alter_alias, drop_alias diff --git a/docs/source/conf.py b/docs/source/conf.py index 74608a1b5..1b1e89e14 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -18,11 +18,11 @@ # -- Project information ----------------------------------------------------- project = 'pymilvus' -copyright = '2021, Milvus' +copyright = '2019-2022, Milvus' author = 'Milvus' # The full version, including alpha/beta/rc tags -release = '2.0.0' +release = '2.1.0' show_authors = True @@ -38,7 +38,8 @@ 'sphinx_copybutton', 'm2r', 'sphinx.ext.autosummary', - 'sphinxcontrib.prettyspecialmethods' + 'sphinxcontrib.prettyspecialmethods', + 'sphinxcontrib.napoleon' ] @@ -66,6 +67,21 @@ # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [] +# napoleon styes +napoleon_google_docstring = True +napoleon_numpy_docstring = False +napoleon_include_init_with_doc = False +napoleon_include_private_with_doc = False +napoleon_include_special_with_doc = False +napoleon_use_admonition_for_examples = False +napoleon_use_admonition_for_notes = False +napoleon_use_admonition_for_references = False +napoleon_use_ivar = False +napoleon_use_param = True +napoleon_use_rtype = True +napoleon_use_keyword = True +napoleon_custom_sections = None + # -- Options for HTML output ------------------------------------------------- @@ -74,7 +90,7 @@ # html_theme = 'alabaster' html_theme = 'sphinx_rtd_theme' html_show_sphinx = False -copyright = '2019-2021 Zilliz. All rights reserved.' +copyright = '2019-2022 Zilliz. All rights reserved.' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, diff --git a/docs/source/faq.rst b/docs/source/faq.rst index ba4e294b2..9ea5df51b 100644 --- a/docs/source/faq.rst +++ b/docs/source/faq.rst @@ -1,3 +1,8 @@ === FAQ === +This page lists common issues that may occur when using Milvus, as well as possible troubleshooting tips. + +What should I do if I got ``AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'``? +--------------------------------------------------------------------------------------------------------------------------- +You should upgrade Protobuf with ``pip install --upgrade protobuf`` to version later than that PyMilvus required. You can check the version of Protobuf installed on on your device with ``pip3 show protobuf``. diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 000000000..df635b4e6 --- /dev/null +++ b/examples/README.md @@ -0,0 +1 @@ +# Examples diff --git a/examples/alias.py b/examples/alias.py new file mode 100644 index 000000000..78bd81d8a --- /dev/null +++ b/examples/alias.py @@ -0,0 +1,77 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") +milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2", auto_id=True) + +collection_name2 = "hello_milvus2" +milvus_client.drop_collection(collection_name2) +milvus_client.create_collection(collection_name2, dim, consistency_level="Strong", metric_type="L2", auto_id=True) + + +print("collections:", milvus_client.list_collections()) + +desc_c1 = milvus_client.describe_collection(collection_name) +print(f"{collection_name} :", desc_c1) + +rng = np.random.default_rng(seed=19530) + +rows = [ + {"vector": rng.random((1, dim))[0], "a": 100}, + {"vector": rng.random((1, dim))[0], "b": 200}, + {"vector": rng.random((1, dim))[0], "c": 300}, +] + +print(fmt.format(f"Start inserting entities to {collection_name}")) +insert_result = milvus_client.insert(collection_name, rows) +print(insert_result) + +rows = [ + {"vector": rng.random((1, dim))[0], "d": 400}, + {"vector": rng.random((1, dim))[0], "e": 500}, + {"vector": rng.random((1, dim))[0], "f": 600}, +] + +print(fmt.format(f"Start inserting entities to {collection_name2}")) +insert_result2 = milvus_client.insert(collection_name2, rows) +print(insert_result2) + + + +alias = "alias_hello_milvus" +milvus_client.drop_alias(alias) +milvus_client.create_alias(collection_name, alias) + +aliases = milvus_client.list_aliases(collection_name) +print(f"aliases of {collection_name} is:", aliases) + + +alias_info = milvus_client.describe_alias(alias) +print(f"info of {alias} is:", alias_info) + +assert milvus_client.describe_collection(alias) == milvus_client.describe_collection(collection_name) + +milvus_client.alter_alias(collection_name2, alias) +assert milvus_client.describe_collection(alias) == milvus_client.describe_collection(collection_name2) + +query_results = milvus_client.query(alias, filter= "f == 600") +print("results of query 'f == 600' is ") +for ret in query_results: + print(ret) + + +milvus_client.drop_alias(alias) +has_collection = milvus_client.has_collection(alias) +assert not has_collection +has_collection = milvus_client.has_collection(collection_name2) +assert has_collection + +milvus_client.drop_collection(collection_name) +milvus_client.drop_collection(collection_name2) diff --git a/examples/alter.py b/examples/alter.py new file mode 100644 index 000000000..012f1553d --- /dev/null +++ b/examples/alter.py @@ -0,0 +1,44 @@ +import numpy as np +from pymilvus import ( + MilvusClient, + DataType +) + +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("title", DataType.VARCHAR, max_length=64) +milvus_client.create_collection(collection_name, schema=schema) +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "embeddings": rng.random((1, dim))[0], "a": 100, "title": "t1"}, + {"id": 2, "embeddings": rng.random((1, dim))[0], "b": 200, "title": "t2"}, + {"id": 3, "embeddings": rng.random((1, dim))[0], "c": 300, "title": "t3"}, + {"id": 4, "embeddings": rng.random((1, dim))[0], "d": 400, "title": "t4"}, + {"id": 5, "embeddings": rng.random((1, dim))[0], "e": 500, "title": "t5"}, + {"id": 6, "embeddings": rng.random((1, dim))[0], "f": 600, "title": "t6"}, +] + +insert_result = milvus_client.insert(collection_name, rows) +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", metric_type="L2") +milvus_client.create_index(collection_name, index_params) +milvus_client.alter_index_properties(collection_name,index_name="embeddings", properties={"mmap.enabled":True}) +milvus_client.drop_index_properties(collection_name,index_name="embeddings", property_keys=["mmap.enabled"]) +milvus_client.alter_collection_field(collection_name,field_name="title",field_params={"mmap.enabled":True,"max_length": 2500}) +milvus_client.alter_collection_properties(collection_name, properties={"mmap.enabled":True,"collection.ttl.seconds": 500}) +milvus_client.drop_collection_properties(collection_name,index_name="embeddings", property_keys=["mmap.enabled"]) +milvus_client.load_collection(collection_name) +print(milvus_client.describe_index(collection_name,index_name="embeddings")) +print(milvus_client.describe_collection(collection_name)) +milvus_client.release_collection(collection_name) +milvus_client.drop_index(collection_name, "embeddings") +milvus_client.drop_collection(collection_name) diff --git a/examples/async_DDL_test.py b/examples/async_DDL_test.py new file mode 100644 index 000000000..646dbc3a0 --- /dev/null +++ b/examples/async_DDL_test.py @@ -0,0 +1,256 @@ +import asyncio +import time +import numpy as np +from pymilvus import AsyncMilvusClient, DataType + +fmt = "\n=== {:30} ===\n" +dim = 128 +collection_name = "test_collection" +test_user = "test_user" +test_role = "test_role" +test_alias = "test_alias" +test_db = "test_database" +partition_name = "test_partition" +group_name = "test_privilege_group" +rg1_name = "test_resource_group" +rg2_name = "test_resource_group" + +async def create_resources(client): + print(fmt.format("Creating Resources")) + + print("Creating database...") + await client.create_database(test_db) + print(f"Database {test_db} created") + + print("Creating user...") + await client.create_user(test_user, "password123") + print(f"User {test_user} created") + + print("Creating privilege group...") + await client.create_privilege_group(group_name) + print(f"Privilege group {group_name} created") + + print("Creating collection...") + schema = client.create_schema( + auto_id=True, description="Test collection", enable_dynamic_field=True + ) + schema.add_field("id", DataType.INT64, is_primary=True, auto_id=True) + schema.add_field("vector", DataType.FLOAT_VECTOR, dim=dim) + schema.add_field("text", DataType.VARCHAR, max_length=512) + + index_params = client.prepare_index_params() + index_params.add_index("vector", index_type="HNSW", metric_type="L2") + + await client.create_collection(collection_name, schema=schema) + print(f"Collection {collection_name} created") + + print("Creating partition...") + await client.create_partition(collection_name, partition_name) + print(f"Partition {partition_name} created") + + await client.create_index(collection_name, index_params=index_params) + print("Index created") + + print("Creating alias...") + await client.create_alias(collection_name, test_alias) + print(f"Alias {test_alias} created") + + print("Creating resource groups...") + await client.create_resource_group(rg1_name) + print(f"Resource group {rg1_name} created") + await client.create_resource_group(rg2_name) + print(f"Resource group {rg2_name} created") + + print("Loading collection...") + await client.load_collection(collection_name) + print("Collection loaded") + + return True + +async def test_functionality(client): + print(fmt.format("Testing Functionality")) + + print("Testing server info...") + server_version = await client.get_server_version() + print(f"Server version: {server_version}") + + print("Testing collection operations...") + print(f"has_collection: {await client.has_collection(collection_name)}") + print(f"list_collections: {await client.list_collections()}") + print(f"describe_collection: {await client.describe_collection(collection_name)}") + + await client.rename_collection(collection_name, f"{collection_name}_renamed") + await client.rename_collection(f"{collection_name}_renamed", collection_name) + print("Collection rename test completed") + + await client.alter_collection_properties(collection_name, {"collection.ttl.seconds": 3600}) + await client.drop_collection_properties(collection_name, ["collection.ttl.seconds"]) + print("Collection properties test completed") + + collection_info = await client.describe_collection(collection_name) + enable_dynamic = collection_info.get('enable_dynamic_field', False) + print(f"Dynamic fields enabled: {enable_dynamic}") + + await client.release_collection(collection_name) + await client.alter_collection_field(collection_name, "text", {"max_length": 256}) + print("Collection field altered") + await client.load_collection(collection_name) + print("Collection reloaded") + + print("Testing index operations...") + print(f"list_indexes: {await client.list_indexes(collection_name)}") + index_name = (await client.list_indexes(collection_name))[0] + print(f"describe_index: {await client.describe_index(collection_name, index_name)}") + + await client.release_collection(collection_name) + await client.alter_index_properties(collection_name, index_name, {"mmap.enabled": True}) + await client.drop_index_properties(collection_name, index_name, ["mmap.enabled"]) + print("Index properties test completed") + await client.load_collection(collection_name) + print("Collection reloaded after index operations") + + print("Testing partition operations...") + print(f"has_partition: {await client.has_partition(collection_name, partition_name)}") + print(f"list_partitions: {await client.list_partitions(collection_name)}") + + print("Testing user management...") + print(f"list_users: {await client.list_users()}") + print(f"describe_user: {await client.describe_user(test_user)}") + + await client.update_password(test_user, "password123", "newpassword123") + print("Password updated") + + print("Testing alias operations...") + print(f"describe_alias: {await client.describe_alias(test_alias)}") + print(f"list_aliases: {await client.list_aliases(collection_name)}") + + await client.alter_alias(collection_name, test_alias) + print("Alias altered") + + print("Testing data operations...") + data = [{ + "vector": np.random.random(dim).tolist(), + "text": f"test text {i}", + "dynamic_field_int": i * 10, + "dynamic_field_str": f"dynamic_{i}", + "dynamic_field_float": i * 0.5 + } for i in range(10)] + + result = await client.insert(collection_name, data) + print(f"insert result: {result}") + + await client.flush(collection_name) + print("flush completed") + + compaction_id = await client.compact(collection_name) + print(f"compact job id: {compaction_id}") + print(f"compaction state: {await client.get_compaction_state(compaction_id)}") + + print("Testing stats and load state...") + print(f"get_collection_stats: {await client.get_collection_stats(collection_name)}") + partition_stats = await client.get_partition_stats(collection_name, partition_name) + print(f"get_partition_stats: {partition_stats}") + print(f"get_load_state: {await client.get_load_state(collection_name)}") + + await client.refresh_load(collection_name) + print(f"describe_replica: {await client.describe_replica(collection_name)}") + + print("Testing text analysis...") + analyzer_result = await client.run_analyzer( + texts=["hello world", "test text"], + analyzer_params={"tokenizer": "standard"} + ) + print(f"analyzer result: {analyzer_result}") + + print("Testing database operations...") + print(f"list_databases: {await client.list_databases()}") + print(f"describe_database: {await client.describe_database(test_db)}") + + client.use_database(test_db) + client.using_database("default") + print("Database switch test completed") + + await client.alter_database_properties(test_db, {"database.replica.num": 1}) + await client.drop_database_properties(test_db, ["database.replica.num"]) + print("Database properties test completed") + + print("Testing privilege group operations...") + print(f"list_privilege_groups: {await client.list_privilege_groups()}") + + await client.add_privileges_to_group(group_name, ["Insert", "Delete"]) + await client.remove_privileges_from_group(group_name, ["Delete"]) + print("Privilege group operations completed") + + print(fmt.format("Testing create_field_schema")) + field1 = client.create_field_schema("test_id", DataType.INT64, desc="test int64 field", is_primary=True, auto_id=True) + print(f"Field1: {field1}") + field2 = client.create_field_schema("test_vector", DataType.FLOAT_VECTOR, desc="test vector field", dim=dim) + print(f"Field2: {field2}") + field3 = client.create_field_schema("test_text", DataType.VARCHAR, desc="test varchar field", max_length=256) + print(f"Field3: {field3}") + del field1 + del field2 + del field3 + print("create_field_schema test completed") + + print(fmt.format("Testing Resource Group Operations")) + + # List resource groups + print("\nListing resource groups...") + rgs = await client.list_resource_groups() + print(f"Resource groups: {rgs}") + assert rg1_name in rgs + assert rg2_name in rgs + + # Describe resource groups + print(f"\nDescribing resource group {rg1_name}...") + rg1_info = await client.describe_resource_group(rg1_name) + print(f"Resource group {rg1_name} info: {rg1_info}") + + print(f"\nDescribing resource group {rg2_name}...") + rg2_info = await client.describe_resource_group(rg2_name) + print(f"Resource group {rg2_name} info: {rg2_info}") + +async def cleanup_resources(client): + print(fmt.format("Cleaning Up Resources")) + + print("Dropping alias...") + await client.drop_alias(test_alias) + print(f"Alias {test_alias} dropped") + + print("Dropping collection...") + await client.drop_collection(collection_name) + print(f"Collection {collection_name} dropped") + + print("Dropping user...") + await client.drop_user(test_user) + print(f"User {test_user} dropped") + + print("Dropping privilege group...") + await client.drop_privilege_group(group_name) + print(f"Privilege group {group_name} dropped") + + print("Dropping database...") + await client.drop_database(test_db) + print(f"Database {test_db} dropped") + + print("\nDropping resource groups...") + if rg1_name in await client.list_resource_groups(): + await client.drop_resource_group(rg1_name) + print(f"Resource group {rg1_name} dropped") + if rg2_name in await client.list_resource_groups(): + await client.drop_resource_group(rg2_name) + print(f"Resource group {rg2_name} dropped") + +async def main(): + client = AsyncMilvusClient("http://localhost:19530") + await create_resources(client) + await test_functionality(client) + time.sleep(10) + await cleanup_resources(client) + time.sleep(10) + await client.close() + print(fmt.format("Test Completed")) + +if __name__ == "__main__": + asyncio.run(main()) \ No newline at end of file diff --git a/examples/async_previledge_test.py b/examples/async_previledge_test.py new file mode 100644 index 000000000..cfebcebf8 --- /dev/null +++ b/examples/async_previledge_test.py @@ -0,0 +1,212 @@ +import asyncio + +from pymilvus import AsyncMilvusClient, DataType + +# Super user credentials for admin operations +super_user = "" +super_password = "" + +fmt = "\n=== {:30} ===\n" +collection_name = "test_privilege_collection" +test_user = "test_privilege_user" +test_role_v1 = "test_role_v1" +test_role_v2 = "test_role_v2" +test_db = "test_privilege_database" +privilege_group_name = "test_privilege_group" + +# Test data for privilege operations +db_rw_privileges = [ + {"object_type": "Collection", "privilege": "Insert", "object_name": collection_name}, + {"object_type": "Collection", "privilege": "Delete", "object_name": collection_name}, + {"object_type": "Collection", "privilege": "Search", "object_name": collection_name}, + {"object_type": "Collection", "privilege": "Query", "object_name": collection_name}, +] + +db_ro_privileges = [ + {"object_type": "Collection", "privilege": "Search", "object_name": collection_name}, + {"object_type": "Collection", "privilege": "Query", "object_name": collection_name}, +] + + +async def create_resources(client: AsyncMilvusClient): + print(fmt.format("Creating Resources")) + + print("Creating database...") + await client.create_database(test_db) + print(f"Database {test_db} created") + + print("Creating user and roles...") + await client.create_user(test_user, "password123") + await client.create_role(test_role_v1) + await client.create_role(test_role_v2) + print(f"User {test_user} and roles {test_role_v1}, {test_role_v2} created") + + print("Creating privilege group...") + await client.create_privilege_group(privilege_group_name) + print(f"Privilege group {privilege_group_name} created") + + print("Adding privileges to group...") + await client.add_privileges_to_group(privilege_group_name, ["Search", "Query", "Insert"]) + print("Privileges added to group") + + print("Creating collection...") + schema = client.create_schema( + auto_id=True, description="Test privilege collection", enable_dynamic_field=True + ) + schema.add_field("id", DataType.INT64, is_primary=True, auto_id=True) + schema.add_field("vector", DataType.FLOAT_VECTOR, dim=128) + schema.add_field("text", DataType.VARCHAR, max_length=512) + + await client.create_collection(collection_name, schema=schema, using_database=test_db) + print(f"Collection {collection_name} created in database {test_db}") + + return True + + +async def test_grant_revoke_privilege(client: AsyncMilvusClient): + print(fmt.format("Testing grant_privilege / revoke_privilege")) + + # Test grant_privilege for different privileges + print("Testing grant_privilege...") + for privilege_item in db_rw_privileges: + await client.grant_privilege( + role_name=test_role_v1, + object_type=privilege_item["object_type"], + privilege=privilege_item["privilege"], + object_name=privilege_item["object_name"], + db_name=test_db, + ) + print( + f"Granted {privilege_item['privilege']} on {privilege_item['object_name']} to {test_role_v1}" + ) + + # Check role privileges + print(f"\nChecking role privileges for {test_role_v1}...") + role_info = await client.describe_role(test_role_v1) + print(f"Role {test_role_v1} privileges: {role_info}") + + # Grant role to user + print(f"\nGranting role {test_role_v1} to user {test_user}...") + await client.grant_role(test_user, test_role_v1) + print("Role granted to user") + + # Check user info + user_info = await client.describe_user(test_user) + print(f"User {test_user} info: {user_info}") + + # Test revoke_privilege + print("\nTesting revoke_privilege...") + for privilege_item in db_ro_privileges: + await client.revoke_privilege( + role_name=test_role_v1, + object_type=privilege_item["object_type"], + privilege=privilege_item["privilege"], + object_name=privilege_item["object_name"], + db_name=test_db, + ) + print( + f"Revoked {privilege_item['privilege']} on {privilege_item['object_name']} from {test_role_v1}" + ) + + # Check role privileges after revoke + print(f"\nChecking role privileges after revoke for {test_role_v1}...") + role_info = await client.describe_role(test_role_v1) + print(f"Role {test_role_v1} privileges after revoke: {role_info}") + + # Revoke role from user + print(f"\nRevoking role {test_role_v1} from user {test_user}...") + await client.revoke_role(test_user, test_role_v1) + print("Role revoked from user") + + +async def test_grant_revoke_privilege_v2(client: AsyncMilvusClient): + print(fmt.format("Testing grant_privilege_v2 / revoke_privilege_v2")) + + # Test grant_privilege_v2 with custom privilege group + print("Testing grant_privilege_v2 with custom privilege group...") + await client.grant_privilege_v2( + role_name=test_role_v2, privilege=privilege_group_name, collection_name="*", db_name=test_db + ) + print( + f"Granted privilege group {privilege_group_name} on all collections in {test_db} to {test_role_v2}" + ) + + # Test grant_privilege_v2 with built-in privilege groups + print("\nTesting grant_privilege_v2 with built-in privilege groups...") + + # Grant collection-level privileges + await client.grant_privilege_v2( + role_name=test_role_v2, + privilege="CollectionReadWrite", + collection_name=collection_name, + db_name=test_db, + ) + print(f"Granted CollectionReadWrite on {collection_name} to {test_role_v2}") + + # Grant database-level privileges + await client.grant_privilege_v2( + role_name=test_role_v2, privilege="DatabaseReadOnly", collection_name="*", db_name=test_db + ) + print(f"Granted DatabaseReadOnly on database {test_db} to {test_role_v2}") + + # Check role privileges + print(f"\nChecking role privileges for {test_role_v2}...") + role_info = await client.describe_role(test_role_v2) + print(f"Role {test_role_v2} privileges: {role_info}") + + # Grant role to user + print(f"\nGranting role {test_role_v2} to user {test_user}...") + await client.grant_role(test_user, test_role_v2) + print("Role granted to user") + + # Check user info + user_info = await client.describe_user(test_user) + print(f"User {test_user} info: {user_info}") + + # Test revoke_privilege_v2 + print("\nTesting revoke_privilege_v2...") + + # Revoke custom privilege group + await client.revoke_privilege_v2( + role_name=test_role_v2, privilege=privilege_group_name, collection_name="*", db_name=test_db + ) + print(f"Revoked privilege group {privilege_group_name} from {test_role_v2}") + + # Revoke built-in privilege group + await client.revoke_privilege_v2( + role_name=test_role_v2, privilege="DatabaseReadOnly", collection_name="*", db_name=test_db + ) + print(f"Revoked DatabaseReadOnly from {test_role_v2}") + + # Revoke collection-level privilege + await client.revoke_privilege_v2( + role_name=test_role_v2, + privilege="CollectionReadWrite", + collection_name=collection_name, + db_name=test_db, + ) + print(f"Revoked CollectionReadWrite from {test_role_v2}") + + # Check role privileges after revoke + print(f"\nChecking role privileges after revoke for {test_role_v2}...") + role_info = await client.describe_role(test_role_v2) + print(f"Role {test_role_v2} privileges after revoke: {role_info}") + + # Revoke role from user + print(f"\nRevoking role {test_role_v2} from user {test_user}...") + await client.revoke_role(test_user, test_role_v2) + print("Role revoked from user") + + +async def main(): + client = AsyncMilvusClient("http://localhost:19530", user=super_user, password=super_password) + + await create_resources(client) + await test_grant_revoke_privilege(client) + await test_grant_revoke_privilege_v2(client) + print(fmt.format("All Privilege Tests Completed Successfully")) + await client.close() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/examples/bulk_import/bulk_writer_all_types.py b/examples/bulk_import/bulk_writer_all_types.py new file mode 100644 index 000000000..e68bd2c08 --- /dev/null +++ b/examples/bulk_import/bulk_writer_all_types.py @@ -0,0 +1,327 @@ +import datetime +import pytz +import time +import numpy as np +from typing import List + +from pymilvus import ( + MilvusClient, + CollectionSchema, DataType, +) + +from pymilvus.bulk_writer import ( + RemoteBulkWriter, LocalBulkWriter, + BulkFileType, + bulk_import, + get_import_progress, +) + +# minio +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" + +# milvus +HOST = '127.0.0.1' +PORT = '19530' + +COLLECTION_NAME = "for_bulkwriter" +DIM = 16 # must >= 8 +ROW_COUNT = 10 + +client = MilvusClient(uri="http://localhost:19530", user="root", password="Milvus") +print(client.get_server_version()) + + +def gen_float_vector(i): + return [i / 4 for _ in range(DIM)] + + +def gen_binary_vector(i, to_numpy_arr: bool): + raw_vector = [(i + k) % 2 for k in range(DIM)] + if to_numpy_arr: + return np.packbits(raw_vector, axis=-1) + return raw_vector + + +def gen_sparse_vector(i, indices_values: bool): + raw_vector = {} + dim = 3 + if indices_values: + raw_vector["indices"] = [i + k for k in range(dim)] + raw_vector["values"] = [(i + k) / 8 for k in range(dim)] + else: + for k in range(dim): + raw_vector[i + k] = (i + k) / 8 + return raw_vector + + +def build_schema(): + schema = MilvusClient.create_schema(enable_dynamic_field=False) + schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True) + schema.add_field(field_name="bool", datatype=DataType.BOOL) + schema.add_field(field_name="int8", datatype=DataType.INT8) + schema.add_field(field_name="int16", datatype=DataType.INT16) + schema.add_field(field_name="int32", datatype=DataType.INT32) + schema.add_field(field_name="int64", datatype=DataType.INT64) + schema.add_field(field_name="float", datatype=DataType.FLOAT) + schema.add_field(field_name="double", datatype=DataType.DOUBLE) + schema.add_field(field_name="varchar", datatype=DataType.VARCHAR, max_length=100) + schema.add_field(field_name="json", datatype=DataType.JSON) + schema.add_field(field_name="timestamp", datatype=DataType.TIMESTAMPTZ) + schema.add_field(field_name="geometry", datatype=DataType.GEOMETRY) + + schema.add_field(field_name="array_bool", datatype=DataType.ARRAY, element_type=DataType.BOOL, max_capacity=10) + schema.add_field(field_name="array_int8", datatype=DataType.ARRAY, element_type=DataType.INT8, max_capacity=10) + schema.add_field(field_name="array_int16", datatype=DataType.ARRAY, element_type=DataType.INT16, max_capacity=10) + schema.add_field(field_name="array_int32", datatype=DataType.ARRAY, element_type=DataType.INT32, max_capacity=10) + schema.add_field(field_name="array_int64", datatype=DataType.ARRAY, element_type=DataType.INT64, max_capacity=10) + schema.add_field(field_name="array_float", datatype=DataType.ARRAY, element_type=DataType.FLOAT, max_capacity=10) + schema.add_field(field_name="array_double", datatype=DataType.ARRAY, element_type=DataType.DOUBLE, max_capacity=10) + schema.add_field(field_name="array_varchar", datatype=DataType.ARRAY, element_type=DataType.VARCHAR, + max_capacity=10, max_length=100) + + schema.add_field(field_name="float_vector", datatype=DataType.FLOAT_VECTOR, dim=DIM) + schema.add_field(field_name="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR) + schema.add_field(field_name="binary_vector", datatype=DataType.BINARY_VECTOR, dim=DIM) + + struct_schema = MilvusClient.create_struct_field_schema() + struct_schema.add_field("struct_bool", DataType.BOOL) + struct_schema.add_field("struct_int8", DataType.INT8) + struct_schema.add_field("struct_int16", DataType.INT16) + struct_schema.add_field("struct_int32", DataType.INT32) + struct_schema.add_field("struct_int64", DataType.INT64) + struct_schema.add_field("struct_float", DataType.FLOAT) + struct_schema.add_field("struct_double", DataType.DOUBLE) + struct_schema.add_field("struct_varchar", DataType.VARCHAR, max_length=100) + struct_schema.add_field("struct_float_vec", DataType.FLOAT_VECTOR, dim=DIM) + schema.add_field("struct_field", datatype=DataType.ARRAY, element_type=DataType.STRUCT, + struct_schema=struct_schema, max_capacity=1000) + schema.verify() + return schema + + +def build_collection(schema: CollectionSchema): + index_params = client.prepare_index_params() + for field in schema.fields: + if (field.dtype in [DataType.FLOAT_VECTOR, DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR]): + index_params.add_index(field_name=field.name, + index_type="AUTOINDEX", + metric_type="L2") + elif field.dtype == DataType.BINARY_VECTOR: + index_params.add_index(field_name=field.name, + index_type="AUTOINDEX", + metric_type="HAMMING") + elif field.dtype == DataType.SPARSE_FLOAT_VECTOR: + index_params.add_index(field_name=field.name, + index_type="SPARSE_INVERTED_INDEX", + metric_type="IP") + + for struct_field in schema.struct_fields: + for field in struct_field.fields: + if (field.dtype == DataType.FLOAT_VECTOR): + index_params.add_index(field_name=f"{struct_field.name}[{field.name}]", + index_name=f"{struct_field.name}_{field.name}", + index_type="HNSW", + metric_type="MAX_SIM_COSINE") + + print(f"Drop collection: {COLLECTION_NAME}") + client.drop_collection(collection_name=COLLECTION_NAME) + client.create_collection( + collection_name=COLLECTION_NAME, + schema=schema, + index_params=index_params, + consistency_level="Strong", + ) + print(f"Collection created: {COLLECTION_NAME}") + print(client.describe_collection(collection_name=COLLECTION_NAME)) + + +def gen_row(i): + shanghai_tz = pytz.timezone("Asia/Shanghai") + row = { + "id": i, + "float_vector": gen_float_vector(i), + "sparse_vector": gen_sparse_vector(i, False if i % 2 == 0 else True), + "binary_vector": gen_binary_vector(i, False if i % 2 == 0 else True), + "bool": True, + "int8": i % 128, + "int16": i % 32768, + "int32": i, + "int64": i, + "float": i / 4, + "double": i / 3, + "varchar": f"varchar_{i}", + "json": {"dummy": i}, + "timestamp": shanghai_tz.localize( + datetime.datetime(2025, 1, 1, 0, 0, 0) + datetime.timedelta(days=i) + ).isoformat(), + "geometry": f"POINT ({i} {i})", + + "array_bool": [True if (i + k) % 2 == 0 else False for k in range(4)], + "array_int8": [(i + k) % 128 for k in range(4)], + "array_int16": [(i + k) % 32768 for k in range(4)], + "array_int32": [(i + k) + 1000 for k in range(4)], + "array_int64": [(i + k) + 100 for k in range(5)], + "array_float": [(i + k) / 4 for k in range(5)], + "array_double": [(i + k) / 3 for k in range(5)], + "array_varchar": [f"element_{i + k}" for k in range(5)], + + "struct_field": [ + { + "struct_bool": True, + "struct_int8": i % 128, + "struct_int16": i % 32768, + "struct_int32": i, + "struct_int64": i, + "struct_float": i / 4, + "struct_double": i / 3, + "struct_varchar": f"aaa_{i}", + "struct_float_vec": gen_float_vector(i) + }, + { + "struct_bool": False, + "struct_int8": -(i % 128), + "struct_int16": -(i % 32768), + "struct_int32": -i, + "struct_int64": -i, + "struct_float": -i / 4, + "struct_double": -i / 3, + "struct_varchar": f"aaa_{i * 1000}", + "struct_float_vec": gen_float_vector(i) + }, + ], + } + return row + + +def bulk_writer(writer): + for i in range(ROW_COUNT): + row = gen_row(i) + print(row) + writer.append_row(row) + if ((i + 1) % 1000 == 0) or (i == ROW_COUNT - 1): + print(f"{i + 1} rows appends") + + print(f"{writer.total_row_count} rows appends") + print(f"{writer.buffer_row_count} rows in buffer not flushed") + writer.commit() + batch_files = writer.batch_files + print(f"Remote writer done! output remote files: {batch_files}") + return batch_files + + +def remote_writer(schema: CollectionSchema, file_type: BulkFileType): + print(f"\n===================== remote writer ({file_type.name}) ====================") + with RemoteBulkWriter( + schema=schema, + remote_path="bulk_data", + local_path="/tmp/PARQUET", + connect_param=RemoteBulkWriter.S3ConnectParam( + endpoint=MINIO_ADDRESS, + access_key=MINIO_ACCESS_KEY, + secret_key=MINIO_SECRET_KEY, + bucket_name="a-bucket", + ), + segment_size=512 * 1024 * 1024, + file_type=file_type, + ) as writer: + return bulk_writer(writer) + + +def call_bulk_import(batch_files: List[List[str]]): + url = f"http://{HOST}:{PORT}" + + print(f"\n===================== import files to milvus ====================") + resp = bulk_import( + url=url, + collection_name=COLLECTION_NAME, + files=batch_files, + ) + print(resp.json()) + job_id = resp.json()['data']['jobId'] + print(f"Create a bulk_import job, job id: {job_id}") + + while True: + print("Wait 2 second to check bulk_import job state...") + time.sleep(2) + + resp = get_import_progress( + url=url, + job_id=job_id, + ) + + state = resp.json()['data']['state'] + progress = resp.json()['data']['progress'] + if state == "Importing": + print(f"The job {job_id} is importing... {progress}%") + continue + if state == "Failed": + reason = resp.json()['data']['reason'] + print(f"The job {job_id} failed, reason: {reason}") + break + if state == "Completed" and progress == 100: + print(f"The job {job_id} completed") + break + + +def local_writer(schema: CollectionSchema, file_type: BulkFileType): + print(f"\n===================== local writer ({file_type.name}) ====================") + writer = LocalBulkWriter( + schema=schema, + local_path="./" + file_type.name, + chunk_size=16 * 1024 * 1024, + file_type=file_type + ) + return bulk_writer(writer) + + +def verify_imported_data(): + # refresh_load() ensure the import data is loaded + client.refresh_load(collection_name=COLLECTION_NAME) + res = client.query(collection_name=COLLECTION_NAME, filter="", output_fields=["count(*)"], + consistency_level="Strong") + print(f'row count: {res[0]["count(*)"]}') + results = client.query(collection_name=COLLECTION_NAME, + filter="id >= 0", + output_fields=["*"]) + print(f"\n===================== query results ====================") + for item in results: + print(item) + id = item["id"] + original_row = gen_row(id) + for key in original_row.keys(): + if key not in item: + raise Exception(f"{key} is missed in query result") + if key == "binary_vector": + # returned binary vector is wrapped by a list, this is a bug + original_row[key] = [bytes(gen_binary_vector(id, True).tolist())] + elif key == "sparse_vector": + # returned sparse vector is id-pair format + original_row[key] = gen_sparse_vector(id, False) + elif key == "timestamp": + # TODO: compare the timestamp values + continue + if item[key] != original_row[key]: + raise Exception(f"value of {key} is unequal, original value: {original_row[key]}, query value: {item[key]}") + print(f"Query result of id={id} is correct") + + +def test_file_type(file_type: BulkFileType): + print(f"\n########################## {file_type.name} ##################################") + schema = build_schema() + batch_files = local_writer(schema=schema, file_type=file_type) + build_collection(schema) + batch_files = remote_writer(schema=schema, file_type=file_type) + call_bulk_import(batch_files=batch_files) + verify_imported_data() + + +if __name__ == '__main__': + file_types = [ + BulkFileType.PARQUET, + BulkFileType.JSON, + BulkFileType.CSV, + ] + for file_type in file_types: + test_file_type(file_type) diff --git a/examples/bulk_import/data_gengerator.py b/examples/bulk_import/data_gengerator.py new file mode 100644 index 000000000..c95a18984 --- /dev/null +++ b/examples/bulk_import/data_gengerator.py @@ -0,0 +1,68 @@ +import random +import tensorflow as tf +import numpy as np + + +# optional input for binary vector: +# 1. list of int such as [1, 0, 1, 1, 0, 0, 1, 0] +# 2. numpy array of uint8 +def gen_binary_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.randint(0, 1) for i in range(dim)] + if to_numpy_arr: + return np.packbits(raw_vector, axis=-1) + return raw_vector + + +# optional input for float vector: +# 1. list of float such as [0.56, 1.859, 6.55, 9.45] +# 2. numpy array of float32 +def gen_float_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.random() for _ in range(dim)] + if to_numpy_arr: + return np.array(raw_vector, dtype="float32") + return raw_vector + + +# optional input for bfloat16 vector: +# 1. list of float such as [0.56, 1.859, 6.55, 9.45] +# 2. numpy array of bfloat16 +def gen_bf16_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.random() for _ in range(dim)] + if to_numpy_arr: + return tf.cast(raw_vector, dtype=tf.bfloat16).numpy() + return raw_vector + + +# optional input for float16 vector: +# 1. list of float such as [0.56, 1.859, 6.55, 9.45] +# 2. numpy array of float16 +def gen_fp16_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.random() for _ in range(dim)] + if to_numpy_arr: + return np.array(raw_vector, dtype=np.float16) + return raw_vector + + +# optional input for sparse vector: +# only accepts dict like {2: 13.23, 45: 0.54} or {"indices": [1, 2], "values": [0.1, 0.2]} +# note: no need to sort the keys +def gen_sparse_vector(pair_dict: bool): + raw_vector = {} + dim = random.randint(2, 20) + if pair_dict: + raw_vector["indices"] = [i for i in range(dim)] + raw_vector["values"] = [random.random() for _ in range(dim)] + else: + for i in range(dim): + raw_vector[i] = random.random() + return raw_vector + + +# optional input for int8 vector: +# 1. list of int8 such as [-6, 18, 65, -94] +# 2. numpy array of int8 +def gen_int8_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.randint(-128, 127) for _ in range(dim)] + if to_numpy_arr: + return np.array(raw_vector, dtype=np.int8) + return raw_vector diff --git a/examples/bulk_import/example_bulkinsert_json.py b/examples/bulk_import/example_bulkinsert_json.py new file mode 100644 index 000000000..012d9b174 --- /dev/null +++ b/examples/bulk_import/example_bulkinsert_json.py @@ -0,0 +1,326 @@ +import random +import json +import time +import os +from typing import List + +from minio import Minio +from minio.error import S3Error + +from pymilvus import ( + DataType, + MilvusClient, +) + +from pymilvus.bulk_writer import ( + bulk_import, + get_import_progress, +) + +# Local path to generate JSON files +LOCAL_FILES_PATH = "/tmp/milvus_bulkinsert" + +# Milvus service address +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo_bulk_insert_json' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' +_VARCHAR_FIELD_NAME = "varchar_field" + +_STRUCT_NAME = "struct_field" +_STRUCT_SUB_STR = "struct_str" +_STRUCT_SUB_FLOAT = "struct_float_vec" +_CONCAT_STRUCT_SUB_FLOAT = "struct_field[struct_float_vec]" + +# minio +DEFAULT_BUCKET_NAME = "a-bucket" +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" +REMOTE_DATA_PATH = "bulkinsert_data" + +# Vector field parameter +_DIM = 128 + +# to generate increment ID +id_start = 1 + +client = MilvusClient(uri="http://localhost:19530") +print(client.get_server_version()) + + +# Create a collection +def create_collection(): + schema = MilvusClient.create_schema(enable_dynamic_field=True) + schema.add_field(field_name=_ID_FIELD_NAME, datatype=DataType.INT64, is_primary=True, auto_id=False) + schema.add_field(field_name=_VECTOR_FIELD_NAME, datatype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM) + schema.add_field(field_name=_VARCHAR_FIELD_NAME, datatype=DataType.VARCHAR, max_length=256) + struct_schema = MilvusClient.create_struct_field_schema() + struct_schema.add_field("struct_str", DataType.VARCHAR, max_length=65535) + struct_schema.add_field("struct_float_vec", DataType.FLOAT_VECTOR, dim=_DIM) + schema.add_field(_STRUCT_NAME, datatype=DataType.ARRAY, element_type=DataType.STRUCT, struct_schema=struct_schema, + max_capacity=1000) + + index_params = client.prepare_index_params() + index_params.add_index( + field_name=_VECTOR_FIELD_NAME, + index_type="IVF_FLAT", + metric_type="L2", + ) + index_params.add_index( + field_name=_CONCAT_STRUCT_SUB_FLOAT, + index_type="HNSW", + metric_type="MAX_SIM", + ) + client.drop_collection(collection_name=_COLLECTION_NAME) + client.create_collection( + collection_name=_COLLECTION_NAME, + schema=schema, + index_params=index_params + ) + print(_COLLECTION_NAME, "created") + + +# Generate a json file with row-based data. +# The json file must contain a root key "rows", its value is a list, each row must contain a value of each field. +# No need to provide the auto-id field "id_field" since milvus will generate it. +# The row-based json file looks like: +# {"rows": [ +# {"str_field": "row-based_0", "float_vector_field": [0.190, 0.046, 0.143, 0.972, 0.592, 0.238, 0.266, 0.995]}, +# {"str_field": "row-based_1", "float_vector_field": [0.149, 0.586, 0.012, 0.673, 0.588, 0.917, 0.949, 0.944]}, +# ...... +# ] +# } +def gen_json_rowbased(num, path, partition_name): + global id_start + rows = [] + for i in range(num): + # struct field - generate array of struct objects + arr_len = random.randint(1, 5) # Random number of struct elements + struct_list = [] + for _ in range(arr_len): + struct_obj = { + _STRUCT_SUB_STR: f"struct_str_{i}_{random.randint(0, 100)}", + _STRUCT_SUB_FLOAT: [random.random() for _ in range(_DIM)] + } + struct_list.append(struct_obj) + + rows.append({ + _ID_FIELD_NAME: id_start, # id field + _VECTOR_FIELD_NAME: [round(random.random(), 6) for _ in range(_DIM)], # vector field + _VARCHAR_FIELD_NAME: "{}_{}".format(partition_name, id_start) if partition_name is not None else "description_{}".format(id_start), # varchar field + _STRUCT_NAME: struct_list, # struct field + "dynamic_{}".format(id_start): id_start, # no field matches this value, this value will be put into dynamic field + }) + id_start = id_start + 1 + + data = { + "rows": rows, + } + with open(path, "w") as json_file: + json.dump(data, json_file) + return data + + +def bulk_insert_rowbased(row_count_per_file, file_id, partition_name = None): + os.makedirs(name=LOCAL_FILES_PATH, exist_ok=True) + data_folder = os.path.join(LOCAL_FILES_PATH, "rows_{}".format(file_id)) + os.makedirs(name=data_folder, exist_ok=True) + file_path = os.path.join(data_folder, "rows_{}.json".format(file_id)) + print("Generate row-based file:", file_path) + data = gen_json_rowbased(row_count_per_file, file_path, partition_name) + + ok, remote_files = upload(file_path) + if not ok: + raise Exception("failed to upload file") + + call_bulkinsert(remote_files) + + return data + +# Upload data files to minio +def upload(local_file_path: str, + bucket_name: str=DEFAULT_BUCKET_NAME)->(bool, list): + if not os.path.exists(local_file_path): + print(f"Local file '{local_file_path}' doesn't exist") + return False, [] + + remote_files = [] + try: + print("Prepare upload files") + minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, secure=False) + found = minio_client.bucket_exists(bucket_name) + if not found: + print("MinIO bucket '{}' doesn't exist".format(bucket_name)) + return False, [] + + filename = os.path.basename(local_file_path) + minio_file_path = os.path.join(REMOTE_DATA_PATH, filename) + minio_client.fput_object(bucket_name, minio_file_path, local_file_path) + print(f"Upload file '{local_file_path}' to '{minio_file_path}'") + remote_files.append([minio_file_path]) + + + except S3Error as e: + print(f"Failed to connect MinIO server {MINIO_ADDRESS}, error: {e}") + return False, [] + + print(f"Successfully upload files: {remote_files}") + return True, remote_files + +def call_bulkinsert(batch_files: List[List[str]]): + url = f"http://{_HOST}:{_PORT}" + print(f"\n===================== Import files to milvus ====================") + resp = bulk_import( + url=url, + collection_name=_COLLECTION_NAME, + files=batch_files, + ) + print(resp.json()) + job_id = resp.json()['data']['jobId'] + print(f"Create a bulkinsert job, job id: {job_id}") + + while True: + print("Wait 5 second to check bulkinsert job state...") + time.sleep(5) + + print(f"\n===================== Get import job progress ====================") + resp = get_import_progress( + url=url, + job_id=job_id, + ) + + state = resp.json()['data']['state'] + progress = resp.json()['data']['progress'] + if state == "Importing": + print(f"The job {job_id} is importing... {progress}%") + continue + if state == "Failed": + reason = resp.json()['data']['reason'] + print(f"The job {job_id} failed, reason: {reason}") + break + if state == "Completed" and progress == 100: + print(f"The job {job_id} completed") + break + + client.refresh_load(collection_name=_COLLECTION_NAME) + print(f"Import done") + +def verify(data): + # For JSON row-based format, data structure is: {"rows": [row1, row2, ...]} + rows = data["rows"] + indices = [1, 10, 30] + print("============= original data ==============") + for i in indices: + if i >= len(rows): + print(f"Index {i} out of range (total rows: {len(rows)})") + continue + row = rows[i] + # Extract dynamic field - it has a variable name pattern "dynamic_{id}" + dynamic_value = None + for key in row.keys(): + if key.startswith("dynamic_"): + dynamic_value = row[key] + break + print(f"{_ID_FIELD_NAME}:{row.get(_ID_FIELD_NAME)}, " + f"{_VECTOR_FIELD_NAME}:{row.get(_VECTOR_FIELD_NAME)}, " + f"{_VARCHAR_FIELD_NAME}:{row.get(_VARCHAR_FIELD_NAME)}, " + f"dynamic:{dynamic_value}, " + f"{_STRUCT_NAME}:{row.get(_STRUCT_NAME)}" + ) + + # Extract IDs from the rows + ids = [rows[i][_ID_FIELD_NAME] for i in indices if i < len(rows)] + results = client.query(collection_name=_COLLECTION_NAME, + filter=f"{_ID_FIELD_NAME} in {ids}", + output_fields=["*"]) + print("============= query data ==============") + + # Build a map from ID to result for easier comparison + result_map = {res[_ID_FIELD_NAME]: res for res in results} + + # Verify each row + all_match = True + for i in indices: + if i >= len(rows): + continue + + row = rows[i] + row_id = row[_ID_FIELD_NAME] + + if row_id not in result_map: + print(f"❌ ID {row_id} not found in query results") + all_match = False + continue + + res = result_map[row_id] + print(f"\n--- Verifying ID: {row_id} ---") + + # Compare each field + mismatches = [] + + # ID field + if row[_ID_FIELD_NAME] != res[_ID_FIELD_NAME]: + mismatches.append(f"ID mismatch: {row[_ID_FIELD_NAME]} != {res[_ID_FIELD_NAME]}") + + # Vector field - compare with tolerance for floating point + orig_vector = row[_VECTOR_FIELD_NAME] + query_vector = res[_VECTOR_FIELD_NAME] + if len(orig_vector) != len(query_vector): + mismatches.append(f"Vector length mismatch: {len(orig_vector)} != {len(query_vector)}") + else: + max_diff = max(abs(a - b) for a, b in zip(orig_vector, query_vector)) + if max_diff > 1e-5: + mismatches.append(f"Vector values differ (max diff: {max_diff})") + + # VARCHAR field + if row[_VARCHAR_FIELD_NAME] != res[_VARCHAR_FIELD_NAME]: + mismatches.append(f"VARCHAR mismatch: {row[_VARCHAR_FIELD_NAME]} != {res[_VARCHAR_FIELD_NAME]}") + + # Struct field - compare as lists + orig_struct = row[_STRUCT_NAME] + query_struct = res[_STRUCT_NAME] + if len(orig_struct) != len(query_struct): + mismatches.append(f"Struct array length mismatch: {len(orig_struct)} != {len(query_struct)}") + else: + for idx, (orig_item, query_item) in enumerate(zip(orig_struct, query_struct)): + if orig_item[_STRUCT_SUB_STR] != query_item[_STRUCT_SUB_STR]: + mismatches.append(f"Struct[{idx}].{_STRUCT_SUB_STR} mismatch: {orig_item[_STRUCT_SUB_STR]} != {query_item[_STRUCT_SUB_STR]}") + + # Compare struct float vectors with tolerance + orig_vec = orig_item[_STRUCT_SUB_FLOAT] + query_vec = query_item[_STRUCT_SUB_FLOAT] + if len(orig_vec) != len(query_vec): + mismatches.append(f"Struct[{idx}].{_STRUCT_SUB_FLOAT} length mismatch") + else: + max_diff = max(abs(a - b) for a, b in zip(orig_vec, query_vec)) + if max_diff > 1e-5: + mismatches.append(f"Struct[{idx}].{_STRUCT_SUB_FLOAT} values differ (max diff: {max_diff})") + + if mismatches: + all_match = False + print(f"❌ Verification failed for ID {row_id}:") + for mismatch in mismatches: + print(f" - {mismatch}") + else: + print(f"✓ ID {row_id} matches perfectly") + + print("\n============= Verification Summary ==============") + if all_match: + print("✓ All data verified successfully!") + else: + print("❌ Some data mismatches found") + + return all_match + +if __name__ == '__main__': + # create a connection + create_collection() + + # do bulk_insert, wait all tasks finish persisting + row_count_per_file = 1000 + data = bulk_insert_rowbased(row_count_per_file, 1) + verify(data) diff --git a/examples/bulk_import/example_bulkinsert_parquet.py b/examples/bulk_import/example_bulkinsert_parquet.py new file mode 100644 index 000000000..2e7916199 --- /dev/null +++ b/examples/bulk_import/example_bulkinsert_parquet.py @@ -0,0 +1,469 @@ +import random +import json +import time +import os +from typing import List + +from minio import Minio +from minio.error import S3Error + +import numpy as np +import pandas as pd +import pyarrow as pa +import pyarrow.parquet as pq + +from pymilvus import ( + MilvusClient, DataType, +) + +from pymilvus.bulk_writer import ( + bulk_import, + get_import_progress, +) + + +# Local path to generate files +LOCAL_FILES_PATH = "/tmp/milvus_bulkinsert/" + +# Milvus service address +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo_bulk_insert_parquet' +_ID_FIELD_NAME = 'id' +_BIN_VECTOR_FIELD_NAME = 'binary_vector' +_FLOAT_VECTOR_FIELD_NAME = 'float_vector' +_SPARSE_VECTOR_FIELD_NAME = 'sparse_vector' +_VARCHAR_FIELD_NAME = "varchar" +_JSON_FIELD_NAME = "json" +_INT16_FIELD_NAME = "int16" +_ARRAY_FIELD_NAME = "array" +_STRUCT_NAME = "struct_field" +_STRUCT_SUB_STR = "struct_str" +_STRUCT_SUB_FLOAT = "struct_float_vec" +_CONCAT_STRUCT_SUB_FLOAT = "struct_field[struct_float_vec]" +_GEOMETRY_FIELD_NAME = "geometry" + +# minio +DEFAULT_BUCKET_NAME = "a-bucket" +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" +REMOTE_DATA_PATH = "bulkinsert_data" + +# Vector field parameter +_BIN_DIM = 64 +_FLOAT_DIM = 4 + +client = MilvusClient(uri="http://localhost:19530") +print(client.get_server_version()) + + +# Create a collection +def create_collection(): + schema = MilvusClient.create_schema(enable_dynamic_field=True) + schema.add_field(field_name=_ID_FIELD_NAME, datatype=DataType.INT64, is_primary=True, auto_id=False) + schema.add_field(field_name=_BIN_VECTOR_FIELD_NAME, datatype=DataType.BINARY_VECTOR, dim=_BIN_DIM) + schema.add_field(field_name=_FLOAT_VECTOR_FIELD_NAME, datatype=DataType.FLOAT_VECTOR, dim=_FLOAT_DIM) + schema.add_field(field_name=_SPARSE_VECTOR_FIELD_NAME, datatype=DataType.SPARSE_FLOAT_VECTOR) + schema.add_field(field_name=_VARCHAR_FIELD_NAME, datatype=DataType.VARCHAR, max_length=256, nullable=True) + schema.add_field(field_name=_JSON_FIELD_NAME, datatype=DataType.JSON, nullable=True) + schema.add_field(field_name=_INT16_FIELD_NAME, datatype=DataType.INT16, nullable=True) + schema.add_field(field_name=_ARRAY_FIELD_NAME, datatype=DataType.ARRAY, element_type=DataType.INT64, max_capacity=100, nullable=True) + schema.add_field(field_name=_GEOMETRY_FIELD_NAME, datatype=DataType.GEOMETRY, nullable=True) + + struct_schema = MilvusClient.create_struct_field_schema() + struct_schema.add_field("struct_str", DataType.VARCHAR, max_length=65535) + struct_schema.add_field("struct_float_vec", DataType.FLOAT_VECTOR, dim=_FLOAT_DIM) + schema.add_field(_STRUCT_NAME, datatype=DataType.ARRAY, element_type=DataType.STRUCT, struct_schema=struct_schema, + max_capacity=1000) + + index_params = client.prepare_index_params() + index_params.add_index( + field_name=_BIN_VECTOR_FIELD_NAME, + index_type="BIN_FLAT", + metric_type="HAMMING", + ) + index_params.add_index( + field_name=_FLOAT_VECTOR_FIELD_NAME, + index_type="FLAT", + metric_type="L2", + ) + index_params.add_index( + field_name=_SPARSE_VECTOR_FIELD_NAME, + index_type="SPARSE_INVERTED_INDEX", + metric_type="IP", + ) + index_params.add_index( + field_name=_CONCAT_STRUCT_SUB_FLOAT, + index_type="HNSW", + metric_type="MAX_SIM", + ) + + client.drop_collection(collection_name=_COLLECTION_NAME) + client.create_collection( + collection_name=_COLLECTION_NAME, + schema=schema, + index_params=index_params + ) + print(_COLLECTION_NAME, "created") + + +def gen_parquet_file(num, file_path): + id_arr = [] + bin_vector_arr = [] + float_vector_arr = [] + sparse_vector_arr = [] + varchar_arr = [] + json_arr = [] + int16_arr = [] + array_arr = [] + struct_arr = [] + k_arr = [] + geometry_arr = [] + for i in range(num): + # id field + id_arr.append(np.dtype("int64").type(i)) + + # binary vector field + raw_vector = [random.randint(0, 1) for _ in range(_BIN_DIM)] + uint8_arr = np.packbits(raw_vector, axis=-1).tolist() + bin_vector_arr.append(np.array(uint8_arr, np.dtype("uint8"))) + + # float vector field + raw_vector = [random.random() for _ in range(_FLOAT_DIM)] + float_vector_arr.append(np.array(raw_vector, np.dtype("float32"))) + + # sparse vector field + raw_vector = {} + for k in range(i % 10 + 1): + raw_vector[k] = random.random() + sparse_vector_arr.append(json.dumps(raw_vector)) + + # varchar field + if i%2 == 0: + varchar_arr.append(np.dtype("str").type(f"this is varchar {i}")) + geometry_arr.append(np.dtype("str").type(f"POINT({i} {i+1})")) + else: + varchar_arr.append(None) + geometry_arr.append(None) + + # json field + if i % 3 != 0: + obj = {"K": i} + json_arr.append(np.dtype("str").type(json.dumps(obj))) + else: + json_arr.append(None) + + # int16 field + if i % 5 != 0: + int16_arr.append(np.dtype("int16").type(i)) + else: + int16_arr.append(None) + + # array field + if i % 5 != 0: + arr = [] + for k in range(i % 5 + 1): + arr.append(k) + array_arr.append(np.array(arr, dtype=np.dtype("int64"))) + else: + array_arr.append(None) + + # struct field - generate array of struct objects + arr_len = random.randint(1, 5) # Random number of struct elements + struct_list = [] + for _ in range(arr_len): + struct_obj = { + _STRUCT_SUB_STR: f"struct_str_{i}_{random.randint(0, 100)}", + _STRUCT_SUB_FLOAT: [random.random() for _ in range(_FLOAT_DIM)] + } + struct_list.append(struct_obj) + # Store as Python list for Parquet native struct type + struct_arr.append(struct_list) + + # dynamic field + a = {"K": i} if i % 3 == 0 else {} + k_arr.append(np.dtype("str").type(json.dumps(a))) + + data = {} + data[_ID_FIELD_NAME] = id_arr + data[_BIN_VECTOR_FIELD_NAME] = bin_vector_arr + data[_FLOAT_VECTOR_FIELD_NAME] = float_vector_arr + data[_SPARSE_VECTOR_FIELD_NAME] = sparse_vector_arr + data[_VARCHAR_FIELD_NAME] = varchar_arr + data[_JSON_FIELD_NAME] = json_arr + data[_INT16_FIELD_NAME] = int16_arr + data[_ARRAY_FIELD_NAME] = array_arr + data[_GEOMETRY_FIELD_NAME] = geometry_arr + data[_STRUCT_NAME] = struct_arr + data["$meta"] = k_arr + + # write to Parquet file using PyArrow to preserve struct schema + # Define PyArrow schema for struct field + struct_type = pa.struct([ + pa.field(_STRUCT_SUB_STR, pa.string()), + pa.field(_STRUCT_SUB_FLOAT, pa.list_(pa.float32())) + ]) + + # Build PyArrow arrays with explicit types + pa_arrays = { + _ID_FIELD_NAME: pa.array(id_arr, type=pa.int64()), + _BIN_VECTOR_FIELD_NAME: pa.array([np.array(v, dtype=np.uint8) for v in bin_vector_arr], + type=pa.list_(pa.uint8())), + _FLOAT_VECTOR_FIELD_NAME: pa.array([np.array(v, dtype=np.float32) for v in float_vector_arr], + type=pa.list_(pa.float32())), + _SPARSE_VECTOR_FIELD_NAME: pa.array(sparse_vector_arr, type=pa.string()), + _VARCHAR_FIELD_NAME: pa.array(varchar_arr, type=pa.string()), + _JSON_FIELD_NAME: pa.array(json_arr, type=pa.string()), + _INT16_FIELD_NAME: pa.array(int16_arr, type=pa.int16()), + _ARRAY_FIELD_NAME: pa.array(array_arr, type=pa.list_(pa.int64())), + _GEOMETRY_FIELD_NAME: pa.array(geometry_arr, type=pa.string()), + _STRUCT_NAME: pa.array(struct_arr, type=pa.list_(struct_type)), + "$meta": pa.array(k_arr, type=pa.string()) + } + + # Create PyArrow table and write to Parquet + table = pa.table(pa_arrays) + pq.write_table(table, file_path, row_group_size=10000) + + return data + + +# Upload data files to minio +def upload(local_file_path: str, + bucket_name: str=DEFAULT_BUCKET_NAME)->(bool, list): + if not os.path.exists(local_file_path): + print(f"Local file '{local_file_path}' doesn't exist") + return False, [] + + ext = os.path.splitext(local_file_path) + if len(ext) != 2 or ext[1] != ".parquet": + print(f"Local file '{local_file_path}' is not parquet file") + return False, [] + + remote_files = [] + try: + print("Prepare upload files") + minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, secure=False) + found = minio_client.bucket_exists(bucket_name) + if not found: + print("MinIO bucket '{}' doesn't exist".format(bucket_name)) + return False, [] + + filename = os.path.basename(local_file_path) + minio_file_path = os.path.join(REMOTE_DATA_PATH, filename) + minio_client.fput_object(bucket_name, minio_file_path, local_file_path) + print(f"Upload file '{local_file_path}' to '{minio_file_path}'") + remote_files.append([minio_file_path]) + + + except S3Error as e: + print(f"Failed to connect MinIO server {MINIO_ADDRESS}, error: {e}") + return False, [] + + print(f"Successfully upload files: {remote_files}") + return True, remote_files + + +def call_bulkinsert(batch_files: List[List[str]]): + url = f"http://{_HOST}:{_PORT}" + print(f"\n===================== Import files to milvus ====================") + resp = bulk_import( + url=url, + collection_name=_COLLECTION_NAME, + files=batch_files, + ) + print(resp.json()) + job_id = resp.json()['data']['jobId'] + print(f"Create a bulkinsert job, job id: {job_id}") + + while True: + print("Wait 5 second to check bulkinsert job state...") + time.sleep(5) + + print(f"\n===================== Get import job progress ====================") + resp = get_import_progress( + url=url, + job_id=job_id, + ) + + state = resp.json()['data']['state'] + progress = resp.json()['data']['progress'] + if state == "Importing": + print(f"The job {job_id} is importing... {progress}%") + continue + if state == "Failed": + reason = resp.json()['data']['reason'] + print(f"The job {job_id} failed, reason: {reason}") + break + if state == "Completed" and progress == 100: + print(f"The job {job_id} completed") + break + + client.refresh_load(collection_name=_COLLECTION_NAME) + print(f"Import done") + + +def verify(data): + indices = [1, 10, 30] + print("============= original data ==============") + for i in indices: + print(f"{_ID_FIELD_NAME}:{data[_ID_FIELD_NAME][i]}, " + f"{_BIN_VECTOR_FIELD_NAME}:{data[_BIN_VECTOR_FIELD_NAME][i]}, " + f"{_FLOAT_VECTOR_FIELD_NAME}:{data[_FLOAT_VECTOR_FIELD_NAME][i]}, " + f"{_SPARSE_VECTOR_FIELD_NAME}:{data[_SPARSE_VECTOR_FIELD_NAME][i]}, " + f"{_VARCHAR_FIELD_NAME}:{data[_VARCHAR_FIELD_NAME][i]}, " + f"{_JSON_FIELD_NAME}:{data[_JSON_FIELD_NAME][i]}, " + f"{_INT16_FIELD_NAME}:{data[_INT16_FIELD_NAME][i]}, " + f"{_ARRAY_FIELD_NAME}:{data[_ARRAY_FIELD_NAME][i]}, " + f"{_GEOMETRY_FIELD_NAME}:{data[_GEOMETRY_FIELD_NAME][i]}, " + f"{_STRUCT_NAME}:{data[_STRUCT_NAME][i]}" + ) + + # Extract IDs from the data + ids = [int(data[_ID_FIELD_NAME][k]) for k in indices] + results = client.query(collection_name=_COLLECTION_NAME, + filter=f"{_ID_FIELD_NAME} in {ids}", + output_fields=["*"]) + print("============= query data ==============") + + # Build a map from ID to result for easier comparison + result_map = {res[_ID_FIELD_NAME]: res for res in results} + + # Verify each row + all_match = True + for i in indices: + row_id = int(data[_ID_FIELD_NAME][i]) + + if row_id not in result_map: + print(f"❌ ID {row_id} not found in query results") + all_match = False + continue + + res = result_map[row_id] + print(f"\n--- Verifying ID: {row_id} ---") + + # Compare each field + mismatches = [] + + # ID field + if data[_ID_FIELD_NAME][i] != res[_ID_FIELD_NAME]: + mismatches.append(f"ID mismatch: {data[_ID_FIELD_NAME][i]} != {res[_ID_FIELD_NAME]}") + + # Binary vector field + orig_bin_vector = np.array(data[_BIN_VECTOR_FIELD_NAME][i], dtype=np.uint8) + query_bin_vector = np.frombuffer(res[_BIN_VECTOR_FIELD_NAME][0], dtype=np.uint8) + if not np.array_equal(orig_bin_vector, query_bin_vector): + mismatches.append(f"Binary vector mismatch") + + # Float vector field + orig_float_vector = np.array(data[_FLOAT_VECTOR_FIELD_NAME][i], dtype=np.float32) + query_float_vector = res[_FLOAT_VECTOR_FIELD_NAME] + if len(orig_float_vector) != len(query_float_vector): + mismatches.append(f"Float vector length mismatch: {len(orig_float_vector)} != {len(query_float_vector)}") + else: + max_diff = max(abs(a - b) for a, b in zip(orig_float_vector, query_float_vector)) + if max_diff > 1e-5: + mismatches.append(f"Float vector values differ (max diff: {max_diff})") + + # Sparse vector field + orig_sparse = json.loads(data[_SPARSE_VECTOR_FIELD_NAME][i]) + query_sparse = res[_SPARSE_VECTOR_FIELD_NAME] + # Normalize keys to integers for comparison (JSON keys are strings, query returns int keys) + orig_sparse_normalized = {int(k): v for k, v in orig_sparse.items()} + if set(orig_sparse_normalized.keys()) != set(query_sparse.keys()): + mismatches.append(f"Sparse vector keys mismatch: {set(orig_sparse_normalized.keys())} != {set(query_sparse.keys())}") + else: + # Compare values with tolerance for floating point + max_sparse_diff = max(abs(orig_sparse_normalized[k] - query_sparse[k]) for k in orig_sparse_normalized.keys()) + if max_sparse_diff > 1e-5: + mismatches.append(f"Sparse vector values differ (max diff: {max_sparse_diff})") + + # VARCHAR field (nullable) + orig_varchar = data[_VARCHAR_FIELD_NAME][i] + query_varchar = res[_VARCHAR_FIELD_NAME] + if orig_varchar != query_varchar: + mismatches.append(f"VARCHAR mismatch: {orig_varchar} != {query_varchar}") + + # JSON field (nullable) + orig_json = data[_JSON_FIELD_NAME][i] + query_json = res[_JSON_FIELD_NAME] + # Compare parsed JSON objects + if orig_json is not None: + orig_json_obj = json.loads(orig_json) + else: + orig_json_obj = None + if orig_json_obj != query_json: + mismatches.append(f"JSON mismatch: {orig_json_obj} != {query_json}") + + # INT16 field (nullable) + orig_int16 = data[_INT16_FIELD_NAME][i] + query_int16 = res[_INT16_FIELD_NAME] + if orig_int16 != query_int16: + mismatches.append(f"INT16 mismatch: {orig_int16} != {query_int16}") + + # Array field (nullable) + orig_array = data[_ARRAY_FIELD_NAME][i] + query_array = res[_ARRAY_FIELD_NAME] + if orig_array is None and query_array is None: + pass # Both are None, OK + elif orig_array is None or query_array is None: + mismatches.append(f"Array mismatch: one is None, other is not") + elif not np.array_equal(orig_array, query_array): + mismatches.append(f"Array mismatch: {orig_array.tolist()} != {query_array}") + + # Struct field - compare as lists + orig_struct = data[_STRUCT_NAME][i] + query_struct = res[_STRUCT_NAME] + if len(orig_struct) != len(query_struct): + mismatches.append(f"Struct array length mismatch: {len(orig_struct)} != {len(query_struct)}") + else: + for idx, (orig_item, query_item) in enumerate(zip(orig_struct, query_struct)): + if orig_item[_STRUCT_SUB_STR] != query_item[_STRUCT_SUB_STR]: + mismatches.append(f"Struct[{idx}].{_STRUCT_SUB_STR} mismatch: {orig_item[_STRUCT_SUB_STR]} != {query_item[_STRUCT_SUB_STR]}") + + # Compare struct float vectors with tolerance + orig_vec = orig_item[_STRUCT_SUB_FLOAT] + query_vec = query_item[_STRUCT_SUB_FLOAT] + if len(orig_vec) != len(query_vec): + mismatches.append(f"Struct[{idx}].{_STRUCT_SUB_FLOAT} length mismatch") + else: + max_diff = max(abs(a - b) for a, b in zip(orig_vec, query_vec)) + if max_diff > 1e-5: + mismatches.append(f"Struct[{idx}].{_STRUCT_SUB_FLOAT} values differ (max diff: {max_diff})") + + if mismatches: + all_match = False + print(f"❌ Verification failed for ID {row_id}:") + for mismatch in mismatches: + print(f" - {mismatch}") + else: + print(f"✓ ID {row_id} matches perfectly") + + print("\n============= Verification Summary ==============") + if all_match: + print("✓ All data verified successfully!") + else: + print("❌ Some data mismatches found") + + return all_match + + +if __name__ == '__main__': + create_collection() + + local_file_path = LOCAL_FILES_PATH + "test.parquet" + data = gen_parquet_file(1000, local_file_path) + + ok, remote_files = upload(local_file_path) + if not ok: + raise Exception("failed to upload file") + + call_bulkinsert(remote_files) + + verify(data) + + + diff --git a/examples/bulk_import/example_bulkwriter_stage.py b/examples/bulk_import/example_bulkwriter_stage.py new file mode 100644 index 000000000..e89072538 --- /dev/null +++ b/examples/bulk_import/example_bulkwriter_stage.py @@ -0,0 +1,273 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import json +import logging +import time +import numpy as np + +from examples.bulk_import.data_gengerator import * +from pymilvus.bulk_writer.stage_bulk_writer import StageBulkWriter +from pymilvus.orm import utility + +logging.basicConfig(level=logging.INFO) + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +from pymilvus.bulk_writer import ( + BulkFileType, + list_import_jobs, + bulk_import, + get_import_progress, +) + +# zilliz cluster +PUBLIC_ENDPOINT = "cluster.endpoint" +USER_NAME = "user.name" +PASSWORD = "password" + +# The value of the URL is fixed. +# For overseas regions, it is: https://api.cloud.zilliz.com +# For regions in China, it is: https://api.cloud.zilliz.com.cn +CLOUD_ENDPOINT = "https://api.cloud.zilliz.com" +API_KEY = "_api_key_for_cluster_org_" + +# This is currently a private preview feature. If you need to use it, please submit a request and contact us. +STAGE_NAME = "_stage_name_for_project_" + +CLUSTER_ID = "_your_cloud_cluster_id_" +DB_NAME = "" # If db_name is not specified, use "" +COLLECTION_NAME = "_collection_name_on_the_db_" +PARTITION_NAME = "" # If partition_name is not specified, use "" +DIM = 512 + + +def create_connection(): + print(f"\nCreate connection...") + connections.connect(uri=PUBLIC_ENDPOINT, user=USER_NAME, password=PASSWORD) + print(f"\nConnected") + + +def build_all_type_schema(): + print(f"\n===================== build all types schema ====================") + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="bool", dtype=DataType.BOOL), + FieldSchema(name="int8", dtype=DataType.INT8), + FieldSchema(name="int16", dtype=DataType.INT16), + FieldSchema(name="int32", dtype=DataType.INT32), + FieldSchema(name="int64", dtype=DataType.INT64), + FieldSchema(name="float", dtype=DataType.FLOAT), + FieldSchema(name="double", dtype=DataType.DOUBLE), + FieldSchema(name="varchar", dtype=DataType.VARCHAR, max_length=512), + FieldSchema(name="json", dtype=DataType.JSON), + # from 2.4.0, milvus supports multiple vector fields in one collection + # FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=DIM), + FieldSchema(name="binary_vector", dtype=DataType.BINARY_VECTOR, dim=DIM), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=DIM), + FieldSchema(name="bfloat16_vector", dtype=DataType.BFLOAT16_VECTOR, dim=DIM), + ] + + # milvus doesn't support parsing array/sparse_vector from numpy file + fields.append( + FieldSchema(name="array_str", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.VARCHAR, + max_length=128)) + fields.append( + FieldSchema(name="array_int", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64)) + fields.append(FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR)) + + schema = CollectionSchema(fields=fields, enable_dynamic_field=True) + return schema + + +def example_collection_remote_stage(file_type: BulkFileType): + schema = build_all_type_schema() + print(f"\n===================== all field types ({file_type.name}) ====================") + create_collection(schema, False) + stage_upload_result = stage_remote_writer(file_type, schema) + call_stage_import(stage_upload_result['stage_name'], stage_upload_result['path']) + retrieve_imported_data() + + +def create_collection(schema: CollectionSchema, drop_if_exist: bool): + if utility.has_collection(COLLECTION_NAME): + if drop_if_exist: + utility.drop_collection(COLLECTION_NAME) + else: + collection = Collection(name=COLLECTION_NAME, schema=schema) + print(f"Collection '{collection.name}' created") + + +def stage_remote_writer(file_type, schema): + with StageBulkWriter( + schema=schema, + remote_path="bulk_data", + file_type=file_type, + chunk_size=512 * 1024 * 1024, + cloud_endpoint=CLOUD_ENDPOINT, + api_key=API_KEY, + stage_name=STAGE_NAME, + ) as stage_bulk_writer: + print("Append rows") + batch_count = 10000 + for i in range(batch_count): + row = { + "id": i, + "bool": True if i % 5 == 0 else False, + "int8": i % 128, + "int16": i % 1000, + "int32": i % 100000, + "int64": i, + "float": i / 3, + "double": i / 7, + "varchar": f"varchar_{i}", + "json": {"dummy": i, "ok": f"name_{i}"}, + # "float_vector": gen_float_vector(False), + "binary_vector": gen_binary_vector(False, DIM), + "float16_vector": gen_fp16_vector(False, DIM), + "bfloat16_vector": gen_bf16_vector(False, DIM), + f"dynamic_{i}": i, + # bulkinsert doesn't support import npy with array field and sparse vector, + # if file_type is numpy, the below values will be stored into dynamic field + "array_str": [f"str_{k}" for k in range(5)], + "array_int": [k for k in range(10)], + "sparse_vector": gen_sparse_vector(False), + } + stage_bulk_writer.append_row(row) + + # append rows by numpy type + for i in range(batch_count): + id = i + batch_count + stage_bulk_writer.append_row({ + "id": np.int64(id), + "bool": True if i % 3 == 0 else False, + "int8": np.int8(id % 128), + "int16": np.int16(id % 1000), + "int32": np.int32(id % 100000), + "int64": np.int64(id), + "float": np.float32(id / 3), + "double": np.float64(id / 7), + "varchar": f"varchar_{id}", + "json": json.dumps({"dummy": id, "ok": f"name_{id}"}), + # "float_vector": gen_float_vector(True), + "binary_vector": gen_binary_vector(True, DIM), + "float16_vector": gen_fp16_vector(True, DIM), + "bfloat16_vector": gen_bf16_vector(True, DIM), + f"dynamic_{id}": id, + # bulkinsert doesn't support import npy with array field and sparse vector, + # if file_type is numpy, the below values will be stored into dynamic field + "array_str": np.array([f"str_{k}" for k in range(5)], np.dtype("str")), + "array_int": np.array([k for k in range(10)], np.dtype("int64")), + "sparse_vector": gen_sparse_vector(True), + }) + + print(f"{stage_bulk_writer.total_row_count} rows appends") + print(f"{stage_bulk_writer.buffer_row_count} rows in buffer not flushed") + print("Generate data files...") + stage_bulk_writer.commit() + print(f"Data files have been uploaded: {stage_bulk_writer.batch_files}") + return stage_bulk_writer.get_stage_upload_result() + + +def retrieve_imported_data(): + collection = Collection(name=COLLECTION_NAME) + print("Create index...") + for field in collection.schema.fields: + if (field.dtype == DataType.FLOAT_VECTOR or field.dtype == DataType.FLOAT16_VECTOR + or field.dtype == DataType.BFLOAT16_VECTOR): + collection.create_index(field_name=field.name, index_params={ + "index_type": "FLAT", + "params": {}, + "metric_type": "L2" + }) + elif field.dtype == DataType.BINARY_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "BIN_FLAT", + "params": {}, + "metric_type": "HAMMING" + }) + elif field.dtype == DataType.SPARSE_FLOAT_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "SPARSE_INVERTED_INDEX", + "metric_type": "IP", + "params": {"drop_ratio_build": 0.2} + }) + + ids = [100, 15000] + print(f"Load collection and query items {ids}") + collection.load() + expr = f"id in {ids}" + print(expr) + results = collection.query(expr=expr, output_fields=["*", "vector"]) + print("Query results:") + for item in results: + print(item) + + +def call_stage_import(stage_name: str, path: str): + print(f"\n===================== import files to cluster ====================") + resp = bulk_import( + url=CLOUD_ENDPOINT, + api_key=API_KEY, + cluster_id=CLUSTER_ID, + db_name=DB_NAME, + collection_name=COLLECTION_NAME, + stage_name=stage_name, + data_paths=[[path]] + ) + print(resp.json()) + job_id = resp.json()['data']['jobId'] + print(f"Create a cloudImport job, job id: {job_id}") + + print(f"\n===================== list import jobs ====================") + resp = list_import_jobs( + url=CLOUD_ENDPOINT, + cluster_id=CLUSTER_ID, + api_key=API_KEY, + page_size=10, + current_page=1, + ) + print(resp.json()) + + while True: + print("Wait 5 second to check cloudImport job state...") + time.sleep(5) + + print(f"\n===================== get import job progress ====================") + resp = get_import_progress( + url=CLOUD_ENDPOINT, + cluster_id=CLUSTER_ID, + api_key=API_KEY, + job_id=job_id, + ) + + state = resp.json()['data']['state'] + progress = resp.json()['data']['progress'] + if state == "Importing": + print(f"The job {job_id} is importing... {progress}%") + continue + if state == "Failed": + reason = resp.json()['data']['reason'] + print(f"The job {job_id} failed, reason: {reason}") + break + if state == "Completed" and progress == 100: + print(f"The job {job_id} completed") + break + + +if __name__ == '__main__': + create_connection() + example_collection_remote_stage(file_type=BulkFileType.PARQUET) diff --git a/examples/bulk_import/example_stage_file_manager.py b/examples/bulk_import/example_stage_file_manager.py new file mode 100644 index 000000000..f8f0163ec --- /dev/null +++ b/examples/bulk_import/example_stage_file_manager.py @@ -0,0 +1,12 @@ +from pymilvus.bulk_writer.constants import ConnectType +from pymilvus.bulk_writer.stage_file_manager import StageFileManager + +if __name__ == "__main__": + stage_file_manager = StageFileManager( + cloud_endpoint='https://api.cloud.zilliz.com', + api_key='_api_key_for_cluster_org_', + stage_name='_stage_name_for_project_', + connect_type=ConnectType.AUTO, + ) + result = stage_file_manager.upload_file_to_stage("/Users/zilliz/data/", "data/") + print(f"\nuploadFileToStage results: {result}") diff --git a/examples/bulk_import/example_stage_manager.py b/examples/bulk_import/example_stage_manager.py new file mode 100644 index 000000000..da51c221d --- /dev/null +++ b/examples/bulk_import/example_stage_manager.py @@ -0,0 +1,20 @@ +from pymilvus.bulk_writer.stage_manager import StageManager + +PROJECT_ID = "_id_for_project_" +REGION_ID = "_id_for_region_" +STAGE_NAME = "_stage_name_for_project_" + +if __name__ == "__main__": + stage_manager = StageManager( + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="_api_key_for_cluster_org_", + ) + + stage_manager.create_stage(PROJECT_ID, REGION_ID, STAGE_NAME) + print(f"\nStage {STAGE_NAME} created") + + stage_list = stage_manager.list_stages(PROJECT_ID, 1, 10) + print(f"\nlistStages results: ", stage_list.json()['data']) + + stage_manager.delete_stage(STAGE_NAME) + print(f"\nStage {STAGE_NAME} deleted") diff --git a/examples/bulk_import/train_embeddings.csv b/examples/bulk_import/train_embeddings.csv new file mode 100644 index 000000000..de39e4d1c --- /dev/null +++ b/examples/bulk_import/train_embeddings.csv @@ -0,0 +1,101 @@ +path,label,vector +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" diff --git a/examples/cert/ca.pem b/examples/cert/ca.pem new file mode 100644 index 000000000..922a2094c --- /dev/null +++ b/examples/cert/ca.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDpzCCAo+gAwIBAgIUXZen56S+MZE8UTb09jyM6szs/ukwDQYJKoZIhvcNAQEL +BQAwYzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdaMQswCQYDVQQHDAJHWjESMBAG +A1UECgwJcm9uZXRoaW5nMRIwEAYDVQQLDAlyb25ldGhpbmcxEjAQBgNVBAMMCWxv +Y2FsaG9zdDAeFw0yMjA1MDEwODU3MzRaFw0zMjA0MjgwODU3MzRaMGMxCzAJBgNV +BAYTAkNOMQswCQYDVQQIDAJHWjELMAkGA1UEBwwCR1oxEjAQBgNVBAoMCXJvbmV0 +aGluZzESMBAGA1UECwwJcm9uZXRoaW5nMRIwEAYDVQQDDAlsb2NhbGhvc3QwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC4fe/Cw5gKBb/5L1n6ofYvLQB +TtnYiBy3gr6g5ML+Nck1N3LiZgvEa7mm19eijxPegQH8u0AZhfEOP41IJCNedTSY +dvenIpvDun+MI52dNnRnIl8gBdhEfJ6PyGWdI+PAksQD9R704TxID+TmyPIKA/ul +u8Um3pkvlk3X9PHzo7kE0fveQPatbpHRc7YrCIfdpzJ/b3YYXtHS4FtBA4wX9sW/ +siSKcgiNzcxP8hqPcygFzOx3oUCt21LaS9E1Ji4r0s1M2eVwhFKxhqpfKRI4jLFN +IA9vJlucH7hS5RU2p+2a9NBOqgYkarVKD0xIWtcoHoajKwqZnklBkMM8nhJhAgMB +AAGjUzBRMB0GA1UdDgQWBBT8tV8mSqY4ujxUPTNNue7ty9ad8DAfBgNVHSMEGDAW +gBT8tV8mSqY4ujxUPTNNue7ty9ad8DAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQCbaK5wizgoH3AS0AYgHRHbvVaLXEgihcmdsFGqszmkOS50dpcm +bqs0wS0g7Ibgpv8bS9tn9gXhdTR04F08PrbbALBF0I1zIbT5F6rp2w7P78gWZDa7 +iPYCTYA1WRZEEVJD4eyFC4cM8uG0wVCbKuOFUJaUPONbdJ1S26xtBSJHy0g8JeNK +3N70/xYa0AFk4D9EoX39oiCOnj1QWN2M0IjUJHUcu1Bm50dxDcpiaoWR6sCFJU4r +gMlFpeZ9Sg6zh4sUs2X0YYusEp3ATz+0E0iRChEM0213yvBR3HwaJKSegBocflCZ +SKrjAyIpRkscR0JKWUPICf+rr0B0mPeEYfgK +-----END CERTIFICATE----- diff --git a/examples/cert/client.key b/examples/cert/client.key new file mode 100644 index 000000000..66f4fa848 --- /dev/null +++ b/examples/cert/client.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCwQ/qyS53J8Xdp +M26LcFGdtTMzjfzPoNtwnSdfqrMi2iMZeMwDPRkHoeHE9lyHYPssDbFuLNJPLibc +BCfd5SeELLlyG3GDP+W0inUs3kE0voXbH4LmSOCKLnzw0GfblINWMB7aqgpHPtRT +cdWHcPo+KJA66ZbD5cNIw77aBxcsDJa40GunzxVOKtGQopypjrj6mkpauVzT9Dwh +ylYvMR+VL12pjozGCvSTNSgJfP7DX2UwHTMEBbxiTNQ7F8w4X5d2xuS2HepLy0/+ +uWo1e7jDGAWN27Alr1766n2os3WClL06U6mmlT7HE2TvunhiBNjWnWafENaeH9W5 +rmVNDCmLAgMBAAECggEBAJLcUOh08EbtlRxl6djsAFRyQPLXfqhP0gYGKmQfCZok +PdJfPzwDj/M4Aa/lxDpXp26RCiBN3/xw65etLrpGz6Hk0a4tB2rftjeylOaJV7Lm +ewiTPLE6TztSeG78dUwSdUs+VLbDrkSmKKpN0idDDnzztxgev6sAqLDbxwxJlBjy +EeERzCG4JCc4aZlFtz1oWgFGXr3lxxxXbfzdhY/M87IkenGNZges0iSRbcFsGq8z +oVaFV9KkVZ6lxLCMXIIfen9E6g/nq01mnTXM+LHd9Laqj0q6wpULCi5X/v/igS5I +1fsUT8V+s+LjpWMBu6Bd0uY2tr3Li4Fn46p+HvVe6cECgYEA3eqSfUowlEs3WLBl +acfb6/Vo9GeRnJpmLeTdXAO3NeOX4qLISQFQEUopG2qOrXSo4t40o8xX0iMe6uIQ +7BVFJgdE12kdx0cQGqFACIxAiM6VbeqfKt4i8EB1ld/8fXusdH71b/ZkudbQ8gUx +S3HNsid7Y7qIgXlQ3zZel8+juakCgYEAy1Z8R6bnyF7W0D09SkVfpuMsMoFIi6ZP +w+rrk/8E85S2Ag8LnbQtJICiMgBYWQSu5IoGMoBw6N0j9OhaSOsbNYZjwmC9UqWH +8ZbPrAqt3q0B76i9f7+K75gIyXEhVQBtlKUw53wGd9dgUkq5o+YZxK4ABqji+r+2 +d1rj49PLkhMCgYANQpL2QZSdh9EKz59/rp2Jf+SBlh6xSNiKLX68nMw5wBu3QxrM +ofNy1QeXx8o2ux3MUJK8pt0ohUi3qEJymOLE3vJSHMnWunxP2wrEd/zzL8TmCHry +SMu1p2RfTD7+EIHBhESOKB7kq91YWM8VPvuXhZxt3RuDAQjADbOhRpr14QKBgGIy +2D46SsGnm5JhoNHXgwQzvcp+SSy4GtmBAFgu1pNUBDomTfPRaeOxA6OmKwSCkHvq +dGe7Q8wR0CWceM2yTSeiSVc8JPJe4rI3pP9vAN0DLGYzVaD2PgDLqaKvMeu9Ey6w +QFfqu6zwpKHZWKHgpB0p8vVEZqm2IEav7FLAnBVlAoGBAI1KJJ0Z18lOQDqpZtH/ +tYYmCMlYLOkHOVJ5/Fi+UjLLwCk2yyXw3Tr5PqxNaI1va4wp5lt/VZqRZibFm9hW +ecsBuCDVZFPcu5UUHNrwXxb3wwidjsjJso0PVxw7FI7d7rlTqRYm5dntjlxBHhtd +IPkBc4ceeMp14AaItE9f1HE5 +-----END PRIVATE KEY----- diff --git a/examples/cert/client.pem b/examples/cert/client.pem new file mode 100644 index 000000000..a1b0416d4 --- /dev/null +++ b/examples/cert/client.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDizCCAnOgAwIBAgIUNCeQzjvQkinJwUgQ4quG0opHAL8wDQYJKoZIhvcNAQEL +BQAwYzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdaMQswCQYDVQQHDAJHWjESMBAG +A1UECgwJcm9uZXRoaW5nMRIwEAYDVQQLDAlyb25ldGhpbmcxEjAQBgNVBAMMCWxv +Y2FsaG9zdDAeFw0yMjA1MDEwODU3MzRaFw0zMjA0MjgwODU3MzRaMEkxCzAJBgNV +BAYTAkNOMRIwEAYDVQQKDAlyb25ldGhpbmcxEjAQBgNVBAsMCXJvbmV0aGluZzES +MBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAsEP6skudyfF3aTNui3BRnbUzM438z6DbcJ0nX6qzItojGXjMAz0ZB6HhxPZc +h2D7LA2xbizSTy4m3AQn3eUnhCy5chtxgz/ltIp1LN5BNL6F2x+C5kjgii588NBn +25SDVjAe2qoKRz7UU3HVh3D6PiiQOumWw+XDSMO+2gcXLAyWuNBrp88VTirRkKKc +qY64+ppKWrlc0/Q8IcpWLzEflS9dqY6Mxgr0kzUoCXz+w19lMB0zBAW8YkzUOxfM +OF+Xdsbkth3qS8tP/rlqNXu4wxgFjduwJa9e+up9qLN1gpS9OlOpppU+xxNk77p4 +YgTY1p1mnxDWnh/Vua5lTQwpiwIDAQABo1EwTzAJBgNVHRMEAjAAMAsGA1UdDwQE +AwIF4DA1BgNVHREELjAsgglsb2NhbGhvc3SCDioucm9uZXRoaW5nLmNugg8qLnJv +bmV0aGluZy5jb20wDQYJKoZIhvcNAQELBQADggEBAHBmcrQBtOcY776CHfRnHkWG +2JX595eY9cTEi+xB3n3q6Uo9GkGpGkg0T9U67dj68aB5ETm9+F8augS/5e2vbyJ/ +GfwtwbmJFkM4SVrSYpHLYQc72j6kG4oLauz8C3IZxirX4nAxGDEnHbpLrS2HIZ+l +/G5YQeaYStxmleOD4CwrOOIUdRATMTaQgRu6pUJhuhC9Fm1v+ueg6b24RB9V+jvU +FOFiR29PPRyyAm3UBEv4yyVSoW6RgD+5QpD/HTGbXumT1xASKDeLY7HBVU9FXxN+ +wojcbIyFkXNo3C+5P7zN7S1zJV6Fp4TeOJpIeQn8ARf7XFQYREVesf9QC7yHxPk= +-----END CERTIFICATE----- diff --git a/examples/cert/example_tls1.py b/examples/cert/example_tls1.py new file mode 100644 index 000000000..4a8f43749 --- /dev/null +++ b/examples/cert/example_tls1.py @@ -0,0 +1,124 @@ +import random + +from pymilvus import ( + MilvusClient, + FieldSchema, CollectionSchema, DataType, + utility +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a collection +# 3. insert entities +# 4. create index +# 5. search + + +_HOST = '127.0.0.1' +_PORT = '19530' +_URI = f"https://{_HOST}:{_PORT}" + +# Const names +_COLLECTION_NAME = 'demo' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' + +# Vector parameters +_DIM = 128 +_INDEX_FILE_SIZE = 32 # max file size of stored index + +# Index parameters +_METRIC_TYPE = 'L2' +_INDEX_TYPE = 'IVF_FLAT' +_NLIST = 1024 +_NPROBE = 16 +_TOPK = 3 + + +def main(): + # create a connection + print(f"\nCreate connection...") + milvus_client = MilvusClient(uri=_URI, + secure=True, + server_pem_path="cert/server.pem", + server_name='localhost') + print(f"\nList connection:") + print(milvus_client._get_connection()) + + # drop collection if the collection exists + if milvus_client.has_collection(_COLLECTION_NAME): + milvus_client.drop_collection(_COLLECTION_NAME) + + # create collection + field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True) + field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + schema = CollectionSchema(fields=[field1, field2], description="collection description") + milvus_client.create_collection(collection_name=_COLLECTION_NAME,schema=schema) + milvus_client.describe_collection(collection_name=_COLLECTION_NAME) + + print("\ncollection created:", _COLLECTION_NAME) + + # show collections + print("\nlist collections:") + print(milvus_client.list_collections()) + + # insert 10000 vectors with 128 dimension + data_dict = [] + for i in range(10000): + entity = { + "id_field": i+1, # Assuming id_field is the _COLLECTION_NAME of the field corresponding to the ID + "float_vector_field": [random.random() for _ in range(_DIM)] + } + data_dict.append(entity) + insert_result = milvus_client.insert(collection_name=_COLLECTION_NAME,data=data_dict) + + # get the number of entities + print(f"\nThe number of entity: {insert_result['insert_count']}") + + # create index + index_params = milvus_client.prepare_index_params() + + index_params.add_index( + field_name=_VECTOR_FIELD_NAME, + index_type=_INDEX_TYPE, + metric_type=_METRIC_TYPE, + params={"nlist": _NLIST} + ) + + milvus_client.create_index( + collection_name=_COLLECTION_NAME, + index_params=index_params + ) + print("\nCreated index") + + # load data to memory + milvus_client.load_collection(_COLLECTION_NAME) + vector = data_dict[1] + vectors = [vector["float_vector_field"]] + + # search + search_param = { + "anns_field": _VECTOR_FIELD_NAME, + "param": {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}}, + "expr": f"{_ID_FIELD_NAME} > 0"} + results = milvus_client.search(collection_name=_COLLECTION_NAME,data=vectors,limit= _TOPK,search_params=search_param) + for i, result in enumerate(results): + print("\nSearch result for {}th vector: ".format(i)) + for j, res in enumerate(result): + print("Top {}: {}".format(j, res)) + + # release memory + milvus_client.release_collection(_COLLECTION_NAME) + + # drop collection index + milvus_client.drop_index(_COLLECTION_NAME,index_name=_VECTOR_FIELD_NAME) + print("\nDrop index sucessfully") + + # drop collection + milvus_client.drop_collection(_COLLECTION_NAME) + print("\nDrop collection: {}".format(_COLLECTION_NAME)) + + +if __name__ == '__main__': + main() diff --git a/examples/cert/example_tls2.py b/examples/cert/example_tls2.py new file mode 100644 index 000000000..572bf561b --- /dev/null +++ b/examples/cert/example_tls2.py @@ -0,0 +1,126 @@ +import random + +from pymilvus import ( + MilvusClient, + FieldSchema, CollectionSchema, DataType, + utility +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a collection +# 3. insert entities +# 4. create index +# 5. search + + +_HOST = '127.0.0.1' +_PORT = '19530' +_URI = f"https://{_HOST}:{_PORT}" + +# Const names +_COLLECTION_NAME = 'demo' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' + +# Vector parameters +_DIM = 128 +_INDEX_FILE_SIZE = 32 # max file size of stored index + +# Index parameters +_METRIC_TYPE = 'L2' +_INDEX_TYPE = 'IVF_FLAT' +_NLIST = 1024 +_NPROBE = 16 +_TOPK = 3 + + +def main(): + # create a connection + print(f"\nCreate connection...") + milvus_client = MilvusClient(uri=_URI, + secure=True, + client_pem_path="cert/client.pem", + client_key_path="cert/client.key", + ca_pem_path="cert/ca.pem", + server_name='localhost') + print(f"\nList connection:") + print(milvus_client._get_connection()) + + # drop collection if the collection exists + if milvus_client.has_collection(_COLLECTION_NAME): + milvus_client.drop_collection(_COLLECTION_NAME) + + # create collection + field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True) + field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + schema = CollectionSchema(fields=[field1, field2], description="collection description") + milvus_client.create_collection(collection_name=_COLLECTION_NAME,schema=schema) + milvus_client.describe_collection(collection_name=_COLLECTION_NAME) + + print("\ncollection created:", _COLLECTION_NAME) + + # show collections + print("\nlist collections:") + print(milvus_client.list_collections()) + + # insert 10000 vectors with 128 dimension + data_dict = [] + for i in range(10000): + entity = { + "id_field": i+1, # Assuming id_field is the _COLLECTION_NAME of the field corresponding to the ID + "float_vector_field": [random.random() for _ in range(_DIM)] + } + data_dict.append(entity) + insert_result = milvus_client.insert(collection_name=_COLLECTION_NAME,data=data_dict) + + # get the number of entities + print(f"\nThe number of entity: {insert_result['insert_count']}") + + # create index + index_params = milvus_client.prepare_index_params() + + index_params.add_index( + field_name=_VECTOR_FIELD_NAME, + index_type=_INDEX_TYPE, + metric_type=_METRIC_TYPE, + params={"nlist": _NLIST} + ) + + milvus_client.create_index( + collection_name=_COLLECTION_NAME, + index_params=index_params + ) + print("\nCreated index") + + # load data to memory + milvus_client.load_collection(_COLLECTION_NAME) + vector = data_dict[1] + vectors = [vector["float_vector_field"]] + + # search + search_param = { + "anns_field": _VECTOR_FIELD_NAME, + "param": {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}}, + "expr": f"{_ID_FIELD_NAME} > 0"} + results = milvus_client.search(collection_name=_COLLECTION_NAME,data=vectors,limit= _TOPK,search_params=search_param) + for i, result in enumerate(results): + print("\nSearch result for {}th vector: ".format(i)) + for j, res in enumerate(result): + print("Top {}: {}".format(j, res)) + + # release memory + milvus_client.release_collection(_COLLECTION_NAME) + + # drop collection index + milvus_client.drop_index(_COLLECTION_NAME,index_name=_VECTOR_FIELD_NAME) + print("\nDrop index sucessfully") + + # drop collection + milvus_client.drop_collection(_COLLECTION_NAME) + print("\nDrop collection: {}".format(_COLLECTION_NAME)) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/examples/cert/server.pem b/examples/cert/server.pem new file mode 100644 index 000000000..420ca9c2c --- /dev/null +++ b/examples/cert/server.pem @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDizCCAnOgAwIBAgIUNCeQzjvQkinJwUgQ4quG0opHAL4wDQYJKoZIhvcNAQEL +BQAwYzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdaMQswCQYDVQQHDAJHWjESMBAG +A1UECgwJcm9uZXRoaW5nMRIwEAYDVQQLDAlyb25ldGhpbmcxEjAQBgNVBAMMCWxv +Y2FsaG9zdDAeFw0yMjA1MDEwODU3MzRaFw0zMjA0MjgwODU3MzRaMEkxCzAJBgNV +BAYTAkNOMRIwEAYDVQQKDAlyb25ldGhpbmcxEjAQBgNVBAsMCXJvbmV0aGluZzES +MBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAsiO3f54uRcWcXTHJSbYzCC9io8duF0xxnHIEke7smYOAFmNDsHri/9405UNt +zcpanMfaSck1cf/OM5jzHZDyDvK3WsSo6uHtxnw3T8f8FwNoenRZGPUPx7+tYnGN +AScnPkMOidXZf2YKEwn/VQD9/3nmsv+CbA+YaHLcqvGXn7aqDb6Uj6Ja8E6O7j9E +0rb4jNC0k76Jl8+3RkHZTm45fNqXyUmXKtWMy1OgYxNI09Y0yo4GgTE8KqTtjT+v +ug/nQv3RwWPP93yc9CHHR5Zon10j0CNZ/Cyb2Zi0SBnayojW8mtL8MkyvfpDFpJg +KPC5m7kgguhUN193lEUPNVLoYwIDAQABo1EwTzAJBgNVHRMEAjAAMAsGA1UdDwQE +AwIF4DA1BgNVHREELjAsgglsb2NhbGhvc3SCDioucm9uZXRoaW5nLmNugg8qLnJv +bmV0aGluZy5jb20wDQYJKoZIhvcNAQELBQADggEBAG18ss3sNJjLXMv9Wm+dBvMQ +ekGFunZ3unN641RxGpUWjbUj963woXx8eiL6lJFKiU52aXrFR4+6BZ0tbRsLz4e4 +pmCdOz4mClmNSk6mSSz7W8tnhz+h1jqUzp5whAh1Gj5QdauTzgcLFxBw3PWTt8tp +4xGIuZwAWyB9MHXMkBtsdiP/oUEoVXYC2SA+o7dWr0d9w0K6BA00TZR+OHscfpGS +k0aD1Cu8fxiccnY7jcBMz/2vVg3LzoeUqL7TZbpan/jzO5FAMVoi21UFwEQbBYMb +yUbPei060JQ/u7H6CR9OCCHKsDvtpIfgpeAmjcuFSCF+Q3cHTAstHrlZWaOCNO4= +-----END CERTIFICATE----- diff --git a/examples/compact.py b/examples/compact.py new file mode 100644 index 000000000..5aaa73f2d --- /dev/null +++ b/examples/compact.py @@ -0,0 +1,83 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2") + +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "vector": rng.random((1, dim))[0], "a": 100}, + {"id": 2, "vector": rng.random((1, dim))[0], "b": 200}, + {"id": 3, "vector": rng.random((1, dim))[0], "c": 300}, + {"id": 4, "vector": rng.random((1, dim))[0], "d": 400}, + {"id": 5, "vector": rng.random((1, dim))[0], "e": 500}, + {"id": 6, "vector": rng.random((1, dim))[0], "f": 600}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + +upsert_ret = milvus_client.upsert(collection_name, {"id": 2 , "vector": rng.random((1, dim))[0], "g": 100}) +print(upsert_ret) + +print(fmt.format("Start flush")) +milvus_client.flush(collection_name) +print(fmt.format("flush done")) + +result = milvus_client.query(collection_name, "", output_fields = ["count(*)"]) +print(f"final entities in {collection_name} is {result[0]['count(*)']}") + +rows = [ + {"id": 7, "vector": rng.random((1, dim))[0], "g": 700}, + {"id": 8, "vector": rng.random((1, dim))[0], "h": 800}, + {"id": 9, "vector": rng.random((1, dim))[0], "i": 900}, + {"id": 10, "vector": rng.random((1, dim))[0], "j": 1000}, + {"id": 11, "vector": rng.random((1, dim))[0], "k": 1100}, + {"id": 12, "vector": rng.random((1, dim))[0], "l": 1200}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + +print(fmt.format("Start flush")) +milvus_client.flush(collection_name) +print(fmt.format("flush done")) + +result = milvus_client.query(collection_name, "", output_fields = ["count(*)"]) +print(f"final entities in {collection_name} is {result[0]['count(*)']}") + +print(fmt.format("Start compact")) +job_id = milvus_client.compact(collection_name) +print(f"job_id:{job_id}") + +cnt = 0 +state = milvus_client.get_compaction_state(job_id) +while (state != "Completed" and cnt < 10): + time.sleep(1.0) + state = milvus_client.get_compaction_state(job_id) + print(f"compaction state: {state}") + cnt += 1 + +if state == "Completed": + print(fmt.format("compact done")) +else: + print(fmt.format("compact timeout")) + +result = milvus_client.query(collection_name, "", output_fields = ["count(*)"]) +print(f"final entities in {collection_name} is {result[0]['count(*)']}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/customize_schema.py b/examples/customize_schema.py new file mode 100644 index 000000000..2b0b54322 --- /dev/null +++ b/examples/customize_schema.py @@ -0,0 +1,70 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, + DataType +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("title", DataType.VARCHAR, max_length=64) + + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", metric_type="L2") +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "embeddings": rng.random((1, dim))[0], "a": 100, "title": "t1"}, + {"id": 2, "embeddings": rng.random((1, dim))[0], "b": 200, "title": "t2"}, + {"id": 3, "embeddings": rng.random((1, dim))[0], "c": 300, "title": "t3"}, + {"id": 4, "embeddings": rng.random((1, dim))[0], "d": 400, "title": "t4"}, + {"id": 5, "embeddings": rng.random((1, dim))[0], "e": 500, "title": "t5"}, + {"id": 6, "embeddings": rng.random((1, dim))[0], "f": 600, "title": "t6"}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + + +print(fmt.format("Start load collection ")) +milvus_client.load_collection(collection_name) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +print(query_results[0]) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 600 or title == 't2'") +for ret in query_results: + print(ret) + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/customize_schema_auto_id.py b/examples/customize_schema_auto_id.py new file mode 100644 index 000000000..4d727b9aa --- /dev/null +++ b/examples/customize_schema_auto_id.py @@ -0,0 +1,70 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, + DataType +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=True, auto_id=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("title", DataType.VARCHAR, max_length=64) + + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", metric_type="L2") +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"embeddings": rng.random((1, dim))[0], "a": 100, "title": "t1"}, + {"embeddings": rng.random((1, dim))[0], "b": 200, "title": "t2"}, + {"embeddings": rng.random((1, dim))[0], "c": 300, "title": "t3"}, + {"embeddings": rng.random((1, dim))[0], "d": 400, "title": "t4"}, + {"embeddings": rng.random((1, dim))[0], "e": 500, "title": "t5"}, + {"embeddings": rng.random((1, dim))[0], "f": 600, "title": "t6"}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + + +print(fmt.format("Start load collection ")) +milvus_client.load_collection(collection_name) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=insert_result['ids'][0]) +print(query_results[0]) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 600 or title == 't2'") +for ret in query_results: + print(ret) + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/customize_schema_id.py b/examples/customize_schema_id.py new file mode 100644 index 000000000..f78b7fa0f --- /dev/null +++ b/examples/customize_schema_id.py @@ -0,0 +1,62 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, + DataType +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=True) +schema.add_field("uid", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("title", DataType.VARCHAR, max_length=64) +schema.add_field("id", DataType.VARCHAR, max_length=64) + + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", metric_type="L2") +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"uid": 1, "embeddings": rng.random((1, dim))[0], "a": 100, "title": "t1", "id":"u1"}, + {"uid": 2, "embeddings": rng.random((1, dim))[0], "b": 200, "title": "t2", "id":"u2"}, + {"uid": 3, "embeddings": rng.random((1, dim))[0], "c": 300, "title": "t3", "id":"u3"}, + {"uid": 4, "embeddings": rng.random((1, dim))[0], "d": 400, "title": "t4", "id":"u4"}, + {"uid": 5, "embeddings": rng.random((1, dim))[0], "e": 500, "title": "t5", "id":"u5"}, + {"uid": 6, "embeddings": rng.random((1, dim))[0], "f": 600, "title": "t6", "id":"u6"}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + + +print(fmt.format("Start load collection ")) +milvus_client.load_collection(collection_name) + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["id"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/database.py b/examples/database.py new file mode 100644 index 000000000..d9d5f45a7 --- /dev/null +++ b/examples/database.py @@ -0,0 +1,33 @@ +import numpy as np +from pymilvus import ( + MilvusClient, + DataType +) + +milvus_client = MilvusClient("http://localhost:19530") + +db1Name = "db1" +# create db1 +if db1Name not in milvus_client.list_databases(): + print("\ncreate database: db1") + milvus_client.create_database(db_name=db1Name, properties={"key1":"value1"}) + db_info = milvus_client.describe_database(db_name=db1Name) + print(db_info) + + +# alter_database_properties of db1 +db_info = milvus_client.describe_database(db_name=db1Name) +print(db_info) +print("\nalter database properties of db1:") +milvus_client.alter_database_properties(db_name=db1Name, properties={"key": "value"}) +db_info = milvus_client.describe_database(db_name=db1Name) +print(db_info) + +print("\ndrop database properties of db1") +milvus_client.drop_database_properties(db_name=db1Name, property_keys=["key"]) +db_info = milvus_client.describe_database(db_name=db1Name) +print(db_info) + +# list database +print("\nlist databases:") +print(milvus_client.list_databases()) \ No newline at end of file diff --git a/examples/example_index.py b/examples/example_index.py deleted file mode 100644 index 7bd5c7181..000000000 --- a/examples/example_index.py +++ /dev/null @@ -1,34 +0,0 @@ -from pymilvus import ( - connections, - list_collections, - FieldSchema, CollectionSchema, DataType, - Collection, Index -) - -# configure milvus hostname and port -print(f"\nCreate connection...") -connections.connect() - -# List all collection names -print(f"\nList collections...") -print(list_collections()) - -# Create a collection named 'demo_film_tutorial' -print(f"\nCreate collection...") -field1 = FieldSchema(name="release_year", dtype=DataType.INT64, description="int64", is_primary=True) -field2 = FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, description="float vector", dim=128, is_primary=False) -schema = CollectionSchema(fields=[field1, field2], description="collection description") -collection = Collection(name='demo_film_tutorial', data=None, schema=schema) - -print(f"\nCreate index...") -index_params = {"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 100}} -index = Index(collection, "embedding", index_params) -print(index.params) - -print([index.params for index in collection.indexes]) - -print(f"\nDrop index...") -index.drop() - -print([index.params for index in collection.indexes]) -collection.drop() diff --git a/examples/flush.py b/examples/flush.py new file mode 100644 index 000000000..c192a6812 --- /dev/null +++ b/examples/flush.py @@ -0,0 +1,57 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2") + +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "vector": rng.random((1, dim))[0], "a": 100}, + {"id": 2, "vector": rng.random((1, dim))[0], "b": 200}, + {"id": 3, "vector": rng.random((1, dim))[0], "c": 300}, + {"id": 4, "vector": rng.random((1, dim))[0], "d": 400}, + {"id": 5, "vector": rng.random((1, dim))[0], "e": 500}, + {"id": 6, "vector": rng.random((1, dim))[0], "f": 600}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + +upsert_ret = milvus_client.upsert(collection_name, {"id": 2 , "vector": rng.random((1, dim))[0], "g": 100}) +print(upsert_ret) + +print(fmt.format("Start flush")) +milvus_client.flush(collection_name) +print(fmt.format("flush done")) + + +result = milvus_client.query(collection_name, "", output_fields = ["count(*)"]) +print(f"final entities in {collection_name} is {result[0]['count(*)']}") + + +print(f"start to delete by specifying filter in collection {collection_name}") +delete_result = milvus_client.delete(collection_name, ids=[6]) +print(delete_result) + + +print(fmt.format("Start flush")) +milvus_client.flush(collection_name) +print(fmt.format("flush done")) + + +result = milvus_client.query(collection_name, "", output_fields = ["count(*)"]) +print(f"final entities in {collection_name} is {result[0]['count(*)']}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/full_text_search/bm25.py b/examples/full_text_search/bm25.py new file mode 100644 index 000000000..b4ff796a7 --- /dev/null +++ b/examples/full_text_search/bm25.py @@ -0,0 +1,89 @@ +from pymilvus import ( + MilvusClient, + Function, + FunctionType, + DataType, +) + +fmt = "\n=== {:30} ===\n" +collection_name = "doc_in_doc_out" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema() +schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False) +schema.add_field("document_content", DataType.VARCHAR, max_length=9000, enable_analyzer=True) +schema.add_field("sparse_vector", DataType.SPARSE_FLOAT_VECTOR) + +bm25_function = Function( + name="bm25_fn", + input_field_names=["document_content"], + output_field_names="sparse_vector", + function_type=FunctionType.BM25, +) +schema.add_function(bm25_function) + +index_params = milvus_client.prepare_index_params() +index_params.add_index( + field_name="sparse_vector", + index_name="sparse_inverted_index", + index_type="SPARSE_INVERTED_INDEX", + metric_type="BM25", + params={"bm25_k1": 1.2, "bm25_b": 0.75}, +) + +ret = milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") +print(ret) + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rows = [ + {"id": 1, "document_content": "hello world"}, + {"id": 2, "document_content": "hello milvus"}, + {"id": 3, "document_content": "hello zilliz"}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) +print(fmt.format("Inserting entities done")) +print(insert_result) + +texts_to_search = ["zilliz"] +search_params = { + "metric_type": "BM25", + "params": {} +} +print(fmt.format(f"Start search with retrieve several fields.")) +result = milvus_client.search(collection_name, texts_to_search, limit=3, output_fields=["document_content"], search_params=search_params) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[3]) +print(query_results[0]) + +upsert_ret = milvus_client.upsert(collection_name, {"id": 2 , "document_content": "hello milvus again"}) +print(upsert_ret) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter="document_content == 'hello milvus again'") +for ret in query_results: + print(ret) + +print(f"start to delete by specifying filter in collection {collection_name}") +delete_result = milvus_client.delete(collection_name, ids=[3]) +print(delete_result) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter="document_content == 'hello zilliz'") +print(f"Query results after deletion: {query_results}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/full_text_search/language_identifier.py b/examples/full_text_search/language_identifier.py new file mode 100644 index 000000000..fe067a5cf --- /dev/null +++ b/examples/full_text_search/language_identifier.py @@ -0,0 +1,115 @@ +from pymilvus import MilvusClient, DataType, Function, FunctionType + +# 1. Setup Milvus Client +client = MilvusClient("http://localhost:19530") +COLLECTION_NAME = "multilingual_test_B" +if client.has_collection(collection_name=COLLECTION_NAME): + client.drop_collection(collection_name=COLLECTION_NAME) + +# 2. Define analyzers for multiple languages +# These individual analyzer definitions will be reused by both methods. +analyzers = { + "Japanese": { + # Use lindera with japanese dict 'ipadic' + # and remove punctuation beacuse lindera tokenizer will remain punctuation + "tokenizer":{ + "type": "lindera", + "dict_kind": "ipadic" + }, + "filter": ["removepunct"] + }, + "English": { + # Use build-in english analyzer + "type": "english", + }, + "default": { + # use icu tokenizer as a fallback. + "tokenizer": "icu", + } +} + +# --- Option B: Using Language Identifier Tokenizer --- +print("\n--- Demonstrating Language Identifier Tokenizer ---") + +# 3B. reate a collection with language identifier +analyzer_params_langid = { + "tokenizer": { + "type": "language_identifier", + "analyzers": analyzers # Referencing the analyzers defined in Step 2 + }, +} + +schema_langid = MilvusClient.create_schema( + auto_id=True, + enable_dynamic_field=False, +) +schema_langid.add_field(field_name="id", datatype=DataType.INT64, is_primary=True) +# The 'language' field is not strictly needed by the analyzer itself here, as detection is automatic.# However, you might keep it for metadata purposes. +schema_langid.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=25565, enable_analyzer=True, analyzer_params = analyzer_params_langid) +schema_langid.add_field(field_name="text_sparse", datatype=DataType.SPARSE_FLOAT_VECTOR) # BM25 Sparse Vector# add bm25 function +text_bm25_function_langid = Function( + name="text_bm25", + function_type=FunctionType.BM25, + input_field_names=["text"], + output_field_names=["text_sparse"], +) +schema_langid.add_function(text_bm25_function_langid) + +index_params_langid = client.prepare_index_params() +index_params_langid.add_index( + field_name="text_sparse", + index_type="AUTOINDEX", # Use auto index for BM25 + metric_type="BM25", +) + +client.create_collection( + collection_name=COLLECTION_NAME, + schema=schema_langid, + index_params=index_params_langid +) +print(f"Collection '{COLLECTION_NAME}' created successfully with Language Identifier Tokenizer.") + +# 4B. Insert Data for Language Identifier Tokenizer and Load Collection +# Insert English and Japanese movie titles. The language_identifier will detect the language. +client.insert( + collection_name=COLLECTION_NAME, + data=[ + {"text": "The Lord of the Rings"}, + {"text": "Spirited Away"}, + {"text": "千と千尋の神隠し"}, + {"text": "君の名は。"}, + ] +) +print(f"Inserted multilingual data into '{COLLECTION_NAME}'.") + +# Load the collection into memory before searching +client.load_collection(collection_name=COLLECTION_NAME) + +# 5B. Perform a full-text search with Language Identifier Tokenizer# No need to specify analyzer_name in search_params; it's detected automatically for the query. +print("\n--- Search results for Language Identifier Tokenizer ---") +results_langid_jp = client.search( + collection_name=COLLECTION_NAME, + data=["神隠し"], + limit=2, + output_fields=["text"], + search_params={"metric_type": "BM25"}, # Analyzer automatically determined by language_identifier + consistency_level = "Strong", +) +print("\nSearch results for '神隠し' (Language Identifier Tokenizer):") +for result in results_langid_jp[0]: + print(result) + +results_langid_en = client.search( + collection_name=COLLECTION_NAME, + data=["the Rings"], + limit=2, + output_fields=["text"], + search_params={"metric_type": "BM25"}, # Analyzer automatically determined by language_identifier + consistency_level = "Strong", +) +print("\nSearch results for 'the Rings' (Language Identifier Tokenizer):") +for result in results_langid_en[0]: + print(result) + +client.drop_collection(collection_name=COLLECTION_NAME) +print(f"Collection '{COLLECTION_NAME}' dropped.") \ No newline at end of file diff --git a/examples/full_text_search/multi_analyzer.py b/examples/full_text_search/multi_analyzer.py new file mode 100644 index 000000000..5ba4b3a0a --- /dev/null +++ b/examples/full_text_search/multi_analyzer.py @@ -0,0 +1,115 @@ +from pymilvus import MilvusClient, DataType, Function, FunctionType + +# 1. Setup Milvus Client +client = MilvusClient("http://localhost:19530") +COLLECTION_NAME = "multilingual_test_A" +if client.has_collection(collection_name=COLLECTION_NAME): + client.drop_collection(collection_name=COLLECTION_NAME) + +# 2. Define analyzers for multiple languages +# These individual analyzer definitions will be reused by both methods. +analyzers = { + "Japanese": { + # Use lindera with japanese dict 'ipadic' + # and remove punctuation beacuse lindera tokenizer will remain punctuation + "tokenizer":{ + "type": "lindera", + "dict_kind": "ipadic" + }, + "filter": ["removepunct"] + }, + "English": { + # Use build-in english analyzer + "type": "english", + }, + "default": { + # use icu tokenizer as a fallback. + "tokenizer": "icu", + } +} + +# --- Option A: Using Multi-Language Analyzer --- +print("\n--- Demonstrating Multi-Language Analyzer ---") + +# 3A. reate a collection with the Multi Analyzer + +mutil_analyzer_params = { + "by_field": "language", + "analyzers": analyzers, +} + +schema = MilvusClient.create_schema( + auto_id=True, + enable_dynamic_field=False, +) +schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)# Apply our multi-language analyzer to the 'title' field +schema.add_field(field_name="language", datatype=DataType.VARCHAR, max_length=255, nullable = True) +schema.add_field(field_name="text", datatype=DataType.VARCHAR, max_length=25565, enable_analyzer=True, multi_analyzer_params = mutil_analyzer_params) +schema.add_field(field_name="text_sparse", datatype=DataType.SPARSE_FLOAT_VECTOR) # Bm25 Sparse Vector + +# add bm25 function +text_bm25_function = Function( + name="text_bm25", + function_type=FunctionType.BM25, + input_field_names=["text"], + output_field_names=["text_sparse"], +) +schema.add_function(text_bm25_function) + +index_params = client.prepare_index_params() +index_params.add_index( + field_name="text_sparse", + index_type="AUTOINDEX", # Use auto index for BM25 + metric_type="BM25", +) + +client.create_collection( + collection_name=COLLECTION_NAME, + schema=schema, + index_params=index_params +) +print(f"Collection '{COLLECTION_NAME}' created successfully.") + +# 4A. Insert data for Multi-Language Analyzer and load collection# Insert English and Japanese movie titles, explicitly setting the 'language' field +client.insert( + collection_name=COLLECTION_NAME, + data=[ + {"text": "The Lord of the Rings", "language": "English"}, + {"text": "Spirited Away", "language": "English"}, + {"text": "千と千尋の神隠し", "language": "Japanese"}, # This is "Spirited Away" in Japanese + {"text": "君の名は。", "language": "Japanese"}, # This is "Your Name." in Japanese + ] +) +print(f"Inserted multilingual data into '{COLLECTION_NAME}'.") + +# Load the collection into memory before searching +client.load_collection(collection_name=COLLECTION_NAME) + +# 5A. Perform a full-text search with Multi-Language Analyzer# When searching, explicitly specify the analyzer to use for the query string. +print("\n--- Search results for Multi-Language Analyzer ---") +results_multi_jp = client.search( + collection_name=COLLECTION_NAME, + data=["神隠し"], + limit=2, + output_fields=["text"], + search_params={"metric_type": "BM25", "analyzer_name": "Japanese"}, # Specify Japanese analyzer for query + consistency_level = "Strong", +) +print("\nSearch results for '神隠し' (Multi-Language Analyzer):") +for result in results_multi_jp[0]: + print(result) + +results_multi_en = client.search( + collection_name=COLLECTION_NAME, + data=["Rings"], + limit=2, + output_fields=["text"], + search_params={"metric_type": "BM25", "analyzer_name": "English"}, # Specify English analyzer for query + consistency_level = "Strong", +) +print("\nSearch results for 'Rings' (Multi-Language Analyzer):") +for result in results_multi_en[0]: + print(result) + +client.drop_collection(collection_name=COLLECTION_NAME) +print(f"Collection '{COLLECTION_NAME}' dropped.") \ No newline at end of file diff --git a/examples/get_server_version.py b/examples/get_server_version.py new file mode 100644 index 000000000..16b8bc708 --- /dev/null +++ b/examples/get_server_version.py @@ -0,0 +1,8 @@ +from pymilvus import ( + MilvusClient, +) + +milvus_client = MilvusClient("http://localhost:19530") + +version = milvus_client.get_server_version() +print(f"server version: {version}") diff --git a/examples/hybrid_search.py b/examples/hybrid_search.py new file mode 100644 index 000000000..1c8a955ba --- /dev/null +++ b/examples/hybrid_search.py @@ -0,0 +1,94 @@ +import numpy as np +from pymilvus import ( + MilvusClient, + DataType, + AnnSearchRequest, RRFRanker, WeightedRanker, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 3000, 8 + +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(auto_id=False, description="hello_milvus is the simplest demo to introduce the APIs") +schema.add_field("pk", DataType.VARCHAR, is_primary=True, max_length=100) +schema.add_field("random", DataType.DOUBLE) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("embeddings2", DataType.FLOAT_VECTOR, dim=dim) + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", index_type = "IVF_FLAT", metric_type="L2", nlist=128) +index_params.add_index(field_name = "embeddings2",index_type = "IVF_FLAT", metric_type="L2", nlist=128) + +print(fmt.format("Create collection `hello_milvus`")) + +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) +entities = [ + # provide the pk field because `auto_id` is set to False + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim)), # field embeddings, supports numpy.ndarray and list + rng.random((num_entities, dim)), # field embeddings2, supports numpy.ndarray and list +] + +rows = [ {"pk": entities[0][i], "random": entities[1][i], "embeddings": entities[2][i], "embeddings2": entities[3][i]} for i in range (num_entities)] + +insert_result = milvus_client.insert(collection_name, rows) + + +print(fmt.format("Start loading")) +milvus_client.load_collection(collection_name) + +field_names = ["embeddings", "embeddings2"] + +req_list = [] +nq = 1 +default_limit = 5 +vectors_to_search = [] + +for i in range(len(field_names)): + # 4. generate search data + vectors_to_search = rng.random((nq, dim)) + search_param = { + "data": vectors_to_search, + "anns_field": field_names[i], + "param": {"metric_type": "L2"}, + "limit": default_limit, + "expr": "random > 0.5"} + req = AnnSearchRequest(**search_param) + req_list.append(req) + +print(fmt.format("rank by RRFRanker")) +hybrid_res = milvus_client.hybrid_search(collection_name, req_list, RRFRanker(), default_limit, output_fields=["random"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") + +req_list = [] +for i in range(len(field_names)): + # 4. generate search data + vectors_to_search = rng.random((nq, dim)) + search_param = { + "data": vectors_to_search, + "anns_field": field_names[i], + "param": {"metric_type": "L2"}, + "limit": default_limit, + "expr": "random > {radius}", + "expr_params": {"radius": 0.5}} + req = AnnSearchRequest(**search_param) + req_list.append(req) + +print(fmt.format("rank by RRFRanker with expression template")) +hybrid_res = milvus_client.hybrid_search(collection_name, req_list, RRFRanker(), default_limit, output_fields=["random"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") diff --git a/examples/index.py b/examples/index.py new file mode 100644 index 000000000..62fac283e --- /dev/null +++ b/examples/index.py @@ -0,0 +1,87 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, + DataType +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("title", DataType.VARCHAR, max_length=64) + +# collection is not loaded after creation +milvus_client.create_collection(collection_name, schema=schema, consistency_level="Strong") + +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "embeddings": rng.random((1, dim))[0], "a": 100, "title": "t1"}, + {"id": 2, "embeddings": rng.random((1, dim))[0], "b": 200, "title": "t2"}, + {"id": 3, "embeddings": rng.random((1, dim))[0], "c": 300, "title": "t3"}, + {"id": 4, "embeddings": rng.random((1, dim))[0], "d": 400, "title": "t4"}, + {"id": 5, "embeddings": rng.random((1, dim))[0], "e": 500, "title": "t5"}, + {"id": 6, "embeddings": rng.random((1, dim))[0], "f": 600, "title": "t6"}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", metric_type="L2") +index_params.add_index(field_name = "title", index_type = "Trie", index_name="my_trie") + +print(fmt.format("Start create index")) +milvus_client.create_index(collection_name, index_params) + + +index_names = milvus_client.list_indexes(collection_name) +print(f"index names for {collection_name}:", index_names) +for index_name in index_names: + index_info = milvus_client.describe_index(collection_name, index_name=index_name) + print(f"index info for index {index_name} is:", index_info) + +print(fmt.format("Start load collection")) +milvus_client.load_collection(collection_name) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +print(query_results[0]) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 600 or title == 't2'") +for ret in query_results: + print(ret) + +vectors_to_search = rng.random((1, dim)) +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["title"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + + + +field_index_names = milvus_client.list_indexes(collection_name, field_name = "embeddings") +print(f"index names for {collection_name}`s field embeddings:", field_index_names) + +try: + milvus_client.drop_index(collection_name, "my_trie") +except Exception as e: + print(f"cacthed {e}") + +milvus_client.release_collection(collection_name) + +milvus_client.drop_index(collection_name, "my_trie") + +milvus_client.drop_collection(collection_name) diff --git a/examples/index_params.py b/examples/index_params.py new file mode 100644 index 000000000..db5b0e171 --- /dev/null +++ b/examples/index_params.py @@ -0,0 +1,15 @@ +from pymilvus.milvus_client import IndexParams + + + +index_params = IndexParams() + +index_params.add_index(field_name = "embeddings", metric_type="L2", efConstruction=100, M=10) +# The operation of this line of code will supersede the operation of the previous line +index_params.add_index(field_name = "embeddings", metric_type="L2", params = {"efConstruction":100, "M":20}) +index_params.add_index(field_name = "title", index_type = "Trie", index_name="my_trie") +index_params.add_index(field_name = "text", index_type = "INVERTED", index_name="my_inverted") + +for i in index_params: + print(i) + diff --git a/examples/int8_example.py b/examples/int8_example.py new file mode 100644 index 000000000..2b899d2ab --- /dev/null +++ b/examples/int8_example.py @@ -0,0 +1,65 @@ +import random + +import numpy as np + +from pymilvus import ( + DataType, + MilvusClient, +) + +default_int8_index_param = {"M": 8, "efConstruction": 200} + + +def gen_int8_vectors(num: int, dim: int): + raw_vectors = [] + int8_vectors = [] + for _ in range(num): + raw_vector = [random.randint(-128, 127) for _ in range(dim)] + raw_vectors.append(raw_vector) + int8_vector = np.array(raw_vector, dtype=np.int8) + int8_vectors.append(int8_vector) + return raw_vectors, int8_vectors + + +def int8_vector_search(): + c = MilvusClient() + + dim = 128 + nb = 3000 + collection_name = "hello_milvus_int8" + + schema = MilvusClient.create_schema() + schema.add_field("int64", DataType.INT64, is_primary=True, auto_id=True) + schema.add_field("int8_vector", DataType.INT8_VECTOR, dim=dim) + + if c.has_collection(collection_name): + c.drop_collection(collection_name) + c.create_collection(collection_name, schema=schema) + + _, vectors = gen_int8_vectors(nb, dim) + rows = [{"int8_vector": vectors[i] for i in range(12)}] + c.insert(collection_name, rows) + c.flush(collection_name) + + index_params = MilvusClient.prepare_index_params( + field_name="int8_vector", + index_type="HNSW", + index_name="int8_index", + **default_int8_index_param, + ) + c.create_index(collection_name, index_params) + c.load_collection(collection_name) + res = c.search( + collection_name=collection_name, + data=vectors[0:10], + search_params={"metric_type": "L2"}, + limit=1, output_fields=["int8_vector"], + ) + print("raw bytes: ", res[0][0].get("int8_vector")) + print("numpy ndarray: ", np.frombuffer(res[0][0].get("int8_vector"), dtype=np.int8)) + c.release_collection(collection_name) + c.drop_collection(collection_name) + + +if __name__ == "__main__": + int8_vector_search() diff --git a/examples/iterator/iterator.py b/examples/iterator/iterator.py new file mode 100644 index 000000000..999c1ebd1 --- /dev/null +++ b/examples/iterator/iterator.py @@ -0,0 +1,141 @@ +import numpy as np + +from pymilvus import ( + CollectionSchema, + DataType, + FieldSchema, + Hits, + MilvusClient, +) + +collection_name = "test_milvus_client_iterator" +prepare_new_data = True +clean_exist = True + +USER_ID = "id" +AGE = "age" +DEPOSIT = "deposit" +PICTURE = "picture" +DIM = 8 +NUM_ENTITIES = 10000 +rng = np.random.default_rng(seed=19530) + + +def test_query_iterator(milvus_client: MilvusClient): + # test query iterator + expr = f"10 <= {AGE} <= 25" + output_fields = [USER_ID, AGE] + queryIt = milvus_client.query_iterator(collection_name, filter=expr, batch_size=50, output_fields=output_fields) + page_idx = 0 + while True: + res = queryIt.next() + if len(res) == 0: + print("query iteration finished, close") + queryIt.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + +def test_search_iterator(milvus_client: MilvusClient): + vector_to_search = rng.random((1, DIM), np.float32) + search_iterator = milvus_client.search_iterator(collection_name, data=vector_to_search, batch_size=100, anns_field=PICTURE) + + page_idx = 0 + while True: + res = search_iterator.next() + if len(res) == 0: + print("search iteration finished, close") + search_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + +def test_search_iterator_with_filter(milvus_client: MilvusClient): + vector_to_search = rng.random((1, DIM), np.float32) + expr = f"10 <= {AGE} <= 25" + valid_ids = [1, 12, 123, 1234] + + def external_filter_func(hits: Hits): + # option 1 + return list(filter(lambda hit: hit.id in valid_ids, hits)) + + # option 2 + results = [] + for hit in hits: + if hit.id in valid_ids: + results.append(hit) + return results + + search_iterator = milvus_client.search_iterator( + collection_name=collection_name, + data=vector_to_search, + batch_size=100, + anns_field=PICTURE, + filter=expr, + external_filter_func=external_filter_func, + output_fields=[USER_ID, AGE] + ) + + page_idx = 0 + while True: + res = search_iterator.next() + if len(res) == 0: + print("search iteration with external filter finished, close") + search_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + +def main(): + milvus_client = MilvusClient("http://localhost:19530") + if milvus_client.has_collection(collection_name) and clean_exist: + milvus_client.drop_collection(collection_name) + print(f"dropped existed collection{collection_name}") + + if not milvus_client.has_collection(collection_name): + fields = [ + FieldSchema(name=USER_ID, dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name=AGE, dtype=DataType.INT64), + FieldSchema(name=DEPOSIT, dtype=DataType.DOUBLE), + FieldSchema(name=PICTURE, dtype=DataType.FLOAT_VECTOR, dim=DIM) + ] + schema = CollectionSchema(fields) + milvus_client.create_collection(collection_name, dimension=DIM, schema=schema) + + if prepare_new_data: + entities = [] + for i in range(NUM_ENTITIES): + entity = { + USER_ID: i, + AGE: (i % 100), + DEPOSIT: float(i), + PICTURE: rng.random((1, DIM))[0] + } + entities.append(entity) + milvus_client.insert(collection_name, entities) + milvus_client.flush(collection_name) + print(f"Finish flush collections:{collection_name}") + + index_params = milvus_client.prepare_index_params() + + index_params.add_index( + field_name=PICTURE, + index_type='IVF_FLAT', + metric_type='L2', + params={"nlist": 1024} + ) + milvus_client.create_index(collection_name, index_params) + milvus_client.load_collection(collection_name) + test_query_iterator(milvus_client=milvus_client) + test_search_iterator(milvus_client=milvus_client) + test_search_iterator_with_filter(milvus_client=milvus_client) + + +if __name__ == '__main__': + main() diff --git a/examples/manage_milvus_client/how_to_manage_milvus_client.md b/examples/manage_milvus_client/how_to_manage_milvus_client.md new file mode 100644 index 000000000..09b0173b0 --- /dev/null +++ b/examples/manage_milvus_client/how_to_manage_milvus_client.md @@ -0,0 +1,123 @@ +# How to Manage MilvusClient in PyMilvus + +This guide provides instructions on managing connections with the Milvus server using the `MilvusClient` of PyMilvus. It includes default behavior, advanced usage with aliases, and best practices. + +A `MilvusClient` holds an alias to a Milvus server connection. This alias represents a connection to a server or a specific database within the server. Let's first take a look at the default behavior. + +## Default Behavior + +### MilvusClient Shares Connections + +Multiple `MilvusClient` objects with the same Milvus **uri**, **authentication**, and **database** reuse the same connection to the Milvus server. + +The following code snippet demonstrate the reusing of connections in a single thread: +```python +TEST_DB = "test_DB" +URI = "http://localhost:19530" + +c = MilvusClient(uri=URI) + +# Multiple MilvusClient objects reuse the same connection to Milvus server +c_shared = [] +for i in range(10): + tmp = MilvusClient(uri=URI) + c_shared.append(tmp) + print(f"alias for {i}th MilvusClient: {tmp._using}, results of list_collections: {tmp.list_collections()}") +``` + +If you close one of the `MilvusClient` objects, the others won't work anymore. +```python +c.close() # close one of the MilvusClient objects +for tmp in c_shared: + try: + tmp.list_collections() + except Exception as ex: + print("MilvusClient sharing the same connection will be unable to use, exception: %s", ex) +``` + +The following code snippet demonstrate the reusing of connections in multiple threads: +```python +def multi_thread_init_milvus_client(): + """Multiple MilvusClient objects in multiple threads share the same connection to Milvus server""" + threads = [] + thread_count = 10 + for k in range(thread_count): + x = threading.Thread(target=worker, args=(MilvusClient(uri=URI),)) + threads.append(x) + x.start() + + for th in threads: + th.join() + + +def multi_thread_copy_milvus_client(): + """MilvusClient objects are safe to copy across threads""" + c_main = MilvusClient(uri=URI) + + threads = [] + thread_count = 10 + for k in range(thread_count): + x = threading.Thread(target=worker, args=(c_main,)) + threads.append(x) + x.start() + + for th in threads: + th.join() + + +def worker(c: MilvusClient): + got = c.list_collections() + print(f"Worker, alias to the server connection: {c._using}, results of list_collections: {got}") +``` + +Whether copy or not, they all share the same connection to Milvus server underneath. + +### MilvusClient Doesn't Share Connections + +**`MilvusClient` objects with different uri, authentication, and database don't share connections to the Milvus server by default.** + +The following code snippet demonstrate the *c_testdb* and *c* don't share the same connection to Milvus server: +```python +c = MilvusClient(uri=URI) +c.create_database(TEST_DB) + +c_testdb = MilvusClient(uri=URI, db_name=TEST_DB) + +# c and c_testdb don't share the same connection, the same as different authentications. +print(f"alias for c: {c._using}, results of c.list_collections: {c.list_collections()}") +print(f"alias for c_testdb: {c_testdb._using}, results of c_testdb.list_collections: {c_testdb.list_collections()}") + +c_testdb.close() +try: + c_testdb.list_collections() +except Exception as ex: + print(f"c_testdb has been closed, exception: {ex}") + +# close of c_testdb won't affect c +print(f"results of c.list_collections: {c.list_collections()}") +``` + +## Advanced usage: customized aliases + +If single connection doesn't meet your performance needs, you can create multiple connections with customized aliases. +The following code snippet demonstrate how to create unique connectionswith "c1-alias" and "c2-alias": + +```python +def advanced_unique_connections(): + c1 = MilvusClient(uri=URI, alias="c1-alias") + c2 = MilvusClient(uri=URI, alias="c2-alias") +``` +Notes: + +- **Avoid Conflict**: Manage alias names carefully to avoid conflicts in connection management. +- **Resource Management**: Ensure to close MilvusClient of customized aliases when no longer needed to free resources. + +### Best Practices + +- If you use the default bahavior, that different MilvusClient might share the same connection to Milvus server. Always ensure to **never close the MilvusClient** to avoid influencing shared MilvusClient. +- If you use customized aliases, be aware to manage them carefully. + - Ensure MilvusClient are closed when no longer needed to free resources. + - Ensure no other clients require the connection before closing the MilvusClient. + - Aviod using short-lived connections, reuse them as much as possible. + +By following these guidelines, you can effectively manage Milvus client connections for various application scenarios. diff --git a/examples/manage_milvus_client/manage_milvus_client.py b/examples/manage_milvus_client/manage_milvus_client.py new file mode 100644 index 000000000..4afadfac0 --- /dev/null +++ b/examples/manage_milvus_client/manage_milvus_client.py @@ -0,0 +1,115 @@ +""" Before running this example, you need to start Milvus server first. """ + +import logging +import threading + +from pymilvus import MilvusClient + +LOGGER = logging.getLogger(__name__) +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s (%(lineno)s) (%(threadName)s)') + +URI = "http://localhost:19530" +TEST_DB = "test_db" + +def worker(c: MilvusClient): + LOGGER.info(f"Worker, alias to the server connection: {c._using}, results of list_collections: {c.list_collections()}") + +def multi_thread_init_milvus_client(): + """Multiple MilvusClient objects in multiple threads share the same connection to Milvus server""" + LOGGER.info("Multiple MilvusClient objects in multiple threads share the same connection to Milvus server") + threads = [] + thread_count = 10 + for k in range(thread_count): + x = threading.Thread(target=worker, args=(MilvusClient(uri=URI),)) + threads.append(x) + x.start() + LOGGER.debug(f"Thread-{k} '{x.name}' started") + + for th in threads: + th.join() + LOGGER.debug(f"Thread '{th.name}' finished") + + +def multi_thread_copy_milvus_client(): + """MilvusClient objects are safe to copy across threads""" + LOGGER.info("Multiple MilvusClient objects are safe to copy across threads, they all shared the same connection to Milvus server") + c_main = MilvusClient(uri=URI) + + threads = [] + thread_count = 10 + for k in range(thread_count): + x = threading.Thread(target=worker, args=(c_main,)) + threads.append(x) + x.start() + LOGGER.debug(f"Thread-{k} '{x.name}' started") + + for th in threads: + th.join() + LOGGER.debug(f"Thread '{th.name}' finished") + + +def shared_connections(): + # A MilvusClient holds an alias to a Milvus server connection + c = MilvusClient(uri=URI) + LOGGER.info(f"Alias to the server connection: {c._using}, results of list_collections: {c.list_collections()}") + if TEST_DB not in c.list_databases(): + c.create_database(TEST_DB) + + # Multiple MilvusClient objects reuse the same connection to Milvus server + LOGGER.info("By default, multiple MilvusClient objects reuse the same connection to Milvus server") + c_shared = [] + for i in range(10): + tmp = MilvusClient(uri=URI) + c_shared.append(tmp) + LOGGER.info(f" {i}th MilvusClient, alias to the server connection: {tmp._using}, results of list_collections: {tmp.list_collections()}") + + # MilvusClient to differen database or with different user and token + # will create a new connection to Milvus server. + LOGGER.info("=============================") + c_testdb = MilvusClient(uri=URI, db_name=TEST_DB) + LOGGER.info(f"MilvusClient to test_db, alias to the server connection: {c_testdb._using}, results of list_collections: {c_testdb.list_collections()}") + + # MilvusClient object is safe to copy across threads + LOGGER.info("=============================") + multi_thread_copy_milvus_client() + + # MilvusClient in multiple threads share the same connection to Milvus server + LOGGER.info("=============================") + multi_thread_init_milvus_client() + + # Never close a client if you're absolutely sure no one else is using it. + # Close of one MilvusClient closes all other MilvusClient's access to MilvusServer + LOGGER.info("=============================") + c.close() + LOGGER.info("Closed MilvusClient c, all MilvusClient sharing the same connection will be unable to use") + for tmp in c_shared: + try: + tmp.list_collections() + except Exception as ex: + LOGGER.warning(" MilvusClient sharing the same connection will be unable to use, exception: %s", ex) + + +def advanced_unique_connections(): + # Use different alias to create MilvusClient doesn't share the connection to Milvus server + LOGGER.info("=============================") + LOGGER.info("Use different alias to create MilvusClient doesn't share the connection to Milvus server") + c1 = MilvusClient(uri=URI, alias="c1-alias") + LOGGER.info(f"Alias of c1 to the server connection: {c1._using}, results of c1.list_collections: {c1.list_collections()}") + c2 = MilvusClient(uri=URI, alias="c2-alias") + LOGGER.info(f"Alias of c2 to the server connection: {c2._using}, results of c2.list_collections: {c2.list_collections()}") + + c1.close() + LOGGER.info("Closed MilvusClient c1, c1 cannot use") + try: + c1.list_collections() + except Exception as ex: + LOGGER.warning("Closed MilvusClient c1, it cannot use, exception: %s", ex) + LOGGER.info(f"Closed MilvusClient c1, c2 can still use MilvusServer, results of c2.list_collections: {c2.list_collections()}") + + LOGGER.info("Be sure to manage your own alias's MilvusClient, close it when you're done") + c2.close() + + +if __name__ == "__main__": + shared_connections() + advanced_unique_connections() diff --git a/examples/milvus_model/hello_model.py b/examples/milvus_model/hello_model.py new file mode 100644 index 000000000..b40ac1867 --- /dev/null +++ b/examples/milvus_model/hello_model.py @@ -0,0 +1,67 @@ +# hello_model.py simplifies the demonstration of using various embedding functions in PyMilvus, +# focusing on dense, sparse, and hybrid models. This script illustrates: +# - Initializing and using OpenAIEmbeddingFunction for dense embeddings +# - Initializing and using BGEM3EmbeddingFunction for hybrid embeddings +# - Initializing and using SentenceTransformerEmbeddingFunction for dense embeddings +# - Initializing and using BM25EmbeddingFunction for sparse embeddings +# - Initializing and using SpladeEmbeddingFunction for sparse embeddings +import time + +from pymilvus.model.dense import OpenAIEmbeddingFunction, SentenceTransformerEmbeddingFunction +from pymilvus.model.hybrid import BGEM3EmbeddingFunction +from pymilvus.model.sparse import BM25EmbeddingFunction, SpladeEmbeddingFunction + +fmt = "=== {:30} ===" + + +def log(msg): + print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + " " + msg) + + +# OpenAIEmbeddingFunction usage +docs = [ + "Artificial intelligence was founded as an academic discipline in 1956.", + "Alan Turing was the first person to conduct substantial research in AI.", + "Born in Maida Vale, London, Turing was raised in southern England.", +] +log(fmt.format("OpenAIEmbeddingFunction Usage")) + +ef_openai = OpenAIEmbeddingFunction(api_key="sk-your-api-key") +embs_openai = ef_openai(docs) +log(f"Dimension: {ef_openai.dim} Embedding Shape: {embs_openai[0].shape}") + +# ----------------------------------------------------------------------------- +# BGEM3EmbeddingFunction usage +log(fmt.format("BGEM3EmbeddingFunction Usage")) +ef_bge = BGEM3EmbeddingFunction(device="cpu", use_fp16=False) +embs_bge = ef_bge(docs) +log("Embedding Shape: {} Dimension: {}".format(embs_bge["dense"][0].shape, ef_bge.dim)) + +# ----------------------------------------------------------------------------- +# SentenceTransformerEmbeddingFunction usage +log(fmt.format("SentenceTransformerEmbeddingFunction Usage")) +ef_sentence_transformer = SentenceTransformerEmbeddingFunction(device="cpu") +embs_sentence_transformer = ef_sentence_transformer(docs) +log( + "Embedding Shape: {} Dimension: {}".format( + embs_sentence_transformer[0].shape, ef_sentence_transformer.dim + ) +) + +# ----------------------------------------------------------------------------- +# BM25EmbeddingFunction usage +log(fmt.format("BM25EmbeddingFunction Usage")) +ef_bm25 = BM25EmbeddingFunction() +ef_bm25.load() +embs_bm25 = ef_bm25.encode_documents(docs) +log(f"Embedding Shape: {embs_bm25[:, [0]].shape} Dimension: {ef_bm25.dim}") + +# ----------------------------------------------------------------------------- +# SpladeEmbeddingFunction usage +log(fmt.format("SpladeEmbeddingFunction Usage")) +ef_splade = SpladeEmbeddingFunction(device="cpu") +embs_splade = ef_splade(["Hello world", "Hello world2"]) +log(f"Embedding Shape: {embs_splade[:, [0]].shape} Dimension: {ef_splade.dim}") + +# ----------------------------------------------------------------------------- +log(fmt.format("Demonstrations Finished")) diff --git a/examples/non_ascii_encode.py b/examples/non_ascii_encode.py new file mode 100644 index 000000000..a8ee76b06 --- /dev/null +++ b/examples/non_ascii_encode.py @@ -0,0 +1,35 @@ +import numpy as np +from pymilvus import MilvusClient, DataType + +dimension = 128 +collection_name = "books" +client = MilvusClient("http://localhost:19530") +client.drop_collection(collection_name) + +schema = client.create_schema(auto_id=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dimension) +schema.add_field("info", DataType.JSON) + +index_params = client.prepare_index_params("embeddings", metric_type="L2") +client.create_collection(collection_name, schema=schema, index_params=index_params) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"embeddings": rng.random((1, dimension))[0], + "info": {"title": "Lord of the Flies", "author": "William Golding"}}, + + {"embeddings": rng.random((1, dimension))[0], + "info": {"作者": "J.D.塞林格", "title": "麦田里的守望者", }}, + + {"embeddings": rng.random((1, dimension))[0], + "info": {"Título": "Cien años de soledad", "autor": "Gabriel García Márquez"}}, +] + +client.insert(collection_name, rows) +result = client.query(collection_name, filter="info['作者'] == 'J.D.塞林格' or info['Título'] == 'Cien años de soledad'", + output_fields=["info"], + consistency_level="Strong") + +for hit in result: + print(f"hit: {hit}") diff --git a/examples/old_style_example.py b/examples/old_style_example.py deleted file mode 100644 index abdbc333c..000000000 --- a/examples/old_style_example.py +++ /dev/null @@ -1,150 +0,0 @@ -import random - -from pymilvus import Milvus, DataType - -# This example shows how to: -# 1. connect to Milvus server -# 2. create a collection -# 3. insert entities -# 4. create index -# 5. search - -_HOST = '127.0.0.1' -_PORT = '19530' - -# Const names -_COLLECTION_NAME = 'demo' -_ID_FIELD_NAME = 'id_field' -_VECTOR_FIELD_NAME = 'float_vector_field' - -# Vector parameters -_DIM = 128 -_INDEX_FILE_SIZE = 32 # max file size of stored index - -# Index parameters -_METRIC_TYPE = 'L2' -_INDEX_TYPE = 'IVF_FLAT' -_NLIST = 1024 -_NPROBE = 16 -_TOPK = 10 - -# Create milvus client instance -milvus = Milvus(_HOST, _PORT) - - -def create_collection(name): - id_field = { - "name": _ID_FIELD_NAME, - "type": DataType.INT64, - "auto_id": True, - "is_primary": True, - } - vector_field = { - "name": _VECTOR_FIELD_NAME, - "type": DataType.FLOAT_VECTOR, - "params": {"dim": _DIM}, - } - fields = {"fields": [id_field, vector_field]} - - milvus.create_collection(collection_name=name, fields=fields) - print("collection created:", name) - - -def drop_collection(name): - if milvus.has_collection(name): - milvus.drop_collection(name) - print("collection dropped:", name) - - -def list_collections(): - collections = milvus.list_collections() - print("list collection:") - print(collections) - - -def get_collection_stats(name): - stats = milvus.get_collection_stats(name) - print("collection stats:") - print(stats) - - -def insert(name, num, dim): - vectors = [[random.random() for _ in range(dim)] for _ in range(num)] - entities = [{"name": _VECTOR_FIELD_NAME, "type": DataType.FLOAT_VECTOR, "values": vectors}] - ids = milvus.insert(name, entities) - return ids, vectors - - -def flush(name): - milvus.flush([name]) - - -def create_index(name, field_name): - index_param = { - "metric_type": _METRIC_TYPE, - "index_type": _INDEX_TYPE, - "params": {"nlist": _NLIST} - } - milvus.create_index(name, field_name, index_param) - print("Create index: {}".format(index_param)) - - -def drop_index(name, field_name): - milvus.drop_index(name, field_name) - print("Drop index:", field_name) - - -def load_collection(name): - milvus.load_collection(name) - - -def release_collection(name): - milvus.release_collection(name) - - -def search(name, vector_field, search_vectors, ids): - nq = len(search_vectors) - search_params = {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}} - results = milvus.search(name, search_vectors, vector_field, param=search_params, limit=_TOPK) - for i in range(nq): - if results[i][0].distance == 0.0 or results[i][0].id == ids[0]: - print("OK! search results: ", results[i][0].entity) - else: - print("FAIL! search results: ", results[i][0].entity) - - -def main(): - name = _COLLECTION_NAME - vector_field = _VECTOR_FIELD_NAME - - drop_collection(name) - create_collection(name) - - # show collections - list_collections() - - # generate 10000 vectors with 128 dimension - ids, vectors = insert(name, 10000, _DIM) - - # flush - flush(name) - - # show row_count - get_collection_stats(name) - - # create index - create_index(name, vector_field) - - # load - load_collection(name) - - # search - search(name, vector_field, vectors[:10], ids) - - drop_index(name, vector_field) - release_collection(name) - drop_collection(name) - - -if __name__ == '__main__': - main() diff --git a/examples/old_style_example_distance.py b/examples/old_style_example_distance.py deleted file mode 100644 index 6ddca1d72..000000000 --- a/examples/old_style_example_distance.py +++ /dev/null @@ -1,245 +0,0 @@ -import random -import sys -import math -import time -import numpy as np - -from pymilvus import Milvus, DataType - -# This example shows how to use milvus to calculate vectors distance - -_HOST = '127.0.0.1' -_PORT = '19530' - -# Create milvus client instance -milvus = Milvus(_HOST, _PORT) - -_PRECISION = 1e-3 - - -def gen_float_vectors(num, dim): - vec_list = [[random.random() for _ in range(dim)] for _ in range(num)] - return vec_list - - -def gen_binary_vectors(num, dim): - zero_fill = 0 - if dim % 8 > 0: - zero_fill = 8 - dim % 8 - binary_vectors = [] - raw_vectors = [] - for i in range(num): - raw_vector = [random.randint(0, 1) for i in range(dim)] - for k in range(zero_fill): - raw_vector.append(0) - raw_vectors.append(raw_vector) - binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist())) - return binary_vectors, raw_vectors - - -def l2_distance(vec_l, vec_r, sqrt=False): - if len(vec_l) != len(vec_r): - return -1.0 - - dist = 0.0 - for i in range(len(vec_l)): - dist = dist + math.pow(vec_l[i] - vec_r[i], 2) - if sqrt: - dist = math.sqrt(dist) - return dist - - -def ip_distance(vec_l, vec_r): - if len(vec_l) != len(vec_r): - return -1.0 - - dist = 0.0 - for i in range(len(vec_l)): - dist = dist + vec_l[i] * vec_r[i] - return dist - - -def calc_float_distance(l_count, r_count, dim, metric): - vectors_l = gen_float_vectors(l_count, dim) - vectors_r = gen_float_vectors(r_count, dim) - - op_l = {"float_vectors": vectors_l} - op_r = {"float_vectors": vectors_r} - - sqrt = True - params = {"metric_type": metric, "sqrt": sqrt} - time_start = time.time() - results = milvus.calc_distance(vectors_left=op_l, vectors_right=op_r, params=params) - time_end = time.time() - print(f"{metric} distance(l_count {l_count}, r_count {r_count}, dim {dim}), time cost {(time_end-time_start)*1000} ms") - print(f"The top 3 result: {results[:3]}") - if len(results) != l_count * r_count: - print("Incorrect results returned by calc_distance()") - - all_correct = True - for i in range(l_count): - vec_l = vectors_l[i] - for j in range(r_count): - vec_r = vectors_r[j] - dist_1 = l2_distance(vec_l, vec_r, sqrt) if metric == "L2" else ip_distance(vec_l, vec_r) - dist_2 = results[i * r_count + j] - if math.fabs(dist_1 - dist_2) > _PRECISION: - print("Incorrect result", dist_1, "vs", dist_2) - all_correct = False - - if all_correct: - print("All distance are correct\n") - - -def hamming_distance(vec_l, vec_r): - if len(vec_l) != len(vec_r): - return -1 - - hamming = 0 - for i in range(len(vec_l)): - if vec_l[i] != vec_r[i]: - hamming = hamming + 1 - return hamming - - -def tanimoto_distance(vec_l, vec_r, dim): - if len(vec_l) != len(vec_r): - return -1 - - hamming = hamming_distance(vec_l, vec_r) - same_bits = dim - hamming - return same_bits / (dim * 2 - same_bits) - - -def calc_binary_distance(l_count, r_count, dim, metric): - vectors_l, raw_l = gen_binary_vectors(l_count, dim) - vectors_r, raw_r = gen_binary_vectors(r_count, dim) - - op_l = {"bin_vectors": vectors_l} - op_r = {"bin_vectors": vectors_r} - - params = {"metric_type": metric, "dim": dim} - time_start = time.time() - results = milvus.calc_distance(vectors_left=op_l, vectors_right=op_r, params=params) - time_end = time.time() - print(f"{metric} distance(l_count {l_count}, r_count {r_count}, dim {dim}), time cost {(time_end-time_start)*1000} ms") - print(f"The top 3 result: {results[:3]}") - if len(results) != l_count * r_count: - print("Incorrect results returned by calc_distance()") - - all_correct = True - for i in range(l_count): - vec_l = raw_l[i] - for j in range(r_count): - vec_r = raw_r[j] - dist_1 = hamming_distance(vec_l, vec_r) if metric == "HAMMING" else tanimoto_distance(vec_l, vec_r, dim) - dist_2 = results[i * r_count + j] - if math.fabs(dist_1 - dist_2) > _PRECISION: - print("Incorrect result", dist_1, "vs", dist_2) - all_correct = False - - if all_correct: - print("All distance are correct\n") - - -def input_vectors_to_calc(): - calc_float_distance(100, 50, 256, "L2") - calc_float_distance(5, 1000, 256, "IP") - - calc_binary_distance(10, 20, 99, "HAMMING") - calc_binary_distance(5, 100, 1, "HAMMING") - calc_binary_distance(100, 15, 16, "HAMMING") - calc_binary_distance(10, 10, 7, "TANIMOTO") - calc_binary_distance(500, 5, 1, "TANIMOTO") - calc_binary_distance(50, 150, 16, "TANIMOTO") - - -def create_collection(collection, vec_field, dim): - id_field = { - "name": "id", - "type": DataType.INT64, - "auto_id": True, - "is_primary": True, - } - vector_field = { - "name": vec_field, - "type": DataType.FLOAT_VECTOR, - "params": {"dim": dim}, - } - fields = {"fields": [id_field, vector_field]} - - milvus.create_collection(collection_name=collection, fields=fields) - print("collection created:", collection) - - -def drop_collection(collection): - if milvus.has_collection(collection): - milvus.drop_collection(collection) - print("collection dropped:", collection) - - -def insert(collection, vec_field, num, dim): - vectors = [[random.random() for _ in range(dim)] for _ in range(num)] - entities = [{"name": vec_field, "type": DataType.FLOAT_VECTOR, "values": vectors}] - ids = milvus.insert(collection, entities) - print("insert", len(list(ids._primary_keys)), "vectors into", collection) - return list(ids._primary_keys), vectors - - -def flush(collection): - milvus.flush([collection]) - print("collection flushed:", collection) - - -def load_collection(collection): - milvus.load_collection(collection) - print("collection loaded:", collection) - - -def insert_vectors_to_calc(): - collection_name = "test" - vec_field = "vec" - dim = 64 - drop_collection(collection_name) - create_collection(collection_name, vec_field, dim) - - l_count = 10 - db_ids, db_vectors = insert(collection_name, vec_field, l_count, dim) - flush(collection_name) - load_collection(collection_name) - - r_count = 25 - vectors_r = gen_float_vectors(r_count, dim) - - op_l = {"ids": db_ids, "collection": collection_name, "field": vec_field} - op_r = {"float_vectors": vectors_r} - - metric = "L2" - sqrt = True - params = {"metric_type": metric, "sqrt": sqrt} - time_start = time.time() - results = milvus.calc_distance(vectors_left=op_l, vectors_right=op_r, params=params) - time_end = time.time() - print(f"{metric} distance(l_count {l_count}, r_count {r_count}, dim {dim}), time cost {(time_end-time_start)*1000} ms") - print(f"The top 3 result: {results[:3]}") - if len(results) != l_count * r_count: - print("Incorrect results returned by calc_distance()") - - all_correct = True - for i in range(l_count): - vec_l = db_vectors[i] - for j in range(r_count): - vec_r = vectors_r[j] - dist_1 = l2_distance(vec_l, vec_r, sqrt) if metric == "L2" else ip_distance(vec_l, vec_r) - dist_2 = results[i * r_count + j] - if math.fabs(dist_1 - dist_2) > _PRECISION: - print("Incorrect result", dist_1, "vs", dist_2) - all_correct = False - - if all_correct: - print("All distance are correct\n") - - -if __name__ == '__main__': - input_vectors_to_calc() - insert_vectors_to_calc() diff --git a/examples/old_style_example_index.py b/examples/old_style_example_index.py deleted file mode 100644 index 3ca3487c6..000000000 --- a/examples/old_style_example_index.py +++ /dev/null @@ -1,155 +0,0 @@ -""" -This is an example of creating index - -We will be using films.csv file, You can obtain it from here -(https://raw.githubusercontent.com/milvus-io/pymilvus/0.3.0/examples/films.csv) -There are 4 coloumns in films.csv, they are `id`, `title`, `release_year` and `embedding`, all -the data are from MovieLens `ml-latest-small` data except id and embedding, those two columns are fake values. - -We will be using `films.csv` to demenstrate how can we build index and search by index on Milvus. -We assuming you have read `example.py` and have a basic conception about how to communicate with Milvus using -pymilvus - -This example is runable for Milvus(0.11.x) and pymilvus(0.3.x). -""" -import csv -import random -from pprint import pprint - -from pymilvus import Milvus, DataType - -_HOST = '127.0.0.1' -_PORT = '19530' -client = Milvus(_HOST, _PORT) - -collection_name = 'demo_index' -if collection_name in client.list_collections(): - client.drop_collection(collection_name) - -collection_param = { - "fields": [ - {"name": "id", "type": DataType.INT64, "is_primary": True}, - {"name": "release_year", "type": DataType.INT64}, - {"name": "embedding", "type": DataType.FLOAT_VECTOR, "params": {"dim": 8}}, - ], -} - -client.create_collection(collection_name, collection_param) - -# ------ -# Basic create index: -# Now that we have a collection in Milvus with `segment_row_limit` 4096, we can create index or -# insert entities. -# -# We can execute `create_index` BEFORE we insert any entites or AFTER. However Milvus won't actually -# start build index task if the segment row count is smaller than `segment_row_limit`. So if we want -# to make Milvus build index right away, we need to insert number of entities larger than -# `segment_row_limit` -# -# We are going to use data in `films.csv` so you can checkout the structure. And we need to group -# data with same fields together, so here is a example of how we obtain the data in files and transfer -# them into what we need. -# ------ - -ids = [] # ids -titles = [] # titles -release_years = [] # release year -embeddings = [] # embeddings -films = [] -with open('films.csv', 'r') as csvfile: - reader = csv.reader(csvfile) - films = [film for film in reader] - -for film in films: - ids.append(int(film[0])) - titles.append(film[1]) - release_years.append(int(film[2])) - embeddings.append(list(map(float, film[3][1:][:-1].split(',')))) - -hybrid_entities = [ - {"name": "id", "values": ids, "type": DataType.INT64}, - {"name": "release_year", "values": release_years, "type": DataType.INT64}, - {"name": "embedding", "values": embeddings, "type": DataType.FLOAT_VECTOR}, -] - -# ------ -# Basic insert: -# After preparing the data, we are going to insert them into our collection. -# The number of films inserted should be 8657. -# ------ -ids = client.insert(collection_name, hybrid_entities) - -client.flush([collection_name]) -after_flush_counts = client.get_collection_stats(collection_name) -print(" > There are {} films in collection `{}` after flush".format(after_flush_counts, collection_name)) - -# ------ -# Basic create index: -# Now that we have insert all the films into Milvus, we are going to build index with these datas. -# -# While build index, we have to indicate which `field` to build index for, the `index_type`, -# `metric_type` and params for the specific index type. In our case, we want to build a `IVF_FLAT` -# index, so the specific params are "nlist". See pymilvus documentation -# (https://milvus-io.github.io/milvus-sdk-python/pythondoc/v0.3.0/index.html) for `index_type` we -# support and the params accordingly -# -# If there are already index for a collection and you run `create_index` with different params the -# older index will be replaced by new one. -# ------ -client.create_index(collection_name, "embedding", - {"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 100}}) - -# ------ -# Basic create index: -# We can get the detail of the index by `describe_collection` -# ------ -info = client.describe_collection(collection_name) -pprint(info) - -# ------ -# Basic load collection: -# Before search, we need to load collection data into memory. -# ------ -client.load_collection(collection_name) - -# ------ -# Basic search with expressions: -# If we want to use index, the specific index params need to be provided, in our case, the "params" -# should be "nprobe", if no "params" given, Milvus will complain about it and raise a exception. -# ------ -embedding2search = [[random.random() for _ in range(8)] for _ in range(1)] -search_param = { - "data": embedding2search, - "anns_field": "embedding", - "param": {"metric_type": "L2", "params": {"nprobe": 8}}, - "limit": 3, - "output_fields": ["release_year"], - "expression": "release_year in [1995, 2002]", -} - -# ------ -# Basic hybrid search entities -# ------ -results = client.search(collection_name, **search_param) -for entities in results: - for topk_film in entities: - current_entity = topk_film.entity - print("==") - print(f"- id: {topk_film.id}") - print(f"- title: {titles[topk_film.id]}") - print(f"- distance: {topk_film.distance}") - print(f"- release_year: {current_entity.release_year}") - -# ------ -# Basic delete index: -# You can drop index we create -# ------ -client.drop_index(collection_name, "embedding") - -if collection_name in client.list_collections(): - client.drop_collection(collection_name) - -# ------ -# Summary: -# Now we've went through some basic build index operations, hope it's helpful! -# ------ diff --git a/examples/old_style_query.py b/examples/old_style_query.py deleted file mode 100644 index 0a031cd9f..000000000 --- a/examples/old_style_query.py +++ /dev/null @@ -1,62 +0,0 @@ -import random - -from pymilvus import Milvus, DataType - -if __name__ == "__main__": - c = Milvus("localhost", "19530") - - collection_name = f"test_{random.randint(10000, 99999)}" - - c.create_collection(collection_name, {"fields": [ - { - "name": "f1", - "type": DataType.FLOAT_VECTOR, - "metric_type": "L2", - "params": {"dim": 4}, - "indexes": [{"metric_type": "L2"}] - }, - { - "name": "age", - "type": DataType.FLOAT, - }, - { - "name": "id", - "type": DataType.INT64, - "auto_id": True, - "is_primary": True, - } - ], - }, orm=True) - - assert c.has_collection(collection_name) - - ids = c.insert(collection_name, [ - {"name": "f1", "type": DataType.FLOAT_VECTOR, "values": [[1.1, 2.2, 3.3, 4.4], [5.5, 6.6, 7.7, 8.8]]}, - {"name": "age", "type": DataType.FLOAT, "values": [3.45, 8.9]} - ], orm=True) - - c.flush([collection_name]) - - c.load_collection(collection_name) - - ############################################################# - search_params = {"metric_type": "L2", "params": {"nprobe": 1}} - - results = c.search(collection_name, [[1.1, 2.2, 3.3, 4.4]], - "f1", param=search_params, limit=2, output_fields=["id"]) - - print("search results: ", results[0][0].entity, " + ", results[0][1].entity) - # - # print("Test entity.get: ", results[0][0].entity.get("age")) - # print("Test entity.value_of_field: ", results[0][0].entity.value_of_field("age")) - # print("Test entity.fields: ", results[0][0].entity.fields) - ############################################################# - - ids_expr = ",".join(str(x) for x in ids.primary_keys) - - expr = "id in [ " + ids_expr + " ] " - - print(expr) - - res = c.query(collection_name, expr) - print(res) diff --git a/examples/orm_deprecated/bitmap_index_example.py b/examples/orm_deprecated/bitmap_index_example.py new file mode 100644 index 000000000..a1c228f1b --- /dev/null +++ b/examples/orm_deprecated/bitmap_index_example.py @@ -0,0 +1,52 @@ +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +DIMENSION = 8 +COLLECTION_NAME = "books" +connections.connect("default", host="localhost", port="19530") + +fields = [ + FieldSchema(name='id', dtype=DataType.INT64, is_primary=True), + FieldSchema(name='title', dtype=DataType.VARCHAR, max_length=200), + FieldSchema(name='type', dtype=DataType.VARCHAR, max_length=200), + FieldSchema(name='embeddings', dtype=DataType.FLOAT_VECTOR, dim=DIMENSION), +] +schema = CollectionSchema(fields=fields, enable_dynamic_field=True) +collection = Collection(name=COLLECTION_NAME, schema=schema) + +data_rows = [ + { + "id": 1, + "title": "Lord of the Flies", + "type": "novel", + "embeddings": [0.64, 0.44, 0.13, 0.47, 0.74, 0.03, 0.32, 0.6], + }, + { + "id": 2, + "title": "Chinese-English dictionary", + "type": "reference", + "embeddings": [0.9, 0.45, 0.18, 0.43, 0.4, 0.4, 0.7, 0.24], + }, + { + "id": 3, + "title": "My Childhood", + "type": "autobiographical", + "embeddings": [0.43, 0.57, 0.43, 0.88, 0.84, 0.69, 0.27, 0.98], + }, +] + +collection.insert(data_rows) +collection.create_index( + "embeddings", {"index_type": "FLAT", "metric_type": "L2"}) + +# create bitmap index for scalar fields. +collection.create_index( + "type", {"index_type": "BITMAP"}) + +collection.load() + +res = collection.query(expr='type in ["reference"]', output_fields=["id", "type"]) +print(res) diff --git a/examples/orm_deprecated/bulk_import/data_gengerator.py b/examples/orm_deprecated/bulk_import/data_gengerator.py new file mode 100644 index 000000000..c95a18984 --- /dev/null +++ b/examples/orm_deprecated/bulk_import/data_gengerator.py @@ -0,0 +1,68 @@ +import random +import tensorflow as tf +import numpy as np + + +# optional input for binary vector: +# 1. list of int such as [1, 0, 1, 1, 0, 0, 1, 0] +# 2. numpy array of uint8 +def gen_binary_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.randint(0, 1) for i in range(dim)] + if to_numpy_arr: + return np.packbits(raw_vector, axis=-1) + return raw_vector + + +# optional input for float vector: +# 1. list of float such as [0.56, 1.859, 6.55, 9.45] +# 2. numpy array of float32 +def gen_float_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.random() for _ in range(dim)] + if to_numpy_arr: + return np.array(raw_vector, dtype="float32") + return raw_vector + + +# optional input for bfloat16 vector: +# 1. list of float such as [0.56, 1.859, 6.55, 9.45] +# 2. numpy array of bfloat16 +def gen_bf16_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.random() for _ in range(dim)] + if to_numpy_arr: + return tf.cast(raw_vector, dtype=tf.bfloat16).numpy() + return raw_vector + + +# optional input for float16 vector: +# 1. list of float such as [0.56, 1.859, 6.55, 9.45] +# 2. numpy array of float16 +def gen_fp16_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.random() for _ in range(dim)] + if to_numpy_arr: + return np.array(raw_vector, dtype=np.float16) + return raw_vector + + +# optional input for sparse vector: +# only accepts dict like {2: 13.23, 45: 0.54} or {"indices": [1, 2], "values": [0.1, 0.2]} +# note: no need to sort the keys +def gen_sparse_vector(pair_dict: bool): + raw_vector = {} + dim = random.randint(2, 20) + if pair_dict: + raw_vector["indices"] = [i for i in range(dim)] + raw_vector["values"] = [random.random() for _ in range(dim)] + else: + for i in range(dim): + raw_vector[i] = random.random() + return raw_vector + + +# optional input for int8 vector: +# 1. list of int8 such as [-6, 18, 65, -94] +# 2. numpy array of int8 +def gen_int8_vector(to_numpy_arr: bool, dim: int): + raw_vector = [random.randint(-128, 127) for _ in range(dim)] + if to_numpy_arr: + return np.array(raw_vector, dtype=np.int8) + return raw_vector diff --git a/examples/orm_deprecated/bulk_import/example_bulkinsert_csv.py b/examples/orm_deprecated/bulk_import/example_bulkinsert_csv.py new file mode 100644 index 000000000..f8effcb1e --- /dev/null +++ b/examples/orm_deprecated/bulk_import/example_bulkinsert_csv.py @@ -0,0 +1,403 @@ +import random +import json +import csv +import time +import os + +from minio import Minio +from minio.error import S3Error + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, + BulkInsertState, +) + + +LOCAL_FILES_PATH = "/tmp/milvus_bulkinsert" + +# Milvus service address +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo_bulk_insert_csv' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' +_JSON_FIELD_NAME = "json_field" +_VARCHAR_FIELD_NAME = "varchar_field" +_DYNAMIC_FIELD_NAME = "$meta" # dynamic field, the internal name is "$meta", enable_dynamic_field=True + +# minio +DEFAULT_BUCKET_NAME = "a-bucket" +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" + +# Vector field parameter +_DIM = 128 + +# to generate increment ID +id_start = 1 + +# Create a Milvus connection +def create_connection(): + retry = True + while retry: + try: + print(f"\nCreate connection...") + connections.connect(host=_HOST, port=_PORT) + retry = False + except Exception as e: + print("Cannot connect to Milvus. Error: " + str(e)) + print(f"Cannot connect to Milvus. Trying to connect Again. Sleeping for: 1") + time.sleep(1) + + print(f"\nList connections:") + print(connections.list_connections()) + +# Create a collection +def create_collection(has_partition_key: bool): + field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=False) + field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + field3 = FieldSchema(name=_JSON_FIELD_NAME, dtype=DataType.JSON) + # if has partition key, we use this varchar field as partition key field + field4 = FieldSchema(name=_VARCHAR_FIELD_NAME, dtype=DataType.VARCHAR, max_length=256, is_partition_key=has_partition_key) + schema = CollectionSchema(fields=[field1, field2, field3, field4], enable_dynamic_field=True) + if has_partition_key: + collection = Collection(name=_COLLECTION_NAME, schema=schema, num_partitions=10) + else: + collection = Collection(name=_COLLECTION_NAME, schema=schema) + print("\nCollection created:", _COLLECTION_NAME) + return collection + +# Test existence of a collection +def has_collection(): + return utility.has_collection(_COLLECTION_NAME) + + +# Drop a collection in Milvus +def drop_collection(): + collection = Collection(_COLLECTION_NAME) + collection.drop() + print("\nDrop collection:", _COLLECTION_NAME) + + +# List all collections in Milvus +def list_collections(): + print("\nList collections:") + print(utility.list_collections()) + +# Create a partition +def create_partition(collection, partition_name): + collection.create_partition(partition_name=partition_name) + print("\nPartition created:", partition_name) + return collection.partition(partition_name) + +def gen_csv_rowbased(num, path, partition_name, sep=","): + global id_start + header = [_ID_FIELD_NAME, _JSON_FIELD_NAME, _VECTOR_FIELD_NAME, _VARCHAR_FIELD_NAME, _DYNAMIC_FIELD_NAME] + rows = [] + for i in range(num): + rows.append([ + id_start, # id field + json.dumps({"Number": id_start, "Name": "book_"+str(id_start)}), # json field + [round(random.random(), 6) for _ in range(_DIM)], # vector field + "{}_{}".format(partition_name, id_start) if partition_name is not None else "description_{}".format(id_start), # varchar field + json.dumps({"dynamic_field": id_start}), # no field matches this value, this value will be put into dynamic field + ]) + id_start = id_start + 1 + data = [header] + rows + with open(path, "w") as f: + writer = csv.writer(f, delimiter=sep) + for row in data: + writer.writerow(row) + + +def bulk_insert_rowbased(row_count_per_file, file_count, partition_name = None): + # make sure the files folder is created + os.makedirs(name=LOCAL_FILES_PATH, exist_ok=True) + + task_ids = [] + for i in range(file_count): + data_folder = os.path.join(LOCAL_FILES_PATH, "csv_{}".format(i)) + os.makedirs(name=data_folder, exist_ok=True) + file_path = os.path.join(data_folder, "csv_{}.csv".format(i)) + print("Generate csv file:", file_path) + sep ="\t" + gen_csv_rowbased(row_count_per_file, file_path, partition_name, sep) + + ok, remote_files = upload(data_folder=data_folder) + if ok: + print("Import csv file:", remote_files) + task_id = utility.do_bulk_insert(collection_name=_COLLECTION_NAME, + partition_name=partition_name, + files=remote_files, + sep=sep) + task_ids.append(task_id) + + return wait_tasks_competed(task_ids) + +# Wait all bulkinsert tasks to be a certain state +# return the states of all the tasks, including failed task +def wait_tasks_to_state(task_ids, state_code): + wait_ids = task_ids + states = [] + while True: + time.sleep(2) + temp_ids = [] + for id in wait_ids: + state = utility.get_bulk_insert_state(task_id=id) + if state.state == BulkInsertState.ImportFailed or state.state == BulkInsertState.ImportFailedAndCleaned: + print(state) + print("The task", state.task_id, "failed, reason:", state.failed_reason) + continue + + if state.state >= state_code: + states.append(state) + continue + + temp_ids.append(id) + + wait_ids = temp_ids + if len(wait_ids) == 0: + break + print("Wait {} tasks to be state: {}. Next round check".format(len(wait_ids), BulkInsertState.state_2_name.get(state_code, "unknown"))) + + return states + +# If the state of bulkinsert task is BulkInsertState.ImportCompleted, that means the data file has been parsed and data has been persisted, +# some segments have been created and waiting for index. +# ImportCompleted state doesn't mean the data is queryable, to query the data, you need to wait until the segment is +# indexed successfully and loaded into memory. +def wait_tasks_competed(task_ids): + print("=========================================================================================================") + states = wait_tasks_to_state(task_ids, BulkInsertState.ImportCompleted) + complete_count = 0 + for state in states: + if state.state == BulkInsertState.ImportCompleted: + complete_count = complete_count + 1 + # print(state) + # if you want to get the auto-generated primary keys, use state.ids to fetch + # print("Auto-generated ids:", state.ids) + + print("{} of {} tasks have successfully generated segments, able to be compacted and indexed as normal".format(complete_count, len(task_ids))) + print("=========================================================================================================\n") + return states + +# List all bulkinsert tasks, including pending tasks, working tasks and finished tasks. +# the parameter 'limit' is: how many latest tasks should be returned, if the limit<=0, all the tasks will be returned +def list_all_bulk_insert_tasks(collection_name=_COLLECTION_NAME, limit=0): + tasks = utility.list_bulk_insert_tasks(limit=limit, collection_name=collection_name) + print("=========================================================================================================") + print("List bulkinsert tasks with limit", limit) + pending = 0 + started = 0 + persisted = 0 + completed = 0 + failed = 0 + for task in tasks: + print(task) + if task.state == BulkInsertState.ImportPending: + pending = pending + 1 + elif task.state == BulkInsertState.ImportStarted: + started = started + 1 + elif task.state == BulkInsertState.ImportPersisted: + persisted = persisted + 1 + elif task.state == BulkInsertState.ImportCompleted: + completed = completed + 1 + elif task.state == BulkInsertState.ImportFailed: + failed = failed + 1 + print("There are {} bulkinsert tasks: {} pending, {} started, {} persisted, {} completed, {} failed" + .format(len(tasks), pending, started, persisted, completed, failed)) + print("=========================================================================================================\n") + +# Get collection row count. +def get_entity_num(collection): + print("=========================================================================================================") + print("The number of entity:", collection.num_entities) + +# Specify an index type +def create_index(collection): + print("Start Creating index IVF_FLAT") + index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, + } + collection.create_index(_VECTOR_FIELD_NAME, index) + +# Load collection data into memory. If collection is not loaded, the search() and query() methods will return error. +def load_collection(collection): + collection.load() + +# Release collection data to free memory. +def release_collection(collection): + collection.release() + +# ANN search +def search(collection, search_vector, expr = None, consistency_level = "Eventually"): + search_param = { + "expr": expr, + "data": [search_vector], + "anns_field": _VECTOR_FIELD_NAME, + "param": {"metric_type": "L2", "params": {"nprobe": 10}}, + "limit": 5, + "output_fields": [_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _DYNAMIC_FIELD_NAME], + "consistency_level": consistency_level, + } + print("search..." if expr is None else "hybrid search...") + results = collection.search(**search_param) + print("=========================================================================================================") + result = results[0] + for j, res in enumerate(result): + print(f"\ttop{j}: {res}") + print("\thits count:", len(result)) + print("=========================================================================================================\n") + +# Delete entities +def delete(collection, ids): + print("=========================================================================================================\n") + print("Delete these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + collection.delete(expr=expr) + print("=========================================================================================================\n") + +# Retrieve entities +def retrieve(collection, ids): + print("=========================================================================================================") + print("Retrieve these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + result = collection.query(expr=expr, output_fields=[_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _VECTOR_FIELD_NAME, _DYNAMIC_FIELD_NAME]) + for item in result: + print(item) + print("=========================================================================================================\n") + return result + +# Upload data files to minio +def upload(data_folder: str, + bucket_name: str=DEFAULT_BUCKET_NAME)->(bool, list): + if not os.path.exists(data_folder): + print("Data path '{}' doesn't exist".format(data_folder)) + return False, [] + + remote_files = [] + try: + print("Prepare upload files") + minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, secure=False) + found = minio_client.bucket_exists(bucket_name) + if not found: + print("MinIO bucket '{}' doesn't exist".format(bucket_name)) + return False, [] + + remote_data_path = "milvus_bulkinsert" + def upload_files(folder:str): + for parent, dirnames, filenames in os.walk(folder): + if parent is folder: + for filename in filenames: + ext = os.path.splitext(filename) + if len(ext) != 2 or (ext[1] != ".json" and ext[1] != ".npy" and ext[1] != ".csv"): + continue + local_full_path = os.path.join(parent, filename) + minio_file_path = os.path.join(remote_data_path, os.path.basename(folder), filename) + minio_client.fput_object(bucket_name, minio_file_path, local_full_path) + print("Upload file '{}' to '{}'".format(local_full_path, minio_file_path)) + remote_files.append(minio_file_path) + for dir in dirnames: + upload_files(os.path.join(parent, dir)) + + upload_files(data_folder) + + except S3Error as e: + print("Failed to connect MinIO server {}, error: {}".format(MINIO_ADDRESS, e)) + return False, [] + + print("Successfully upload files: {}".format(remote_files)) + return True, remote_files + +def main(has_partition_key: bool): + # create a connection + create_connection() + + # drop collection if the collection exists + if has_collection(): + drop_collection() + + # create collection + collection = create_collection(has_partition_key) + + # specify an index type + create_index(collection) + + + # load data to memory + load_collection(collection) + + # show collections + list_collections() + + # do bulk_insert, wait all tasks finish persisting + row_count_per_file = 100 + if has_partition_key: + # automatically partitioning + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=2) + else: + # bulklinsert into default partition + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=1) + + # create a partition, bulkinsert into the partition + a_partition = "part_1" + create_partition(collection, a_partition) + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=1, partition_name=a_partition) + + # list all tasks + list_all_bulk_insert_tasks() + + # get the number of entities + get_entity_num(collection) + + print("Waiting index complete and refresh segments list to load...") + utility.wait_for_index_building_complete(_COLLECTION_NAME) + collection.load(_refresh = True) + + # pick some entities + pick_ids = [50, row_count_per_file + 99] + id_vectors = retrieve(collection, pick_ids) + + # search the picked entities, they are in result at the top0 + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 of search result, they are equal") + search(collection, vector) + + # delete the picked entities + delete(collection, pick_ids) + + # search the deleted entities, they are not in result anymore + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 result, they are not equal since the id has been deleted") + # here we use Strong consistency level to do search, because we need to make sure the delete operation is applied + search(collection, vector, consistency_level="Strong") + + # search by filtering the varchar field + vector = [round(random.random(), 6) for _ in range(_DIM)] + search(collection, vector, expr="{} like \"description_33%\"".format(_VARCHAR_FIELD_NAME)) + + # release memory + release_collection(collection) + + # drop collection + drop_collection() + + +if __name__ == '__main__': + # change this value if you want to test bulkinert with partition key + # Note: bulkinsert supports partition key from Milvus v2.2.12 + has_partition_key = False + main(has_partition_key) diff --git a/examples/orm_deprecated/bulk_import/example_bulkinsert_json.py b/examples/orm_deprecated/bulk_import/example_bulkinsert_json.py new file mode 100644 index 000000000..292a59184 --- /dev/null +++ b/examples/orm_deprecated/bulk_import/example_bulkinsert_json.py @@ -0,0 +1,445 @@ +import random +import json +import time +import os + +from minio import Minio +from minio.error import S3Error + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, + BulkInsertState, +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a collection +# 3. create some json files for bulkinsert operation +# 4. call do_bulk_insert() +# 5. wait data to be consumed and indexed +# 6. search + +# To run this example +# 1. start a standalone milvus(version >= v2.2.9) instance locally +# make sure the docker-compose.yml has exposed the minio console: +# minio: +# ...... +# ports: +# - "9000:9000" +# - "9001:9001" +# command: minio server /minio_data --console-address ":9001" +# +# 2. pip3 install minio + +# Local path to generate JSON files +LOCAL_FILES_PATH = "/tmp/milvus_bulkinsert" + +# Milvus service address +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo_bulk_insert_json' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' +_JSON_FIELD_NAME = "json_field" +_VARCHAR_FIELD_NAME = "varchar_field" +_DYNAMIC_FIELD_NAME = "$meta" # dynamic field, the internal name is "$meta", enable_dynamic_field=True + +# minio +DEFAULT_BUCKET_NAME = "a-bucket" +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" + +# Vector field parameter +_DIM = 128 + +# to generate increment ID +id_start = 1 + +# Create a Milvus connection +def create_connection(): + retry = True + while retry: + try: + print(f"\nCreate connection...") + connections.connect(host=_HOST, port=_PORT) + retry = False + except Exception as e: + print("Cannot connect to Milvus. Error: " + str(e)) + print(f"Cannot connect to Milvus. Trying to connect Again. Sleeping for: 1") + time.sleep(1) + + print(f"\nList connections:") + print(connections.list_connections()) + + +# Create a collection +def create_collection(has_partition_key: bool): + field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=False) + field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + field3 = FieldSchema(name=_JSON_FIELD_NAME, dtype=DataType.JSON) + # if has partition key, we use this varchar field as partition key field + field4 = FieldSchema(name=_VARCHAR_FIELD_NAME, dtype=DataType.VARCHAR, max_length=256, is_partition_key=has_partition_key) + schema = CollectionSchema(fields=[field1, field2, field3, field4], enable_dynamic_field=True) + if has_partition_key: + collection = Collection(name=_COLLECTION_NAME, schema=schema, num_partitions=10) + else: + collection = Collection(name=_COLLECTION_NAME, schema=schema) + print("\nCollection created:", _COLLECTION_NAME) + return collection + + +# Test existence of a collection +def has_collection(): + return utility.has_collection(_COLLECTION_NAME) + + +# Drop a collection in Milvus +def drop_collection(): + collection = Collection(_COLLECTION_NAME) + collection.drop() + print("\nDrop collection:", _COLLECTION_NAME) + + +# List all collections in Milvus +def list_collections(): + print("\nList collections:") + print(utility.list_collections()) + +# Create a partition +def create_partition(collection, partition_name): + collection.create_partition(partition_name=partition_name) + print("\nPartition created:", partition_name) + return collection.partition(partition_name) + +# Generate a json file with row-based data. +# The json file must contain a root key "rows", its value is a list, each row must contain a value of each field. +# No need to provide the auto-id field "id_field" since milvus will generate it. +# The row-based json file looks like: +# {"rows": [ +# {"str_field": "row-based_0", "float_vector_field": [0.190, 0.046, 0.143, 0.972, 0.592, 0.238, 0.266, 0.995]}, +# {"str_field": "row-based_1", "float_vector_field": [0.149, 0.586, 0.012, 0.673, 0.588, 0.917, 0.949, 0.944]}, +# ...... +# ] +# } +def gen_json_rowbased(num, path, partition_name): + global id_start + rows = [] + for i in range(num): + rows.append({ + _ID_FIELD_NAME: id_start, # id field + _JSON_FIELD_NAME: json.dumps({"Number": id_start, "Name": "book_"+str(id_start)}), # json field + _VECTOR_FIELD_NAME: [round(random.random(), 6) for _ in range(_DIM)], # vector field + _VARCHAR_FIELD_NAME: "{}_{}".format(partition_name, id_start) if partition_name is not None else "description_{}".format(id_start), # varchar field + "dynamic_{}".format(id_start): id_start, # no field matches this value, this value will be put into dynamic field + }) + id_start = id_start + 1 + + data = { + "rows": rows, + } + with open(path, "w") as json_file: + json.dump(data, json_file) + + +# For row-based files, each file is converted to a task. Each time you can call do_bulk_insert() to insert one file. +# The rootcoord maintains a task list, each idle datanode will receive a task. If no datanode available, the task will +# be put into pending list to wait, the max size of pending list is 32. If new tasks count exceed spare quantity of +# pending list, the do_bulk_insert() method will return error. +# Once a task is finished, the datanode become idle and will receive another task. +# +# By default, the max size of each file is 16GB, this limit is configurable in the milvus.yaml (common.ImportMaxFileSize) +# If a file size is larger than 16GB, the task will fail and you will get error from the "failed_reason" of the task state. +# +# Then, how many segments generated? Let's say the collection's shard number is 2, typically each row-based file +# will be split into 2 segments. So, basically, each task generates segment count is equal to shard number. +# But if a file's data size exceed the segment.maxSize of milvus.yaml, there could be shardNum*2, shardNum*3 segments +# generated, or even more. +def bulk_insert_rowbased(row_count_per_file, file_count, partition_name = None): + # make sure the files folder is created + os.makedirs(name=LOCAL_FILES_PATH, exist_ok=True) + + task_ids = [] + for i in range(file_count): + data_folder = os.path.join(LOCAL_FILES_PATH, "rows_{}".format(i)) + os.makedirs(name=data_folder, exist_ok=True) + file_path = os.path.join(data_folder, "rows_{}.json".format(i)) + print("Generate row-based file:", file_path) + gen_json_rowbased(row_count_per_file, file_path, partition_name) + + ok, remote_files = upload(data_folder=data_folder) + if ok: + print("Import row-based file:", remote_files) + task_id = utility.do_bulk_insert(collection_name=_COLLECTION_NAME, + partition_name=partition_name, + files=remote_files) + task_ids.append(task_id) + + return wait_tasks_competed(task_ids) + +# Wait all bulkinsert tasks to be a certain state +# return the states of all the tasks, including failed task +def wait_tasks_to_state(task_ids, state_code): + wait_ids = task_ids + states = [] + while True: + time.sleep(2) + temp_ids = [] + for id in wait_ids: + state = utility.get_bulk_insert_state(task_id=id) + if state.state == BulkInsertState.ImportFailed or state.state == BulkInsertState.ImportFailedAndCleaned: + print(state) + print("The task", state.task_id, "failed, reason:", state.failed_reason) + continue + + if state.state >= state_code: + states.append(state) + continue + + temp_ids.append(id) + + wait_ids = temp_ids + if len(wait_ids) == 0: + break; + print("Wait {} tasks to be state: {}. Next round check".format(len(wait_ids), BulkInsertState.state_2_name.get(state_code, "unknown"))) + + return states + +# If the state of bulkinsert task is BulkInsertState.ImportCompleted, that means the data file has been parsed and data has been persisted, +# some segments have been created and waiting for index. +# ImportCompleted state doesn't mean the data is queryable, to query the data, you need to wait until the segment is +# indexed successfully and loaded into memory. +def wait_tasks_competed(task_ids): + print("=========================================================================================================") + states = wait_tasks_to_state(task_ids, BulkInsertState.ImportCompleted) + complete_count = 0 + for state in states: + if state.state == BulkInsertState.ImportCompleted: + complete_count = complete_count + 1 + # print(state) + # if you want to get the auto-generated primary keys, use state.ids to fetch + # print("Auto-generated ids:", state.ids) + + print("{} of {} tasks have successfully generated segments, able to be compacted and indexed as normal".format(complete_count, len(task_ids))) + print("=========================================================================================================\n") + return states + +# List all bulkinsert tasks, including pending tasks, working tasks and finished tasks. +# the parameter 'limit' is: how many latest tasks should be returned, if the limit<=0, all the tasks will be returned +def list_all_bulk_insert_tasks(collection_name=_COLLECTION_NAME, limit=0): + tasks = utility.list_bulk_insert_tasks(limit=limit, collection_name=collection_name) + print("=========================================================================================================") + print("List bulkinsert tasks with limit", limit) + pending = 0 + started = 0 + persisted = 0 + completed = 0 + failed = 0 + for task in tasks: + print(task) + if task.state == BulkInsertState.ImportPending: + pending = pending + 1 + elif task.state == BulkInsertState.ImportStarted: + started = started + 1 + elif task.state == BulkInsertState.ImportPersisted: + persisted = persisted + 1 + elif task.state == BulkInsertState.ImportCompleted: + completed = completed + 1 + elif task.state == BulkInsertState.ImportFailed: + failed = failed + 1 + print("There are {} bulkinsert tasks: {} pending, {} started, {} persisted, {} completed, {} failed" + .format(len(tasks), pending, started, persisted, completed, failed)) + print("=========================================================================================================\n") + +# Get collection row count. +def get_entity_num(collection): + print("=========================================================================================================") + print("The number of entity:", collection.num_entities) + +# Specify an index type +def create_index(collection): + print("Start Creating index IVF_FLAT") + index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, + } + collection.create_index(_VECTOR_FIELD_NAME, index) + +# Load collection data into memory. If collection is not loaded, the search() and query() methods will return error. +def load_collection(collection): + collection.load() + +# Release collection data to free memory. +def release_collection(collection): + collection.release() + +# ANN search +def search(collection, search_vector, expr = None, consistency_level = "Eventually"): + search_param = { + "expr": expr, + "data": [search_vector], + "anns_field": _VECTOR_FIELD_NAME, + "param": {"metric_type": "L2", "params": {"nprobe": 10}}, + "limit": 5, + "output_fields": [_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _DYNAMIC_FIELD_NAME], + "consistency_level": consistency_level, + } + print("search..." if expr is None else "hybrid search...") + results = collection.search(**search_param) + print("=========================================================================================================") + result = results[0] + for j, res in enumerate(result): + print(f"\ttop{j}: {res}") + print("\thits count:", len(result)) + print("=========================================================================================================\n") + +# Delete entities +def delete(collection, ids): + print("=========================================================================================================\n") + print("Delete these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + collection.delete(expr=expr) + print("=========================================================================================================\n") + +# Retrieve entities +def retrieve(collection, ids): + print("=========================================================================================================") + print("Retrieve these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + result = collection.query(expr=expr, output_fields=[_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _VECTOR_FIELD_NAME, _DYNAMIC_FIELD_NAME]) + for item in result: + print(item) + print("=========================================================================================================\n") + return result + +# Upload data files to minio +def upload(data_folder: str, + bucket_name: str=DEFAULT_BUCKET_NAME)->(bool, list): + if not os.path.exists(data_folder): + print("Data path '{}' doesn't exist".format(data_folder)) + return False, [] + + remote_files = [] + try: + print("Prepare upload files") + minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, secure=False) + found = minio_client.bucket_exists(bucket_name) + if not found: + print("MinIO bucket '{}' doesn't exist".format(bucket_name)) + return False, [] + + remote_data_path = "milvus_bulkinsert" + def upload_files(folder:str): + for parent, dirnames, filenames in os.walk(folder): + if parent is folder: + for filename in filenames: + ext = os.path.splitext(filename) + if len(ext) != 2 or (ext[1] != ".json" and ext[1] != ".npy"): + continue + local_full_path = os.path.join(parent, filename) + minio_file_path = os.path.join(remote_data_path, os.path.basename(folder), filename) + minio_client.fput_object(bucket_name, minio_file_path, local_full_path) + print("Upload file '{}' to '{}'".format(local_full_path, minio_file_path)) + remote_files.append(minio_file_path) + for dir in dirnames: + upload_files(os.path.join(parent, dir)) + + upload_files(data_folder) + + except S3Error as e: + print("Failed to connect MinIO server {}, error: {}".format(MINIO_ADDRESS, e)) + return False, [] + + print("Successfully upload files: {}".format(remote_files)) + return True, remote_files + +def main(has_partition_key: bool): + # create a connection + create_connection() + + # drop collection if the collection exists + if has_collection(): + drop_collection() + + # create collection + collection = create_collection(has_partition_key) + + # specify an index type + create_index(collection) + + + # load data to memory + load_collection(collection) + + # show collections + list_collections() + + # do bulk_insert, wait all tasks finish persisting + row_count_per_file = 100000 + if has_partition_key: + # automatically partitioning + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=2) + else: + # bulklinsert into default partition + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=1) + + # create a partition, bulkinsert into the partition + a_partition = "part_1" + create_partition(collection, a_partition) + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=1, partition_name=a_partition) + + # list all tasks + list_all_bulk_insert_tasks() + + # get the number of entities + get_entity_num(collection) + + print("Waiting index complete and refresh segments list to load...") + utility.wait_for_index_building_complete(_COLLECTION_NAME) + collection.load(_refresh = True) + + # pick some entities + pick_ids = [50, row_count_per_file + 99] + id_vectors = retrieve(collection, pick_ids) + + # search the picked entities, they are in result at the top0 + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 of search result, they are equal") + search(collection, vector) + + # delete the picked entities + delete(collection, pick_ids) + + # search the deleted entities, they are not in result anymore + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 result, they are not equal since the id has been deleted") + # here we use Strong consistency level to do search, because we need to make sure the delete operation is applied + search(collection, vector, consistency_level="Strong") + + # search by filtering the varchar field + vector = [round(random.random(), 6) for _ in range(_DIM)] + search(collection, vector, expr="{} like \"description_33%\"".format(_VARCHAR_FIELD_NAME)) + + # release memory + release_collection(collection) + + # drop collection + drop_collection() + + +if __name__ == '__main__': + # change this value if you want to test bulkinert with partition key + # Note: bulkinsert supports partition key from Milvus v2.2.12 + has_partition_key = False + main(has_partition_key) diff --git a/examples/orm_deprecated/bulk_import/example_bulkinsert_numpy.py b/examples/orm_deprecated/bulk_import/example_bulkinsert_numpy.py new file mode 100644 index 000000000..6f35c5db8 --- /dev/null +++ b/examples/orm_deprecated/bulk_import/example_bulkinsert_numpy.py @@ -0,0 +1,436 @@ +import random +import json +import time +import os +import numpy as np + +from minio import Minio +from minio.error import S3Error + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, + BulkInsertState, +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a collection +# 3. create some numpy files for bulkinsert operation +# 4. call do_bulk_insert() +# 5. wait data to be consumed and indexed +# 6. search + +# To run this example +# 1. start a standalone milvus(version >= v2.2.9) instance locally +# make sure the docker-compose.yml has exposed the minio console: +# minio: +# ...... +# ports: +# - "9000:9000" +# - "9001:9001" +# command: minio server /minio_data --console-address ":9001" +# +# 2. pip3 install minio + +# Local path to generate Numpy files +LOCAL_FILES_PATH = "/tmp/milvus_bulkinsert/" + +# Milvus service address +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo_bulk_insert_npy' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' +_JSON_FIELD_NAME = "json_field" +_VARCHAR_FIELD_NAME = "varchar_field" +_DYNAMIC_FIELD_NAME = "$meta" # dynamic field, the internal name is "$meta", enable_dynamic_field=True + +# minio +DEFAULT_BUCKET_NAME = "a-bucket" +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" + +# Vector field parameter +_DIM = 128 + +# to generate increment ID +id_start = 1 + +# Create a Milvus connection +def create_connection(): + retry = True + while retry: + try: + print(f"\nCreate connection...") + connections.connect(host=_HOST, port=_PORT) + retry = False + except Exception as e: + print("Cannot connect to Milvus. Error: " + str(e)) + print(f"Cannot connect to Milvus. Trying to connect Again. Sleeping for: 1") + time.sleep(1) + + print(f"\nList connections:") + print(connections.list_connections()) + + +# Create a collection +def create_collection(has_partition_key: bool): + field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=False) + field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + field3 = FieldSchema(name=_JSON_FIELD_NAME, dtype=DataType.JSON) + # if has partition key, we use this varchar field as partition key field + field4 = FieldSchema(name=_VARCHAR_FIELD_NAME, dtype=DataType.VARCHAR, max_length=256, is_partition_key=has_partition_key) + schema = CollectionSchema(fields=[field1, field2, field3, field4], enable_dynamic_field=True) + if has_partition_key: + collection = Collection(name=_COLLECTION_NAME, schema=schema, num_partitions=10) + else: + collection = Collection(name=_COLLECTION_NAME, schema=schema) + print("\nCollection created:", _COLLECTION_NAME) + return collection + + +# Test existence of a collection +def has_collection(): + return utility.has_collection(_COLLECTION_NAME) + + +# Drop a collection in Milvus +def drop_collection(): + collection = Collection(_COLLECTION_NAME) + collection.drop() + print("\nDrop collection:", _COLLECTION_NAME) + + +# List all collections in Milvus +def list_collections(): + print("\nList collections:") + print(utility.list_collections()) + +# Generate a column-based data numpy file for each field. +# If primary key is not auto-id, bulkinsert requires a numpy file for the primary key field. For auto-id primary key, you don't need to provide this file. +# For dynamic field, provide a numpy file with name "$meta.npy" to store dynamic values. No need to provide this file if you have no dynamic value to import. +# For JSON type field, the numpy file must be a list of strings, each string is in JSON format. For example: ["{\"a\": 1}", "{\"b\": 2}", "{\"c\": 3}"] +# The dynamic field is also a JSON type field, the "$meta.npy" must be a list of strings in JSON format. For example: ["{}", "{\"x\": 100, \"y\": true}", "{\"z\": 3.14}"] +# The row count of each numpy file must be equal. +def gen_npy_columnbased(num: int, path: str): + # make sure the files folder is created + os.makedirs(name=path, exist_ok=True) + + global id_start + id_array = [id_start + i for i in range(num)] + vec_array = [[round(random.random(), 6) for _ in range(_DIM)] for _ in range(num)] + json_array = [json.dumps({"Number": id_start + i, "Name": "book_"+str(id_start + i)}) for i in range(num)] + varchar_array = ["description_{}".format(id_start + i) for i in range(num)] + dynamic_array = [json.dumps({"dynamic_{}".format(id_start + i): True}) for i in range(num)] + id_start = id_start + num + + file_list = [] + # numpy file for _ID_FIELD_NAME + file_path = os.path.join(path, _ID_FIELD_NAME+".npy") + file_list.append(file_path) + np.save(file_path, id_array) + print("Generate column-based numpy file:", file_path) + + # numpy file for _VECTOR_FIELD_NAME + file_path = os.path.join(path, _VECTOR_FIELD_NAME+".npy") + file_list.append(file_path) + np.save(file_path, vec_array) + print("Generate column-based numpy file:", file_path) + + # numpy file for _JSON_FIELD_NAME + file_path = os.path.join(path, _JSON_FIELD_NAME+".npy") + file_list.append(file_path) + np.save(file_path, json_array) + print("Generate column-based numpy file:", file_path) + + # numpy file for _VARCHAR_FIELD_NAME + file_path = os.path.join(path, _VARCHAR_FIELD_NAME + ".npy") + file_list.append(file_path) + np.save(file_path, varchar_array) + print("Generate column-based numpy file:", file_path) + + # numpy file for dynamic field + file_path = os.path.join(path, _DYNAMIC_FIELD_NAME + ".npy") + file_list.append(file_path) + np.save(file_path, dynamic_array) + print("Generate column-based numpy file:", file_path) + + return file_list + +# Generate numpy files and upload files to minio, then call the do_bulk_insert() +def bulk_insert_columnbased(row_count_per_file, file_count, partition_name = None): + # make sure the files folder is created + os.makedirs(name=LOCAL_FILES_PATH, exist_ok=True) + + task_ids = [] + for i in range(file_count): + data_folder = os.path.join(LOCAL_FILES_PATH, "columns_{}".format(i)) + os.makedirs(name=data_folder, exist_ok=True) + file_list = gen_npy_columnbased(row_count_per_file, data_folder) + + ok, remote_files = upload(data_folder=data_folder) + if ok: + print("Import column-based files:", remote_files) + task_id = utility.do_bulk_insert(collection_name=_COLLECTION_NAME, + partition_name=partition_name, + files=remote_files) + task_ids.append(task_id) + + return wait_tasks_competed(task_ids) + +# Wait all bulk insert tasks to be a certain state +# return the states of all the tasks, including failed task +def wait_tasks_to_state(task_ids, state_code): + wait_ids = task_ids + states = [] + while True: + time.sleep(2) + temp_ids = [] + for id in wait_ids: + state = utility.get_bulk_insert_state(task_id=id) + if state.state == BulkInsertState.ImportFailed or state.state == BulkInsertState.ImportFailedAndCleaned: + print(state) + print("The task", state.task_id, "failed, reason:", state.failed_reason) + continue + + if state.state >= state_code: + states.append(state) + continue + + temp_ids.append(id) + + wait_ids = temp_ids + if len(wait_ids) == 0: + break; + print(len(wait_ids), "tasks not reach state:", BulkInsertState.state_2_name.get(state_code, "unknown"), ", next round check") + + return states + +# If the state of bulkinsert task is BulkInsertState.ImportCompleted, that means the data file has been parsed and data has been persisted, +# some segments have been created and waiting for index. +# ImportCompleted state doesn't mean the data is queryable, to query the data, you need to wait until the segment is +# indexed successfully and loaded into memory. +def wait_tasks_competed(task_ids): + print("=========================================================================================================") + states = wait_tasks_to_state(task_ids, BulkInsertState.ImportCompleted) + complete_count = 0 + for state in states: + if state.state == BulkInsertState.ImportCompleted: + complete_count = complete_count + 1 + # print(state) + # if you want to get the auto-generated primary keys, use state.ids to fetch + # print("Auto-generated ids:", state.ids) + + print("{} of {} tasks have successfully generated segments, able to be compacted and indexed as normal".format(complete_count, len(task_ids))) + print("=========================================================================================================\n") + return states + +# List all bulk insert tasks, including pending tasks, working tasks and finished tasks. +# the parameter 'limit' is: how many latest tasks should be returned, if the limit<=0, all the tasks will be returned +def list_all_bulk_insert_tasks(collection_name=_COLLECTION_NAME, limit=0): + tasks = utility.list_bulk_insert_tasks(limit=limit, collection_name=collection_name) + print("=========================================================================================================") + print("List bulk insert tasks with limit", limit) + pending = 0 + started = 0 + persisted = 0 + completed = 0 + failed = 0 + for task in tasks: + print(task) + if task.state == BulkInsertState.ImportPending: + pending = pending + 1 + elif task.state == BulkInsertState.ImportStarted: + started = started + 1 + elif task.state == BulkInsertState.ImportPersisted: + persisted = persisted + 1 + elif task.state == BulkInsertState.ImportCompleted: + completed = completed + 1 + elif task.state == BulkInsertState.ImportFailed: + failed = failed + 1 + print("There are {} bulkinsert tasks: {} pending, {} started, {} persisted, {} completed, {} failed" + .format(len(tasks), pending, started, persisted, completed, failed)) + print("=========================================================================================================\n") + +# Get collection row count. +def get_entity_num(collection): + print("=========================================================================================================") + print("The number of entity:", collection.num_entities) + +# Specify an index type +def create_index(collection): + print("Start Creating index IVF_FLAT") + index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, + } + collection.create_index(_VECTOR_FIELD_NAME, index) + +# Load collection data into memory. If collection is not loaded, the search() and query() methods will return error. +def load_collection(collection): + collection.load() + +# Release collection data to free memory. +def release_collection(collection): + collection.release() + +# ANN search +def search(collection, search_vector, expr = None, consistency_level = "Eventually"): + search_param = { + "expr": expr, + "data": [search_vector], + "anns_field": _VECTOR_FIELD_NAME, + "param": {"metric_type": "L2", "params": {"nprobe": 10}}, + "limit": 5, + "output_fields": [_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _DYNAMIC_FIELD_NAME], + "consistency_level": consistency_level, + } + print("search..." if expr is None else "hybrid search...") + results = collection.search(**search_param) + print("=========================================================================================================") + result = results[0] + for j, res in enumerate(result): + print(f"\ttop{j}: {res}") + print("\thits count:", len(result)) + print("=========================================================================================================\n") + +# Delete entities +def delete(collection, ids): + print("=========================================================================================================\n") + print("Delete these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + collection.delete(expr=expr) + print("=========================================================================================================\n") + +# Retrieve entities +def retrieve(collection, ids): + print("=========================================================================================================") + print("Retrieve these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + result = collection.query(expr=expr, output_fields=[_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _VECTOR_FIELD_NAME, _DYNAMIC_FIELD_NAME]) + for item in result: + print(item) + print("=========================================================================================================\n") + return result + +# Upload data files to minio +def upload(data_folder: str, + bucket_name: str=DEFAULT_BUCKET_NAME)->(bool, list): + if not os.path.exists(data_folder): + print("Data path '{}' doesn't exist".format(data_folder)) + return False, [] + + remote_files = [] + try: + print("Prepare upload files") + minio_client = Minio(endpoint=MINIO_ADDRESS, access_key=MINIO_ACCESS_KEY, secret_key=MINIO_SECRET_KEY, secure=False) + found = minio_client.bucket_exists(bucket_name) + if not found: + print("MinIO bucket '{}' doesn't exist".format(bucket_name)) + return False, [] + + remote_data_path = "milvus_bulkinsert" + def upload_files(folder:str): + for parent, dirnames, filenames in os.walk(folder): + if parent is folder: + for filename in filenames: + ext = os.path.splitext(filename) + if len(ext) != 2 or (ext[1] != ".json" and ext[1] != ".npy"): + continue + local_full_path = os.path.join(parent, filename) + minio_file_path = os.path.join(remote_data_path, os.path.basename(folder), filename) + minio_client.fput_object(bucket_name, minio_file_path, local_full_path) + print("Upload file '{}' to '{}'".format(local_full_path, minio_file_path)) + remote_files.append(minio_file_path) + for dir in dirnames: + upload_files(os.path.join(parent, dir)) + + upload_files(data_folder) + + except S3Error as e: + print("Failed to connect MinIO server {}, error: {}".format(MINIO_ADDRESS, e)) + return False, [] + + print("Successfully upload files: {}".format(remote_files)) + return True, remote_files + + +def main(has_partition_key: bool): + # create a connection + create_connection() + + # drop collection if the collection exists + if has_collection(): + drop_collection() + + # create collection + collection = create_collection(has_partition_key) + + # specify an index type + create_index(collection) + + # load data to memory + load_collection(collection) + + # show collections + list_collections() + + # do bulk_insert, wait all tasks finish persisting + bulk_insert_columnbased(row_count_per_file=100000, file_count=2) + + # list all tasks + list_all_bulk_insert_tasks() + + # get the number of entities + get_entity_num(collection) + + # print("Waiting index complete and refresh segments list to load...") + utility.wait_for_index_building_complete(_COLLECTION_NAME) + collection.load(_refresh = True) + + # pick some entities + delete_ids = [50, 100] + id_vectors = retrieve(collection, delete_ids) + + # search in entire collection + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 of search result, they are equal") + search(collection, vector) + + # delete the picked entities + delete(collection, delete_ids) + + # search the deleted entities to check existence + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 result, they are not equal since the id has been deleted") + # here we use Stong consistency level to do search, because we need to make sure the delete operation is applied + search(collection, vector, consistency_level="Strong") + + # search by filtering the varchar field + vector = [round(random.random(), 6) for _ in range(_DIM)] + search(collection, vector, expr="{} like \"description_8%\"".format(_VARCHAR_FIELD_NAME)) + + # release memory + release_collection(collection) + + # drop collection + drop_collection() + + +if __name__ == '__main__': + # change this value if you want to test bulkinert with partition key + # Note: bulkinsert supports partition key from Milvus v2.2.12 + has_partition_key = False + main(has_partition_key) diff --git a/examples/orm_deprecated/bulk_import/example_bulkinsert_withfunction.py b/examples/orm_deprecated/bulk_import/example_bulkinsert_withfunction.py new file mode 100644 index 000000000..36351d431 --- /dev/null +++ b/examples/orm_deprecated/bulk_import/example_bulkinsert_withfunction.py @@ -0,0 +1,360 @@ +import random +import json +import csv +import time +import os + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, + BulkInsertState, + Function, FunctionType, +) + + +LOCAL_FILES_PATH = "/tmp/milvus_bulkinsert" + +# Milvus service address +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo_bulk_insert_csv' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' +_JSON_FIELD_NAME = "json_field" +_VARCHAR_FIELD_NAME = "varchar_field" +_DYNAMIC_FIELD_NAME = "$meta" # dynamic field, the internal name is "$meta", enable_dynamic_field=True + + +# Vector field parameter +_DIM = 1536 + +# to generate increment ID +id_start = 1 + +# Create a Milvus connection +def create_connection(): + retry = True + while retry: + try: + print(f"\nCreate connection...") + connections.connect(host=_HOST, port=_PORT) + retry = False + except Exception as e: + print("Cannot connect to Milvus. Error: " + str(e)) + print(f"Cannot connect to Milvus. Trying to connect Again. Sleeping for: 1") + time.sleep(1) + + print(f"\nList connections:") + print(connections.list_connections()) + +# Create a collection +def create_collection(has_partition_key: bool): + field1 = FieldSchema(name=_ID_FIELD_NAME, dtype=DataType.INT64, description="int64", is_primary=True, auto_id=False) + field2 = FieldSchema(name=_VECTOR_FIELD_NAME, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + field3 = FieldSchema(name=_JSON_FIELD_NAME, dtype=DataType.JSON) + # if has partition key, we use this varchar field as partition key field + field4 = FieldSchema(name=_VARCHAR_FIELD_NAME, dtype=DataType.VARCHAR, max_length=256, is_partition_key=has_partition_key) + schema = CollectionSchema(fields=[field1, field2, field3, field4], enable_dynamic_field=True) + text_embedding_function = Function( + name="openai", + function_type=FunctionType.TEXTEMBEDDING, + input_field_names=[_VARCHAR_FIELD_NAME], + output_field_names=_VECTOR_FIELD_NAME, + params={ + "provider": "openai", + "model_name": "text-embedding-3-small", + } + ) + schema.add_function(text_embedding_function) + if has_partition_key: + collection = Collection(name=_COLLECTION_NAME, schema=schema, num_partitions=10) + else: + collection = Collection(name=_COLLECTION_NAME, schema=schema) + print("\nCollection created:", _COLLECTION_NAME) + return collection + +# Test existence of a collection +def has_collection(): + return utility.has_collection(_COLLECTION_NAME) + +# Drop a collection in Milvus +def drop_collection(): + collection = Collection(_COLLECTION_NAME) + collection.drop() + print("\nDrop collection:", _COLLECTION_NAME) + + +# List all collections in Milvus +def list_collections(): + print("\nList collections:") + print(utility.list_collections()) + +# Create a partition +def create_partition(collection, partition_name): + collection.create_partition(partition_name=partition_name) + print("\nPartition created:", partition_name) + return collection.partition(partition_name) + +def gen_csv_rowbased(num, path, partition_name, sep=","): + global id_start + header = [_ID_FIELD_NAME, _JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _DYNAMIC_FIELD_NAME] + rows = [] + for i in range(num): + rows.append([ + id_start, # id field + json.dumps({"Number": id_start, "Name": "book_"+str(id_start)}), # json field + "{}_{}".format(partition_name, id_start) if partition_name is not None else "description_{}".format(id_start), # varchar field + json.dumps({"dynamic_field": id_start}), # no field matches this value, this value will be put into dynamic field + ]) + id_start = id_start + 1 + data = [header] + rows + with open(path, "w") as f: + writer = csv.writer(f, delimiter=sep) + for row in data: + writer.writerow(row) + + +def bulk_insert_rowbased(row_count_per_file, file_count, partition_name = None): + # make sure the files folder is created + os.makedirs(name=LOCAL_FILES_PATH, exist_ok=True) + + task_ids = [] + for i in range(file_count): + data_folder = os.path.join(LOCAL_FILES_PATH, "csv_{}".format(i)) + os.makedirs(name=data_folder, exist_ok=True) + file_path = os.path.join(data_folder, "csv_{}.csv".format(i)) + print("Generate csv file:", file_path) + sep ="\t" + gen_csv_rowbased(row_count_per_file, file_path, partition_name, sep) + + print("Import csv file:", file_path) + task_id = utility.do_bulk_insert(collection_name=_COLLECTION_NAME, + partition_name=partition_name, + files=[file_path], + sep=sep) + task_ids.append(task_id) + + return wait_tasks_competed(task_ids) + +# Wait all bulkinsert tasks to be a certain state +# return the states of all the tasks, including failed task +def wait_tasks_to_state(task_ids, state_code): + wait_ids = task_ids + states = [] + while True: + time.sleep(2) + temp_ids = [] + for id in wait_ids: + state = utility.get_bulk_insert_state(task_id=id) + if state.state == BulkInsertState.ImportFailed or state.state == BulkInsertState.ImportFailedAndCleaned: + print(state) + print("The task", state.task_id, "failed, reason:", state.failed_reason) + continue + + if state.state >= state_code: + states.append(state) + continue + + temp_ids.append(id) + + wait_ids = temp_ids + if len(wait_ids) == 0: + break + print("Wait {} tasks to be state: {}. Next round check".format(len(wait_ids), BulkInsertState.state_2_name.get(state_code, "unknown"))) + + return states + +# If the state of bulkinsert task is BulkInsertState.ImportCompleted, that means the data file has been parsed and data has been persisted, +# some segments have been created and waiting for index. +# ImportCompleted state doesn't mean the data is queryable, to query the data, you need to wait until the segment is +# indexed successfully and loaded into memory. +def wait_tasks_competed(task_ids): + print("=========================================================================================================") + states = wait_tasks_to_state(task_ids, BulkInsertState.ImportCompleted) + complete_count = 0 + for state in states: + if state.state == BulkInsertState.ImportCompleted: + complete_count = complete_count + 1 + # print(state) + # if you want to get the auto-generated primary keys, use state.ids to fetch + # print("Auto-generated ids:", state.ids) + + print("{} of {} tasks have successfully generated segments, able to be compacted and indexed as normal".format(complete_count, len(task_ids))) + print("=========================================================================================================\n") + return states + +# List all bulkinsert tasks, including pending tasks, working tasks and finished tasks. +# the parameter 'limit' is: how many latest tasks should be returned, if the limit<=0, all the tasks will be returned +def list_all_bulk_insert_tasks(collection_name=_COLLECTION_NAME, limit=0): + tasks = utility.list_bulk_insert_tasks(limit=limit, collection_name=collection_name) + print("=========================================================================================================") + print("List bulkinsert tasks with limit", limit) + pending = 0 + started = 0 + persisted = 0 + completed = 0 + failed = 0 + for task in tasks: + print(task) + if task.state == BulkInsertState.ImportPending: + pending = pending + 1 + elif task.state == BulkInsertState.ImportStarted: + started = started + 1 + elif task.state == BulkInsertState.ImportPersisted: + persisted = persisted + 1 + elif task.state == BulkInsertState.ImportCompleted: + completed = completed + 1 + elif task.state == BulkInsertState.ImportFailed: + failed = failed + 1 + print("There are {} bulkinsert tasks: {} pending, {} started, {} persisted, {} completed, {} failed" + .format(len(tasks), pending, started, persisted, completed, failed)) + print("=========================================================================================================\n") + +# Get collection row count. +def get_entity_num(collection): + print("=========================================================================================================") + print("The number of entity:", collection.num_entities) + +# Specify an index type +def create_index(collection): + print("Start Creating index IVF_FLAT") + index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, + } + collection.create_index(_VECTOR_FIELD_NAME, index) + +# Load collection data into memory. If collection is not loaded, the search() and query() methods will return error. +def load_collection(collection): + collection.load() + +# Release collection data to free memory. +def release_collection(collection): + collection.release() + +# ANN search +def search(collection, search_vector, expr = None, consistency_level = "Eventually"): + search_param = { + "expr": expr, + "data": [search_vector], + "anns_field": _VECTOR_FIELD_NAME, + "param": {"metric_type": "L2", "params": {"nprobe": 10}}, + "limit": 5, + "output_fields": [_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _DYNAMIC_FIELD_NAME], + "consistency_level": consistency_level, + } + print("search..." if expr is None else "hybrid search...") + results = collection.search(**search_param) + print("=========================================================================================================") + result = results[0] + for j, res in enumerate(result): + print(f"\ttop{j}: {res}") + print("\thits count:", len(result)) + print("=========================================================================================================\n") + +# Delete entities +def delete(collection, ids): + print("=========================================================================================================\n") + print("Delete these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + collection.delete(expr=expr) + print("=========================================================================================================\n") + +# Retrieve entities +def retrieve(collection, ids): + print("=========================================================================================================") + print("Retrieve these entities:", ids) + expr = _ID_FIELD_NAME + " in " + str(ids) + result = collection.query(expr=expr, output_fields=[_JSON_FIELD_NAME, _VARCHAR_FIELD_NAME, _VECTOR_FIELD_NAME, _DYNAMIC_FIELD_NAME]) + for item in result: + print(item) + print("=========================================================================================================\n") + return result + + +def main(has_partition_key: bool): + # create a connection + create_connection() + + # drop collection if the collection exists + if has_collection(): + drop_collection() + + # create collection + collection = create_collection(has_partition_key) + + # specify an index type + create_index(collection) + + print("Load data to memory") + # load data to memory + load_collection(collection) + print("Load data to memory completed") + # show collections + print("Show collections") + list_collections() + + # do bulk_insert, wait all tasks finish persisting + row_count_per_file = 10 + if has_partition_key: + # automatically partitioning + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=2) + else: + # bulklinsert into default partition + bulk_insert_rowbased(row_count_per_file=row_count_per_file, file_count=1) + print("Bulk insert completed") + + # list all tasks + list_all_bulk_insert_tasks() + + # get the number of entities + get_entity_num(collection) + + print("Waiting index complete and refresh segments list to load...") + utility.wait_for_index_building_complete(_COLLECTION_NAME) + collection.load(_refresh = True) + + # pick some entities + pick_ids = [50, row_count_per_file + 99] + id_vectors = retrieve(collection, pick_ids) + + # search the picked entities, they are in result at the top0 + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 of search result, they are equal") + search(collection, vector) + + # delete the picked entities + delete(collection, pick_ids) + + # search the deleted entities, they are not in result anymore + for id_vector in id_vectors: + id = id_vector[_ID_FIELD_NAME] + vector = id_vector[_VECTOR_FIELD_NAME] + print("Search id:", id, ", compare this id to the top0 result, they are not equal since the id has been deleted") + # here we use Strong consistency level to do search, because we need to make sure the delete operation is applied + search(collection, vector, consistency_level="Strong") + + # search by filtering the varchar field + vector = [round(random.random(), 6) for _ in range(_DIM)] + ret = search(collection, vector) + print(ret) + # release memory + # release_collection(collection) + + # drop collection + # drop_collection() + + +if __name__ == '__main__': + # change this value if you want to test bulkinert with partition key + # Note: bulkinsert supports partition key from Milvus v2.2.12 + has_partition_key = False + main(has_partition_key) diff --git a/examples/orm_deprecated/bulk_import/example_bulkwriter.py b/examples/orm_deprecated/bulk_import/example_bulkwriter.py new file mode 100644 index 000000000..c7247da54 --- /dev/null +++ b/examples/orm_deprecated/bulk_import/example_bulkwriter.py @@ -0,0 +1,466 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import json +import logging +import threading +import time +from typing import List +import numpy as np +import pandas as pd + +from examples.orm_deprecated.bulk_import.data_gengerator import * + +logging.basicConfig(level=logging.INFO) + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, +) + +from pymilvus.bulk_writer import ( + LocalBulkWriter, + RemoteBulkWriter, + BulkFileType, + list_import_jobs, + bulk_import, + get_import_progress, +) + +# minio +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" + +# milvus +HOST = '127.0.0.1' +PORT = '19530' + +SIMPLE_COLLECTION_NAME = "for_bulkwriter" +ALL_TYPES_COLLECTION_NAME = "all_types_for_bulkwriter" +DIM = 512 + +def create_connection(): + print(f"\nCreate connection...") + connections.connect(host=HOST, port=PORT) + print(f"\nConnected") + + +def build_simple_collection(): + print(f"\n===================== create collection ====================") + if utility.has_collection(SIMPLE_COLLECTION_NAME): + utility.drop_collection(SIMPLE_COLLECTION_NAME) + + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), + FieldSchema(name="path", dtype=DataType.VARCHAR, max_length=512), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=DIM), + FieldSchema(name="label", dtype=DataType.VARCHAR, max_length=512), + ] + schema = CollectionSchema(fields=fields) + collection = Collection(name=SIMPLE_COLLECTION_NAME, schema=schema) + print(f"Collection '{collection.name}' created") + return collection.schema + +def build_all_type_schema(is_numpy: bool): + print(f"\n===================== build all types schema ====================") + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="bool", dtype=DataType.BOOL), + FieldSchema(name="int8", dtype=DataType.INT8), + FieldSchema(name="int16", dtype=DataType.INT16), + FieldSchema(name="int32", dtype=DataType.INT32), + FieldSchema(name="int64", dtype=DataType.INT64), + FieldSchema(name="float", dtype=DataType.FLOAT), + FieldSchema(name="double", dtype=DataType.DOUBLE), + FieldSchema(name="varchar", dtype=DataType.VARCHAR, max_length=512), + FieldSchema(name="json", dtype=DataType.JSON), + # from 2.4.0, milvus supports multiple vector fields in one collection + # FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=DIM), + FieldSchema(name="binary_vector", dtype=DataType.BINARY_VECTOR, dim=DIM), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=DIM), + # FieldSchema(name="bfloat16_vector", dtype=DataType.BFLOAT16_VECTOR, dim=DIM), + FieldSchema(name="int8_vector", dtype=DataType.INT8_VECTOR, dim=DIM), + ] + + # milvus doesn't support parsing array/sparse_vector from numpy file + if not is_numpy: + fields.append(FieldSchema(name="array_str", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.VARCHAR, max_length=128)) + fields.append(FieldSchema(name="array_int", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64)) + fields.append(FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR)) + + schema = CollectionSchema(fields=fields, enable_dynamic_field=True) + return schema + +def read_sample_data(file_path: str, writer: [LocalBulkWriter, RemoteBulkWriter]): + csv_data = pd.read_csv(file_path) + print(f"The csv file has {csv_data.shape[0]} rows") + for i in range(csv_data.shape[0]): + row = {} + for col in csv_data.columns.values: + if col == "vector": + vec = json.loads(csv_data[col][i]) # convert the string format vector to List[float] + row[col] = vec + else: + row[col] = csv_data[col][i] + + writer.append_row(row) + +def local_writer_simple(schema: CollectionSchema, file_type: BulkFileType): + print(f"\n===================== local writer ({file_type.name}) ====================") + with LocalBulkWriter( + schema=schema, + local_path="/tmp/bulk_writer", + segment_size=128*1024*1024, + file_type=file_type, + ) as local_writer: + # read data from csv + read_sample_data("./train_embeddings.csv", local_writer) + + # append rows + for i in range(100000): + local_writer.append_row({"path": f"path_{i}", "vector": gen_float_vector(i%2==0, DIM), "label": f"label_{i}"}) + + print(f"{local_writer.total_row_count} rows appends") + print(f"{local_writer.buffer_row_count} rows in buffer not flushed") + local_writer.commit() + batch_files = local_writer.batch_files + + print(f"Local writer done! output local files: {batch_files}") + + +def remote_writer_simple(schema: CollectionSchema, file_type: BulkFileType): + print(f"\n===================== remote writer ({file_type.name}) ====================") + with RemoteBulkWriter( + schema=schema, + remote_path="bulk_data", + connect_param=RemoteBulkWriter.S3ConnectParam( + endpoint=MINIO_ADDRESS, + access_key=MINIO_ACCESS_KEY, + secret_key=MINIO_SECRET_KEY, + bucket_name="a-bucket", + ), + segment_size=512 * 1024 * 1024, + file_type=file_type, + ) as remote_writer: + # read data from csv + read_sample_data("./train_embeddings.csv", remote_writer) + + # append rows + for i in range(10000): + remote_writer.append_row({"path": f"path_{i}", "vector": gen_float_vector(i%2==0, DIM), "label": f"label_{i}"}) + + print(f"{remote_writer.total_row_count} rows appends") + print(f"{remote_writer.buffer_row_count} rows in buffer not flushed") + remote_writer.commit() + batch_files = remote_writer.batch_files + + print(f"Remote writer done! output remote files: {batch_files}") + +def parallel_append(schema: CollectionSchema): + print(f"\n===================== parallel append ====================") + def _append_row(writer: LocalBulkWriter, begin: int, end: int): + try: + for i in range(begin, end): + writer.append_row({"path": f"path_{i}", "vector": gen_float_vector(False, DIM), "label": f"label_{i}"}) + if i%100 == 0: + print(f"{threading.current_thread().name} inserted {i-begin} items") + except Exception as e: + print("failed to append row!") + + local_writer = LocalBulkWriter( + schema=schema, + local_path="/tmp/bulk_writer", + segment_size=128 * 1024 * 1024, # 128MB + file_type=BulkFileType.JSON, + ) + threads = [] + thread_count = 10 + rows_per_thread = 1000 + for k in range(thread_count): + x = threading.Thread(target=_append_row, args=(local_writer, k*rows_per_thread, (k+1)*rows_per_thread,)) + threads.append(x) + x.start() + print(f"Thread '{x.name}' started") + + for th in threads: + th.join() + print(f"Thread '{th.name}' finished") + + print(f"{local_writer.total_row_count} rows appends") + print(f"{local_writer.buffer_row_count} rows in buffer not flushed") + local_writer.commit() + print(f"Append finished, {thread_count*rows_per_thread} rows") + + row_count = 0 + batch_files = local_writer.batch_files + for batch in batch_files: + for file_path in batch: + with open(file_path, 'r') as file: + data = json.load(file) + + rows = data['rows'] + row_count = row_count + len(rows) + print(f"The file {file_path} contains {len(rows)} rows. Verify the content...") + + for row in rows: + pa = row['path'] + label = row['label'] + assert pa.replace("path_", "") == label.replace("label_", "") + + assert row_count == thread_count * rows_per_thread + print("Data is correct") + + +def all_types_writer(schema: CollectionSchema, file_type: BulkFileType)-> List[List[str]]: + print(f"\n===================== all field types ({file_type.name}) ====================") + with RemoteBulkWriter( + schema=schema, + remote_path="bulk_data", + connect_param=RemoteBulkWriter.S3ConnectParam( + endpoint=MINIO_ADDRESS, + access_key=MINIO_ACCESS_KEY, + secret_key=MINIO_SECRET_KEY, + bucket_name="a-bucket", + ), + file_type=file_type, + ) as remote_writer: + print("Append rows") + batch_count = 10000 + for i in range(batch_count): + row = { + "id": i, + "bool": True if i%5 == 0 else False, + "int8": i%128, + "int16": i%1000, + "int32": i%100000, + "int64": i, + "float": i/3, + "double": i/7, + "varchar": f"varchar_{i}", + "json": {"dummy": i, "ok": f"name_{i}"}, + # "float_vector": gen_float_vector(False), + "binary_vector": gen_binary_vector(False, DIM), + "float16_vector": gen_fp16_vector(False, DIM), + # "bfloat16_vector": gen_bf16_vector(False), + "int8_vector": gen_int8_vector(False, DIM), + f"dynamic_{i}": i, + # bulkinsert doesn't support import npy with array field and sparse vector, + # if file_type is numpy, the below values will be stored into dynamic field + "array_str": [f"str_{k}" for k in range(5)], + "array_int": [k for k in range(10)], + "sparse_vector": gen_sparse_vector(False), + } + remote_writer.append_row(row) + + # append rows by numpy type + for i in range(batch_count): + id = i+batch_count + remote_writer.append_row({ + "id": np.int64(id), + "bool": True if i % 3 == 0 else False, + "int8": np.int8(id%128), + "int16": np.int16(id%1000), + "int32": np.int32(id%100000), + "int64": np.int64(id), + "float": np.float32(id/3), + "double": np.float64(id/7), + "varchar": f"varchar_{id}", + "json": json.dumps({"dummy": id, "ok": f"name_{id}"}), + # "float_vector": gen_float_vector(True), + "binary_vector": gen_binary_vector(True, DIM), + "float16_vector": gen_fp16_vector(True, DIM), + # "bfloat16_vector": gen_bf16_vector(True), + "int8_vector": gen_int8_vector(True, DIM), + f"dynamic_{id}": id, + # bulkinsert doesn't support import npy with array field and sparse vector, + # if file_type is numpy, the below values will be stored into dynamic field + "array_str": np.array([f"str_{k}" for k in range(5)], np.dtype("str")), + "array_int": np.array([k for k in range(10)], np.dtype("int64")), + "sparse_vector": gen_sparse_vector(True), + }) + + print(f"{remote_writer.total_row_count} rows appends") + print(f"{remote_writer.buffer_row_count} rows in buffer not flushed") + print("Generate data files...") + remote_writer.commit() + print(f"Data files have been uploaded: {remote_writer.batch_files}") + return remote_writer.batch_files + + +def call_bulkinsert(schema: CollectionSchema, batch_files: List[List[str]]): + if utility.has_collection(ALL_TYPES_COLLECTION_NAME): + utility.drop_collection(ALL_TYPES_COLLECTION_NAME) + + collection = Collection(name=ALL_TYPES_COLLECTION_NAME, schema=schema) + print(f"Collection '{collection.name}' created") + + url = f"http://{HOST}:{PORT}" + + print(f"\n===================== import files to milvus ====================") + resp = bulk_import( + url=url, + collection_name=ALL_TYPES_COLLECTION_NAME, + files=batch_files, + ) + print(resp.json()) + job_id = resp.json()['data']['jobId'] + print(f"Create a bulkinsert job, job id: {job_id}") + + while True: + print("Wait 5 second to check bulkinsert job state...") + time.sleep(5) + + print(f"\n===================== get import job progress ====================") + resp = get_import_progress( + url=url, + job_id=job_id, + ) + + state = resp.json()['data']['state'] + progress = resp.json()['data']['progress'] + if state == "Importing": + print(f"The job {job_id} is importing... {progress}%") + continue + if state == "Failed": + reason = resp.json()['data']['reason'] + print(f"The job {job_id} failed, reason: {reason}") + break + if state == "Completed" and progress == 100: + print(f"The job {job_id} completed") + break + + print(f"Collection row number: {collection.num_entities}") + + +def retrieve_imported_data(): + collection = Collection(name=ALL_TYPES_COLLECTION_NAME) + print("Create index...") + for field in collection.schema.fields: + if (field.dtype == DataType.FLOAT_VECTOR or field.dtype == DataType.FLOAT16_VECTOR + or field.dtype == DataType.BFLOAT16_VECTOR): + collection.create_index(field_name=field.name, index_params={ + "index_type": "FLAT", + "params": {}, + "metric_type": "L2" + }) + elif field.dtype == DataType.BINARY_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "BIN_FLAT", + "params": {}, + "metric_type": "HAMMING" + }) + elif field.dtype == DataType.SPARSE_FLOAT_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "SPARSE_INVERTED_INDEX", + "metric_type": "IP", + "params": {"drop_ratio_build": 0.2} + }) + elif field.dtype == DataType.INT8_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "HNSW", + "params": {}, + "metric_type": "L2" + }) + + ids = [100, 15000] + print(f"Load collection and query items {ids}") + collection.load() + collection.load(refresh=True) + expr = f"id in {ids}" + print(expr) + results = collection.query(expr=expr, output_fields=["*"]) + print("Query results:") + for item in results: + print(item) + +def cloud_bulkinsert(): + # The value of the URL is fixed. + # For overseas regions, it is: https://api.cloud.zilliz.com + # For regions in China, it is: https://api.cloud.zilliz.com.cn + url = "https://api.cloud.zilliz.com" + api_key = "_api_key_for_cluster_org_" + cluster_id = "_your_cloud_cluster_id_" + collection_name = "_collection_name_on_the_cluster_id_" + # If partition_name is not specified, use "" + partition_name = "_partition_name_on_the_collection_" + + print(f"\n===================== import files to cloud vectordb ====================") + object_url = "_your_object_storage_service_url_" + object_url_access_key = "_your_object_storage_service_access_key_" + object_url_secret_key = "_your_object_storage_service_secret_key_" + resp = bulk_import( + url=url, + collection_name=collection_name, + partition_name=partition_name, + object_urls=[[object_url]], + cluster_id=cluster_id, + api_key=api_key, + access_key=object_url_access_key, + secret_key=object_url_secret_key, + ) + print(resp.json()) + + print(f"\n===================== get import job progress ====================") + job_id = resp.json()['data']['jobId'] + resp = get_import_progress( + url=url, + job_id=job_id, + cluster_id=cluster_id, + api_key=api_key, + ) + print(resp.json()) + + print(f"\n===================== list import jobs ====================") + resp = list_import_jobs( + url=url, + cluster_id=cluster_id, + api_key=api_key, + page_size=10, + current_page=1, + ) + print(resp.json()) + + +if __name__ == '__main__': + create_connection() + + file_types = [ + BulkFileType.JSON, + BulkFileType.NUMPY, + BulkFileType.PARQUET, + BulkFileType.CSV, + ] + + schema = build_simple_collection() + for file_type in file_types: + local_writer_simple(schema=schema, file_type=file_type) + + for file_type in file_types: + remote_writer_simple(schema=schema, file_type=file_type) + + parallel_append(schema) + + # all vector types + all scalar types + for file_type in file_types: + # Note: bulkinsert doesn't support import npy with array field and sparse vector field + schema = build_all_type_schema(is_numpy=(file_type == BulkFileType.NUMPY)) + batch_files = all_types_writer(schema=schema, file_type=file_type) + call_bulkinsert(schema, batch_files) + retrieve_imported_data() + + + # # to call cloud bulkinsert api, you need to apply a cloud service from Zilliz Cloud(https://zilliz.com/cloud) + # cloud_bulkinsert() + diff --git a/examples/orm_deprecated/bulk_import/example_bulkwriter_with_nullable.py b/examples/orm_deprecated/bulk_import/example_bulkwriter_with_nullable.py new file mode 100644 index 000000000..3deb96fd0 --- /dev/null +++ b/examples/orm_deprecated/bulk_import/example_bulkwriter_with_nullable.py @@ -0,0 +1,369 @@ +import json +import logging +import math +import time +from typing import List + +from examples.orm_deprecated.bulk_import.data_gengerator import * + +logging.basicConfig(level=logging.INFO) + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, +) + +from pymilvus.bulk_writer import ( + RemoteBulkWriter, + BulkFileType, + bulk_import, + get_import_progress, +) + +# minio +MINIO_ADDRESS = "0.0.0.0:9000" +MINIO_SECRET_KEY = "minioadmin" +MINIO_ACCESS_KEY = "minioadmin" + +# milvus +HOST = '127.0.0.1' +PORT = '19530' + +ALL_TYPES_COLLECTION_NAME = "test_bulkwriter" +DIM = 16 + +def create_connection(): + print(f"\nCreate connection...") + connections.connect(host=HOST, port=PORT) + print(f"\nConnected") + +def build_nullalbe_schema(): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="bool", dtype=DataType.BOOL, nullable=True), + FieldSchema(name="int8", dtype=DataType.INT8, nullable=True), + FieldSchema(name="int16", dtype=DataType.INT16, nullable=True), + FieldSchema(name="int32", dtype=DataType.INT32, nullable=True), + FieldSchema(name="int64", dtype=DataType.INT64, nullable=True), + FieldSchema(name="float", dtype=DataType.FLOAT, nullable=True), + FieldSchema(name="double", dtype=DataType.DOUBLE, nullable=True), + FieldSchema(name="varchar", dtype=DataType.VARCHAR, max_length=512, nullable=True), + FieldSchema(name="json", dtype=DataType.JSON, nullable=True), + + FieldSchema(name="array_str", dtype=DataType.ARRAY, max_capacity=100, + element_type=DataType.VARCHAR, max_length=128, nullable=True), + FieldSchema(name="array_int", dtype=DataType.ARRAY, max_capacity=100, + element_type=DataType.INT16, nullable=True), + + FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=DIM), + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + FieldSchema(name="binary_vector", dtype=DataType.BINARY_VECTOR, dim=DIM), + FieldSchema(name="bfloat16_vector", dtype=DataType.BFLOAT16_VECTOR, dim=DIM), + ] + + schema = CollectionSchema(fields=fields, enable_dynamic_field=True) + return schema + +def build_nullable_default_schema(): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="bool", dtype=DataType.BOOL, nullable=True, default_value=False), + FieldSchema(name="int8", dtype=DataType.INT8, nullable=True, default_value=np.int8(8)), + FieldSchema(name="int16", dtype=DataType.INT16, nullable=False, default_value=np.int16(16)), + FieldSchema(name="int32", dtype=DataType.INT32, nullable=True, default_value=None), + FieldSchema(name="int64", dtype=DataType.INT64, nullable=False, default_value=np.int64(64)), + FieldSchema(name="float", dtype=DataType.FLOAT, nullable=True, default_value=np.float32(3.2)), + FieldSchema(name="double", dtype=DataType.DOUBLE, nullable=False, default_value=np.float64(6.4)), + FieldSchema(name="varchar", dtype=DataType.VARCHAR, max_length=512, nullable=True, default_value="this is default"), + + FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=DIM), + ] + + schema = CollectionSchema(fields=fields, enable_dynamic_field=False) + return schema + +def build_collection(schema: CollectionSchema): + if utility.has_collection(ALL_TYPES_COLLECTION_NAME): + utility.drop_collection(ALL_TYPES_COLLECTION_NAME) + + collection = Collection(name=ALL_TYPES_COLLECTION_NAME, schema=schema) + print(f"Collection '{collection.name}' created") + + print("Create index...") + for field in collection.schema.fields: + if (field.dtype == DataType.FLOAT_VECTOR or field.dtype == DataType.FLOAT16_VECTOR + or field.dtype == DataType.BFLOAT16_VECTOR): + collection.create_index(field_name=field.name, index_params={ + "index_type": "FLAT", + "params": {}, + "metric_type": "L2" + }) + elif field.dtype == DataType.BINARY_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "BIN_FLAT", + "params": {}, + "metric_type": "HAMMING" + }) + elif field.dtype == DataType.SPARSE_FLOAT_VECTOR: + collection.create_index(field_name=field.name, index_params={ + "index_type": "SPARSE_INVERTED_INDEX", + "metric_type": "IP", + "params": {"drop_ratio_build": 0.2} + }) + + collection.load() + return collection + + +def gen_nullable_data(): + return [ + { + "id": 1, + "bool": None, + "int8": None, + "int16": None, + "int32": None, + "int64": None, + "float": None, + "double": None, + "varchar": None, + "json": None, + "array_str": None, + "array_int": None, + + "float_vector": gen_float_vector(False, DIM), + "sparse_vector": gen_sparse_vector(False), + "binary_vector": gen_binary_vector(False, DIM), + "bfloat16_vector": gen_bf16_vector(False, DIM), + + "dummy1": None, # dynamic field + }, + { + "id": 2, + "bool": True, + "int8": 22, + "int16": -222, + "int32": 22222, + "int64": -2222222, + "float": 0.2222, + "double": 2.2222222, + "varchar": "22222", + "json": {"222": None}, + "array_str": [f"str_{k}" for k in range(5)], + "array_int": [k for k in range(10)], + + "float_vector": gen_float_vector(False, DIM), + "sparse_vector": gen_sparse_vector(False), + "binary_vector": gen_binary_vector(False, DIM), + "bfloat16_vector": gen_bf16_vector(False, DIM), + + "dummy2": 2222, # dynamic field + }, + { + "id": np.int64(3), + "bool": False, + "int8": np.int8(33), + "int16": np.int16(-333), + "int32": np.int32(33333), + "int64": np.int64(-3333333), + "float": np.float32(0.33333), + "double": np.float64(3.333333333), + "varchar": "333333", + "json": {"333": 33}, + "array_str": np.array([f"str_{k}" for k in range(5)], np.dtype("str")), + "array_int": np.array([k for k in range(10)], np.dtype("int16")), + + "float_vector": gen_float_vector(True, DIM), + "sparse_vector": gen_sparse_vector(True), + "binary_vector": gen_binary_vector(True, DIM), + "bfloat16_vector": gen_bf16_vector(True, DIM), + }, + ] + + +def gen_nullable_default_data(): + return [ + { + "id": 1, + + "float_vector": gen_float_vector(True, DIM), + }, + { + "id": 2, + "bool": None, + "int8": None, + "int16": None, + "int32": None, + "int64": None, + "float": None, + "double": None, + "varchar": None, + + "float_vector": gen_float_vector(True, DIM), + }, + { + "id": 3, + "bool": True, + "int8": 33, + "int16":-333, + "int32": 33333, + "int64": -3333333, + "float": 0.33333, + "double": 3.333333333, + "varchar": "333333", + + "float_vector": gen_float_vector(True, DIM), + }, + ] + +def gen_data_files(schema: CollectionSchema, file_type: BulkFileType, rows: list)-> List[List[str]]: + print(f"\n===================== File type:{file_type.name} ====================") + with RemoteBulkWriter( + schema=schema, + remote_path="bulk_data", + connect_param=RemoteBulkWriter.S3ConnectParam( + endpoint=MINIO_ADDRESS, + access_key=MINIO_ACCESS_KEY, + secret_key=MINIO_SECRET_KEY, + bucket_name="a-bucket", + ), + file_type=file_type, + ) as writer: + # with LocalBulkWriter( + # schema=schema, + # local_path="/tmp/bulk_writer", + # segment_size=128 * 1024 * 1024, + # file_type=file_type, + # ) as writer: + print("Append rows") + for row in rows: + writer.append_row(row) + + print(f"{writer.total_row_count} rows appends") + print(f"{writer.buffer_row_count} rows in buffer not flushed") + print("Generate data files...") + writer.commit() + print(f"Data files have been uploaded: {writer.batch_files}") + return writer.batch_files + + +def call_bulkinsert(batch_files: List[List[str]]): + url = f"http://{HOST}:{PORT}" + print(f"\n===================== Import files to milvus ====================") + resp = bulk_import( + url=url, + collection_name=ALL_TYPES_COLLECTION_NAME, + files=batch_files, + ) + print(resp.json()) + job_id = resp.json()['data']['jobId'] + print(f"Create a bulkinsert job, job id: {job_id}") + + while True: + print("Wait 5 second to check bulkinsert job state...") + time.sleep(5) + + print(f"\n===================== Get import job progress ====================") + resp = get_import_progress( + url=url, + job_id=job_id, + ) + + state = resp.json()['data']['state'] + progress = resp.json()['data']['progress'] + if state == "Importing": + print(f"The job {job_id} is importing... {progress}%") + continue + if state == "Failed": + reason = resp.json()['data']['reason'] + print(f"The job {job_id} failed, reason: {reason}") + break + if state == "Completed" and progress == 100: + print(f"The job {job_id} completed") + break + + collection = Collection(name=ALL_TYPES_COLLECTION_NAME) + collection.load(refresh=True) + print(f"Collection row number: {collection.num_entities}") + + +def compare_values(a, b, field_name: str): + if isinstance(a, list) and isinstance(b, list): + if len(b) == len(a): + # array, float vector field + for i, val in enumerate(a): + compare_values(val, b[i], field_name) + elif len(b) == 1: + # binary vector field + if len(b[0]) == DIM/8: + if len(a) == DIM: + a = np.packbits(a, axis=-1) + int8_array = np.frombuffer(b[0], dtype=np.uint8) + for i, val in enumerate(a): + compare_values(val, int8_array[i], field_name) + else: + raise Exception(f"Unknown case for field '{field_name}': {a} vs {b}") + elif isinstance(b, list) and isinstance(b[0], bytes): + # flaot16/bfloat16 vector field + compare_values(a, b[0], field_name) + elif isinstance(a, dict) and isinstance(b, dict): + # json, sparse vector field + if "indices" in a.keys(): + a = dict(zip(a["indices"], a["values"])) + for k, v in a.items(): + compare_values(v, b[k], field_name) + elif isinstance(a, dict) and isinstance(b, str): + # json field + s = json.dumps(a) + compare_values(s, b, field_name) + elif isinstance(a, float): + if not math.isclose(a, b, abs_tol=1e-5): + raise Exception(f"Unmatch value for field `{field_name}`: {a} vs {b}") + elif a != b: + raise Exception(f"Unmatch value for field `{field_name}`: {a} vs {b}") + +def verify_data(compare_rows: list): + collection = Collection(name=ALL_TYPES_COLLECTION_NAME) + ids = [row["id"] for row in compare_rows] + print(f"Query items {ids}") + expr = f"id in {ids}" + print(expr) + results = collection.query(expr=expr, output_fields=["*"]) + print(f"\n===================== Query results ====================") + for i, row in enumerate(compare_rows): + result = results[i] + print(result) + for k, v in row.items(): + compare_values(v, result[k], k) + print("Retrieved data is correct") + +if __name__ == '__main__': + create_connection() + + file_types = [ + BulkFileType.JSON, + BulkFileType.PARQUET, + BulkFileType.CSV, + ] + + # deal with nullable schema + for file_type in file_types: + schema = build_nullalbe_schema() + rows = gen_nullable_data() + batch_files = gen_data_files(schema=schema, file_type=file_type, rows=rows) + if len(batch_files) > 0: + build_collection(schema) + call_bulkinsert(batch_files) + verify_data(rows) + + # deal with nullalbe&default_value schema + for file_type in file_types: + schema = build_nullable_default_schema() + rows = gen_nullable_default_data() + batch_files = gen_data_files(schema=schema, file_type=file_type, rows=rows) + if len(batch_files) > 0: + build_collection(schema) + call_bulkinsert(batch_files) + verify_data(rows) diff --git a/examples/orm_deprecated/bulk_import/train_embeddings.csv b/examples/orm_deprecated/bulk_import/train_embeddings.csv new file mode 100644 index 000000000..de39e4d1c --- /dev/null +++ b/examples/orm_deprecated/bulk_import/train_embeddings.csv @@ -0,0 +1,101 @@ +path,label,vector +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" +./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]" diff --git a/examples/collection.py b/examples/orm_deprecated/collection.py similarity index 78% rename from examples/collection.py rename to examples/orm_deprecated/collection.py index a95f7c569..217bd0a4c 100644 --- a/examples/collection.py +++ b/examples/orm_deprecated/collection.py @@ -10,18 +10,21 @@ # or implied. See the License for the specific language governing permissions and limitations under the License. from pymilvus import Collection, connections, FieldSchema, CollectionSchema, DataType, utility +from pymilvus.client.types import LoadState import random import numpy as np -from sklearn import preprocessing +import pandas + import string +from pymilvus.orm import db + default_dim = 128 default_nb = 3000 default_float_vec_field_name = "float_vector" default_binary_vec_field_name = "binary_vector" - all_index_types = [ "FLAT", "IVF_FLAT", @@ -30,10 +33,10 @@ "IVF_PQ", "HNSW", # "NSG", - "ANNOY", - "RHNSW_FLAT", - "RHNSW_PQ", - "RHNSW_SQ", + # "ANNOY", + # "RHNSW_FLAT", + # "RHNSW_PQ", + # "RHNSW_SQ", "BIN_FLAT", "BIN_IVF_FLAT" ] @@ -54,7 +57,6 @@ {"nlist": 128} ] - default_index = {"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"} default_binary_index = {"index_type": "BIN_FLAT", "params": {"nlist": 1024}, "metric_type": "JACCARD"} @@ -99,30 +101,24 @@ def gen_binary_schema(): return default_schema -def gen_float_vectors(num, dim, is_normal=True): - vectors = [[random.random() for _ in range(dim)] for _ in range(num)] - vectors = preprocessing.normalize(vectors, axis=1, norm='l2') - return vectors.tolist() +def gen_float_vectors(num, dim): + return [[random.random() for _ in range(dim)] for _ in range(num)] -def gen_float_data(nb, is_normal=False): - vectors = gen_float_vectors(nb, default_dim, is_normal) +def gen_float_data(nb): entities = [ [i for i in range(nb)], [float(i) for i in range(nb)], - vectors + gen_float_vectors(nb, default_dim), ] return entities -def gen_dataframe(nb, is_normal=False): - import pandas - import numpy - - vectors = gen_float_vectors(nb, default_dim, is_normal) +def gen_dataframe(nb): + vectors = gen_float_vectors(nb, default_dim) data = { "int64": [i for i in range(nb)], - "float": numpy.array([i for i in range(nb)], dtype=numpy.float32), + "float": np.array([i for i in range(nb)], dtype=np.float32), "float_vector": vectors } @@ -177,6 +173,7 @@ def test_create_collection(): collection = Collection(name=name, schema=gen_default_fields()) assert collection.is_empty is True assert collection.num_entities == 0 + assert utility.load_state(name) == LoadState.NotLoad return name @@ -192,15 +189,20 @@ def test_collection_only_name(): collection = Collection(name=name) data = gen_float_data(default_nb) collection.insert(data) + collection.flush() + collection.create_index(field_name=default_float_vec_field_name, index_params=default_index) collection.load() assert collection.is_empty is False assert collection.num_entities == default_nb + assert utility.load_state(name) == LoadState.Loaded collection.drop() def test_collection_with_dataframe(): data = gen_dataframe(default_nb) collection, _ = Collection.construct_from_dataframe(name=gen_unique_str(), dataframe=data, primary_field="int64") + collection.flush() + collection.create_index(field_name=default_float_vec_field_name, index_params=default_index) collection.load() assert collection.is_empty is False assert collection.num_entities == default_nb @@ -212,7 +214,8 @@ def test_create_index_float_vector(): collection = Collection(name=gen_unique_str(), data=data, schema=gen_default_fields()) for index_param in gen_simple_index(): collection.create_index(field_name=default_float_vec_field_name, index_params=index_param) - assert len(collection.indexes) != 0 + assert len(collection.indexes) != 0 + collection.drop_index() collection.drop() @@ -230,13 +233,15 @@ def test_specify_primary_key(): collection = Collection(name=gen_unique_str(), data=data, schema=gen_default_fields_with_primary_key_1()) for index_param in gen_simple_index(): collection.create_index(field_name=default_float_vec_field_name, index_params=index_param) - assert len(collection.indexes) != 0 + assert len(collection.indexes) != 0 + collection.drop_index() collection.drop() collection2 = Collection(name=gen_unique_str(), data=data, schema=gen_default_fields_with_primary_key_2()) for index_param in gen_simple_index(): collection2.create_index(field_name=default_float_vec_field_name, index_params=index_param) - assert len(collection2.indexes) != 0 + assert len(collection2.indexes) != 0 + collection2.drop_index() collection2.drop() @@ -290,6 +295,43 @@ def alias_cases(): alias_cases() +def test_rename_collection(): + connections.connect(alias="default") + schema = CollectionSchema(fields=[ + FieldSchema("int64", DataType.INT64, description="int64", is_primary=True), + FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128), + ]) + + old_collection = gen_unique_str() + new_collection = gen_unique_str() + Collection(old_collection, schema=schema) + + print("\nlist collections:") + print("rename collection name start, db:default, collections:", utility.list_collections()) + assert utility.has_collection(old_collection) + + utility.rename_collection(old_collection, new_collection) + assert utility.has_collection(new_collection) + assert not utility.has_collection(old_collection) + print("rename collection name end, db:default, collections:", utility.list_collections()) + + # create db1 + new_db = "new_db" + if new_db not in db.list_database(): + print("\ncreate database: new_db") + db.create_database(db_name=new_db) + utility.rename_collection(new_collection, new_collection, new_db) + print("rename db name end, db:default, collections:", utility.list_collections()) + + db.using_database(db_name=new_db) + assert utility.has_collection(new_collection) + print("rename db name end, db:", new_db, "collections:", utility.list_collections()) + + db.using_database(db_name="default") + assert not utility.has_collection(new_collection) + print("db:default, collections:", utility.list_collections()) + + if __name__ == "__main__": print("test collection and get an existing collection") name = test_create_collection() @@ -307,4 +349,6 @@ def alias_cases(): test_specify_primary_key() print("test alias") test_alias() + print("test rename collection") + test_rename_collection() print("test end") diff --git a/examples/orm_deprecated/concurrency/multithreading_hello_milvus.py b/examples/orm_deprecated/concurrency/multithreading_hello_milvus.py new file mode 100644 index 000000000..56ed59087 --- /dev/null +++ b/examples/orm_deprecated/concurrency/multithreading_hello_milvus.py @@ -0,0 +1,77 @@ +import time + +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +import threading +import concurrent + +fmt = "\n=== {:30} ===" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 3000, 8 + +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +if utility.has_collection("hello_milvus"): + utility.drop_collection("hello_milvus") + print(f"Dropping existing collection hello_milvus") + +fields = [ + FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + +schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs") + +print(fmt.format("Create collection `hello_milvus`")) +hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong") + + +class MilvusMultiThreadingInsert: + def __init__(self, collection_name: str, number_of_batch: int): + + self.thread_local = threading.local() + self.collection_name = collection_name + self.batchs = [i for i in range(number_of_batch)] + + def get_thread_local_collection(self): + if not hasattr(self.thread_local, "collection"): + self.thread_local.collection = Collection(self.collection_name) + return self.thread_local.collection + + def insert_data(self, number: int): + print(fmt.format(f"No.{number:2}: Start inserting entities")) + rng = np.random.default_rng(seed=number) + entities = [ + [i for i in range(num_entities)], + rng.random(num_entities).tolist(), + rng.random((num_entities, dim)), + ] + + insert_result = hello_milvus.insert(entities) + assert len(insert_result.primary_keys) == num_entities + print(fmt.format(f"No.{number:2}: Finish inserting entities")) + + def insert_all_batches(self): + with concurrent.futures.ThreadPoolExecutor(max_workers=12) as executor: + executor.map(self.insert_data, self.batchs) + + def run(self): + start_time = time.time() + self.insert_all_batches() + duration = time.time() - start_time + print(f'Inserted {len(self.batchs)} batches of {num_entities} entities in {duration} seconds') + print(f"Expected num_entities: {len(self.batchs)*num_entities}. \ + Acutal num_entites: {self.get_thread_local_collection().num_entities}") + + +if __name__ == "__main__": + multithreading_insert = MilvusMultiThreadingInsert("hello_milvus", 10) + multithreading_insert.run() diff --git a/examples/orm_deprecated/database.py b/examples/orm_deprecated/database.py new file mode 100644 index 000000000..ca7a0164a --- /dev/null +++ b/examples/orm_deprecated/database.py @@ -0,0 +1,155 @@ +import random + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + db, +) +from pymilvus.orm import utility + +_HOST = '127.0.0.1' +_PORT = '19530' +_ROOT = "root" +_ROOT_PASSWORD = "Milvus" +_METRIC_TYPE = 'IP' +_INDEX_TYPE = 'IVF_FLAT' +_NLIST = 1024 +_NPROBE = 16 +_TOPK = 3 + +# Vector parameters +_DIM = 128 +_INDEX_FILE_SIZE = 32 # max file size of stored index + + +def connect_to_milvus(db_name="default"): + print(f"connect to milvus\n") + connections.connect(host=_HOST, + port=_PORT, + user=_ROOT, + password=_ROOT_PASSWORD, + db_name=db_name, + ) + + +def connect_to_milvus_with_uri(db_name="default"): + print(f"connect to milvus\n") + connections.connect( + alias="uri-connection", + uri="http://{}:{}/{}".format(_HOST, _PORT, db_name), + ) + + +def create_collection(collection_name, db_name): + default_fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="double", dtype=DataType.DOUBLE), + FieldSchema(name="fv", dtype=DataType.FLOAT_VECTOR, dim=128) + ] + default_schema = CollectionSchema(fields=default_fields) + print(f"Create collection:{collection_name} within db:{db_name}") + return Collection(name=collection_name, schema=default_schema) + + +def insert(collection, num, dim): + data = [ + [i for i in range(num)], + [float(i) for i in range(num)], + [[random.random() for _ in range(dim)] for _ in range(num)], + ] + collection.insert(data) + return data[2] + + +def drop_index(collection): + collection.drop_index() + print("\nDrop index sucessfully") + + +def search(collection, vector_field, id_field, search_vectors): + search_param = { + "data": search_vectors, + "anns_field": vector_field, + "param": {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}}, + "limit": _TOPK, + "expr": "id >= 0"} + results = collection.search(**search_param) + for i, result in enumerate(results): + print("\nSearch result for {}th vector: ".format(i)) + for j, res in enumerate(result): + print("Top {}: {}".format(j, res)) + + +def collection_read_write(collection, db_name): + col_name = "{}:{}".format(db_name, collection.name) + vectors = insert(collection, 10000, _DIM) + collection.flush() + print("\nInsert {} rows data into collection:{}".format(collection.num_entities, col_name)) + + # create index + index_param = { + "index_type": _INDEX_TYPE, + "params": {"nlist": _NLIST}, + "metric_type": _METRIC_TYPE} + collection.create_index("fv", index_param) + print("\nCreated index:{} for collection:{}".format(collection.index().params, col_name)) + + # load data to memory + print("\nLoad collection:{}".format(col_name)) + collection.load() + # search + print("\nSearch collection:{}".format(col_name)) + search(collection, "fv", "id", vectors[:3]) + + # release memory + collection.release() + # drop collection index + collection.drop_index() + print("\nDrop collection:{}".format(col_name)) + + +if __name__ == '__main__': + # connect to milvus and using database db1 + # there will not check db1 already exists during connect + connect_to_milvus(db_name="default") + + # create collection within default + col1_db1 = create_collection("col1_db1", "default") + + db1Name = "db1" + # create db1 + if db1Name not in db.list_database(): + print("\ncreate database: db1") + db.create_database(db_name=db1Name, properties={"key1":"value1"}) + db_info = db.describe_database(db_name=db1Name) + print(db_info) + + # use database db1 + db.using_database(db_name=db1Name) + # create collection within default + col2_db1 = create_collection("col1_db1", db1Name) + + # verify read and write + collection_read_write(col2_db1, db1Name) + + # list collections within db1 + print("\nlist collections of database db1:") + print(utility.list_collections()) + + # set properties of db1 + db_info = db.describe_database(db_name=db1Name) + print(db_info) + print("\nset properties of db1:") + db.set_properties(db_name=db1Name, properties={"key": "value"}) + db_info = db.describe_database(db_name=db1Name) + print(db_info) + + print("\ndrop collection: col1_db2 from db1") + col2_db1.drop() + print("\ndrop database: db1") + db.drop_database(db_name=db1Name) + + # list database + print("\nlist databases:") + print(db.list_database()) diff --git a/examples/orm_deprecated/datatypes/bfloat16_example.py b/examples/orm_deprecated/datatypes/bfloat16_example.py new file mode 100644 index 000000000..cf62ecd4e --- /dev/null +++ b/examples/orm_deprecated/datatypes/bfloat16_example.py @@ -0,0 +1,76 @@ +import time +import random +import numpy as np +import tensorflow as tf +import torch +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, + ) +from pymilvus import MilvusClient + +bf16_index_types = ["FLAT"] + +default_bf16_index_params = [{"nlist": 128}] + +def gen_bf16_vectors(num, dim): + raw_vectors = [] + bf16_vectors = [] + for _ in range(num): + raw_vector = [random.random() for _ in range(dim)] + raw_vectors.append(raw_vector) + # Numpy itself does not support bfloat16, use TensorFlow extension instead. + # PyTorch does not support converting bfloat16 vector to numpy array. + # See: + # - https://github.com/numpy/numpy/issues/19808 + # - https://github.com/pytorch/pytorch/issues/90574 + bf16_vector = tf.cast(raw_vector, dtype=tf.bfloat16).numpy() + bf16_vectors.append(bf16_vector) + return raw_vectors, bf16_vectors + +def bf16_vector_search(): + connections.connect() + + int64_field = FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True, auto_id=True) + dim = 128 + nb = 3000 + vector_field_name = "bfloat16_vector" + bf16_vector = FieldSchema(name=vector_field_name, dtype=DataType.BFLOAT16_VECTOR, dim=dim) + schema = CollectionSchema(fields=[int64_field, bf16_vector]) + + if utility.has_collection("hello_milvus_fp16"): + utility.drop_collection("hello_milvus_fp16") + hello_milvus = Collection("hello_milvus_fp16", schema, consistency_level="Strong") + + _, vectors = gen_bf16_vectors(nb, dim) + hello_milvus.insert([vectors[:6]]) + rows = [ + {vector_field_name: vectors[6]}, + {vector_field_name: vectors[7]}, + {vector_field_name: vectors[8]}, + {vector_field_name: vectors[9]}, + {vector_field_name: vectors[10]}, + {vector_field_name: vectors[11]}, + ] + hello_milvus.insert(rows) + hello_milvus.flush() + + for i, index_type in enumerate(bf16_index_types): + index_params = default_bf16_index_params[i] + hello_milvus.create_index(vector_field_name, + index_params={"index_type": index_type, "params": index_params, "metric_type": "L2"}) + hello_milvus.load() + print("index_type = ", index_type) + res = hello_milvus.search(vectors[0:10], vector_field_name, {"metric_type": "L2"}, limit=1, output_fields=["bfloat16_vector"]) + print("raw bytes: ", res[0][0].get("bfloat16_vector")) + print("tensorflow Tensor: ", tf.io.decode_raw(res[0][0].get("bfloat16_vector"), tf.bfloat16, little_endian=True)) + print("pytorch Tensor: ", torch.frombuffer(res[0][0].get("bfloat16_vector"), dtype=torch.bfloat16)) + hello_milvus.release() + hello_milvus.drop_index() + + hello_milvus.drop() + +if __name__ == "__main__": + bf16_vector_search() diff --git a/examples/orm_deprecated/datatypes/binary_example.py b/examples/orm_deprecated/datatypes/binary_example.py new file mode 100644 index 000000000..80e5da627 --- /dev/null +++ b/examples/orm_deprecated/datatypes/binary_example.py @@ -0,0 +1,69 @@ +import time +import random +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, + ) + + +bin_index_types = ["BIN_FLAT", "BIN_IVF_FLAT"] + +default_bin_index_params = [{"nlist": 128}, {"nlist": 128}] + +def gen_binary_vectors(num, dim): + raw_vectors = [] + binary_vectors = [] + for _ in range(num): + raw_vector = [random.randint(0, 1) for _ in range(dim)] + raw_vectors.append(raw_vector) + # packs a binary-valued array into bits in a unit8 array, and bytes array_of_ints + binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist())) + return raw_vectors, binary_vectors + + +def binary_vector_search(): + connections.connect() + int64_field = FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True, auto_id=True) + dim = 128 + nb = 3000 + vector_field_name = "binary_vector" + binary_vector = FieldSchema(name=vector_field_name, dtype=DataType.BINARY_VECTOR, dim=dim) + schema = CollectionSchema(fields=[int64_field, binary_vector], enable_dynamic_field=True) + + has = utility.has_collection("hello_milvus") + if has: + hello_milvus = Collection("hello_milvus_bin") + hello_milvus.drop() + else: + hello_milvus = Collection("hello_milvus_bin", schema) + + _, vectors = gen_binary_vectors(nb, dim) + rows = [ + {vector_field_name: vectors[0]}, + {vector_field_name: vectors[1]}, + {vector_field_name: vectors[2]}, + {vector_field_name: vectors[3]}, + {vector_field_name: vectors[4]}, + {vector_field_name: vectors[5]}, + ] + + hello_milvus.insert(rows) + hello_milvus.flush() + for i, index_type in enumerate(bin_index_types): + index_params = default_bin_index_params[i] + hello_milvus.create_index(vector_field_name, + index_params={"index_type": index_type, "params": index_params, "metric_type": "HAMMING"}) + hello_milvus.load() + print("index_type = ", index_type) + res = hello_milvus.search(vectors[:1], vector_field_name, {"metric_type": "HAMMING"}, limit=1) + print("res = ", res) + hello_milvus.release() + hello_milvus.drop_index() + hello_milvus.drop() + + +if __name__ == "__main__": + binary_vector_search() diff --git a/examples/orm_deprecated/datatypes/dynamic_field.py b/examples/orm_deprecated/datatypes/dynamic_field.py new file mode 100644 index 000000000..d24062cee --- /dev/null +++ b/examples/orm_deprecated/datatypes/dynamic_field.py @@ -0,0 +1,100 @@ +import time +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 + +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_milvus") +print(f"Does collection hello_milvus exist in Milvus: {has}") +if has: + utility.drop_collection("hello_milvus") + +fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + +schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs", enable_dynamic_field=True) + +print(fmt.format("Create collection `hello_milvus`")) +hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong") + +################################################################################ +# 3. insert data +hello_milvus2 = Collection("hello_milvus") +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) + +rows = [ + {"pk": "1", "random": 1.0, "embeddings": rng.random((1, dim))[0], "a": 1}, + {"pk": "2", "random": 1.0, "embeddings": rng.random((1, dim))[0], "b": 1}, + {"pk": "3", "random": 1.0, "embeddings": rng.random((1, dim))[0], "c": 1}, + {"pk": "4", "random": 1.0, "embeddings": rng.random((1, dim))[0], "d": 1}, + {"pk": "5", "random": 1.0, "embeddings": rng.random((1, dim))[0], "e": 1}, + {"pk": "6", "random": 1.0, "embeddings": rng.random((1, dim))[0], "f": 1}, + ] + +insert_result = hello_milvus.insert(rows) + +hello_milvus.insert({"pk": "7", "random": 1.0, "embeddings": rng.random((1, dim))[0], "g": 1}) +hello_milvus.flush() +print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entites + +# 4. create index +print(fmt.format("Start Creating index IVF_FLAT")) +index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, +} + +hello_milvus.create_index("embeddings", index) + +print(fmt.format("Start loading")) +hello_milvus.load() +# ----------------------------------------------------------------------------- +# search based on vector similarity +print(fmt.format("Start searching based on vector similarity")) + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) +search_params = { + "metric_type": "L2", + "params": {"nprobe": 10}, +} + +start_time = time.time() +result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["pk", "embeddings"]) +end_time = time.time() + +for hits in result: + for hit in hits: + print(f"hit: {hit}") + + +result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["pk", "embeddings", "$meta"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +expr = f'pk in ["1" , "2"] || g == 1' + +print(fmt.format(f"Start query with expr `{expr}`")) +result = hello_milvus.query(expr=expr, output_fields=["random", "a", "g"]) +for hit in result: + print("hit:", hit) + +############################################################################### +# 7. drop collection +print(fmt.format("Drop collection `hello_milvus`")) +utility.drop_collection("hello_milvus") diff --git a/examples/orm_deprecated/datatypes/example_str.py b/examples/orm_deprecated/datatypes/example_str.py new file mode 100644 index 000000000..9c72edd34 --- /dev/null +++ b/examples/orm_deprecated/datatypes/example_str.py @@ -0,0 +1,169 @@ +import random + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a collection +# 3. insert entities +# 4. create index +# 5. search + + +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' +_STR_FIELD_NAME = "str_field" +_MAX_LENGTH = 65535 + +# Vector parameters +_DIM = 8 +_INDEX_FILE_SIZE = 32 # max file size of stored index + +# Index parameters +_METRIC_TYPE = 'L2' +_INDEX_TYPE = 'IVF_FLAT' +_NLIST = 1024 +_NPROBE = 16 +_TOPK = 3 + + +# Create a Milvus connection +def create_connection(): + print(f"\nCreate connection...") + connections.connect(host=_HOST, port=_PORT) + print(f"\nList connections:") + print(connections.list_connections()) + + +# Create a collection named 'demo' +def create_collection(name, id_field, vector_field, str_field): + field1 = FieldSchema(name=id_field, dtype=DataType.INT64, description="int64", is_primary=True) + field2 = FieldSchema(name=vector_field, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, + is_primary=False) + field3 = FieldSchema(name=str_field, dtype=DataType.VARCHAR, description="string", + max_length=_MAX_LENGTH, is_primary=False) + schema = CollectionSchema(fields=[field1, field2, field3], description="collection description") + collection = Collection(name=name, data=None, schema=schema) + print("\ncollection created:", name) + return collection + + +def has_collection(name): + return utility.has_collection(name) + + +# Drop a collection in Milvus +def drop_collection(name): + collection = Collection(name) + collection.drop() + print("\nDrop collection: {}".format(name)) + + +# List all collections in Milvus +def list_collections(): + print("\nlist collections:") + print(utility.list_collections()) + + +def insert(collection, num, dim): + data = [ + [i for i in range(num)], # id field + [[random.random() for _ in range(dim)] for _ in range(num)], # vector field + [str(random.random()) for _ in range(num)], # string field + ] + collection.insert(data) + return data[1] + + +def get_entity_num(collection): + print("\nThe number of entity:") + print(collection.num_entities) + + +def create_index(collection, filed_name): + index_param = { + "index_type": _INDEX_TYPE, + "params": {"nlist": _NLIST}, + "metric_type": _METRIC_TYPE} + collection.create_index(filed_name, index_param) + print("\nCreated index:\n{}".format(collection.index().params)) + + +def drop_index(collection): + collection.drop_index() + print("\nDrop index sucessfully") + + +def load_collection(collection): + collection.load() + + +def release_collection(collection): + collection.release() + + +def search(collection, vector_field, id_field, search_vectors): + search_param = { + "data": search_vectors, + "anns_field": vector_field, + "param": {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}}, + "limit": _TOPK, + "expr": "id_field > 0"} + results = collection.search(**search_param) + for i, result in enumerate(results): + print("\nSearch result for {}th vector: ".format(i)) + for j, res in enumerate(result): + print("Top {}: {}".format(j, res)) + + +def main(): + # create a connection + create_connection() + + # drop collection if the collection exists + if has_collection(_COLLECTION_NAME): + drop_collection(_COLLECTION_NAME) + + # create collection + collection = create_collection(_COLLECTION_NAME, _ID_FIELD_NAME, _VECTOR_FIELD_NAME, _STR_FIELD_NAME) + + # show collections + list_collections() + + # insert 10000 vectors with 128 dimension + vectors = insert(collection, 10, _DIM) + + # get the number of entities + get_entity_num(collection) + + # create index + create_index(collection, _VECTOR_FIELD_NAME) + + # load data to memory + load_collection(collection) + + # search + search(collection, _VECTOR_FIELD_NAME, _ID_FIELD_NAME, vectors[:3]) + + # drop collection index + drop_index(collection) + + # release memory + release_collection(collection) + + # drop collection + drop_collection(_COLLECTION_NAME) + + +if __name__ == '__main__': + main() diff --git a/examples/orm_deprecated/datatypes/float16_example.py b/examples/orm_deprecated/datatypes/float16_example.py new file mode 100644 index 000000000..cf9bde21a --- /dev/null +++ b/examples/orm_deprecated/datatypes/float16_example.py @@ -0,0 +1,72 @@ +import time +import random +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, + ) +from pymilvus import MilvusClient + +fp16_index_types = ["FLAT"] + +default_fp16_index_params = [{"nlist": 128}] + +# float16, little endian +fp16_little = np.dtype('e').newbyteorder('<') + +def gen_fp16_vectors(num, dim): + raw_vectors = [] + fp16_vectors = [] + for _ in range(num): + raw_vector = [random.random() for _ in range(dim)] + raw_vectors.append(raw_vector) + fp16_vector = np.array(raw_vector, dtype=fp16_little) + fp16_vectors.append(fp16_vector) + return raw_vectors, fp16_vectors + +def fp16_vector_search(): + connections.connect() + + int64_field = FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True, auto_id=True) + dim = 128 + nb = 3000 + vector_field_name = "float16_vector" + fp16_vector = FieldSchema(name=vector_field_name, dtype=DataType.FLOAT16_VECTOR, dim=dim) + schema = CollectionSchema(fields=[int64_field, fp16_vector]) + + if utility.has_collection("hello_milvus_fp16"): + utility.drop_collection("hello_milvus_fp16") + + hello_milvus = Collection("hello_milvus_fp16", schema) + + _, vectors = gen_fp16_vectors(nb, dim) + hello_milvus.insert([vectors[:6]]) + rows = [ + {vector_field_name: vectors[6]}, + {vector_field_name: vectors[7]}, + {vector_field_name: vectors[8]}, + {vector_field_name: vectors[9]}, + {vector_field_name: vectors[10]}, + {vector_field_name: vectors[11]}, + ] + hello_milvus.insert(rows) + hello_milvus.flush() + + for i, index_type in enumerate(fp16_index_types): + index_params = default_fp16_index_params[i] + hello_milvus.create_index(vector_field_name, + index_params={"index_type": index_type, "params": index_params, "metric_type": "L2"}) + hello_milvus.load() + print("index_type = ", index_type) + res = hello_milvus.search(vectors[0:10], vector_field_name, {"metric_type": "L2"}, limit=1, output_fields=["float16_vector"]) + print("raw bytes: ", res[0][0].get("float16_vector")) + print("numpy ndarray: ", np.frombuffer(res[0][0].get("float16_vector"), dtype=fp16_little)) + hello_milvus.release() + hello_milvus.drop_index() + + hello_milvus.drop() + +if __name__ == "__main__": + fp16_vector_search() diff --git a/examples/orm_deprecated/datatypes/fuzzy_match.py b/examples/orm_deprecated/datatypes/fuzzy_match.py new file mode 100644 index 000000000..0e9af72d2 --- /dev/null +++ b/examples/orm_deprecated/datatypes/fuzzy_match.py @@ -0,0 +1,77 @@ +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +DIMENSION = 8 +COLLECTION_NAME = "books" +connections.connect("default", host="localhost", port="19530") + +fields = [ + FieldSchema(name='id', dtype=DataType.INT64, is_primary=True), + FieldSchema(name='title', dtype=DataType.VARCHAR, max_length=200), + FieldSchema(name='release_year', dtype=DataType.INT64), + FieldSchema(name='embeddings', dtype=DataType.FLOAT_VECTOR, dim=DIMENSION), +] +schema = CollectionSchema(fields=fields, enable_dynamic_field=True) +collection = Collection(name=COLLECTION_NAME, schema=schema) + +data_rows = [ + { + "id": 1, + "title": "Lord of the Flies", + "release_year": 1954, + "embeddings": [0.64, 0.44, 0.13, 0.47, 0.74, 0.03, 0.32, 0.6], + }, + { + "id": 2, + "title": "The Great Gatsby", + "release_year": 1925, + "embeddings": [0.9, 0.45, 0.18, 0.43, 0.4, 0.4, 0.7, 0.24], + }, + { + "id": 3, + "title": "The Catcher in the Rye", + "release_year": 1951, + "embeddings": [0.43, 0.57, 0.43, 0.88, 0.84, 0.69, 0.27, 0.98], + }, + { + "id": 4, + "title": "Flipped", + "release_year": 2010, + "embeddings": [0.84, 0.69, 0.27, 0.43, 0.57, 0.43, 0.88, 0.98], + }, +] + +collection.insert(data_rows) +collection.create_index( + "embeddings", {"index_type": "FLAT", "metric_type": "L2"}) + +collection.load() + +# prefix match. +res = collection.query(expr='title like "The%"', output_fields=["id", "title"]) +print(res) + +# infix match. +res = collection.query(expr='title like "%the%"', output_fields=["id", "title"]) +print(res) + +# postfix match. +res = collection.query(expr='title like "%Rye"', output_fields=["id", "title"]) +print(res) + +# _ match any one and only one character. +res = collection.query(expr='title like "Flip_ed"', output_fields=["id", "title"]) +print(res) + +# you can create inverted index to accelerate the fuzzy match. +collection.release() +collection.create_index( + "title", {"index_type": "INVERTED"}) +collection.load() + +# _ match any one and only one character. +res = collection.query(expr='title like "Flip_ed"', output_fields=["id", "title"]) +print(res) diff --git a/examples/orm_deprecated/datatypes/hello_bm25.py b/examples/orm_deprecated/datatypes/hello_bm25.py new file mode 100644 index 000000000..9a3739e96 --- /dev/null +++ b/examples/orm_deprecated/datatypes/hello_bm25.py @@ -0,0 +1,215 @@ +# hello_bm25.py demonstrates how to insert raw data only into Milvus and perform +# sparse vector based ANN search using BM25 algorithm. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search, query, and filtering search on entities +# 6. delete entities by PK +# 7. drop collection +import time + +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, Function, DataType, FunctionType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" + +################################################################################# +# 1. connect to Milvus +# Add a new connection alias `default` for Milvus server in `localhost:19530` +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_bm25") +print(f"Does collection hello_bm25 exist in Milvus: {has}") + +################################################################################# +# 2. create collection +# We're going to create a collection with 2 explicit fields and a function. +# +-+------------+------------+------------------+------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+------------+------------+------------------+------------------------------+ +# |1| "id" | INT64 | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+------------+------------+------------------+------------------------------+ +# |2| "document" | VarChar | | "raw text document" | +# +-+------------+------------+------------------+------------------------------+ +# +# Function 'bm25' is used to convert raw text document to a sparse vector representation +# and store it in the 'sparse' field. +# +-+------------+-------------------+-----------+------------------------------+ +# | | field name | field type | other attr| field description | +# +-+------------+-------------------+-----------+------------------------------+ +# |3| "sparse" |SPARSE_FLOAT_VECTOR| | | +# +-+------------+-------------------+-----------+------------------------------+ +# +fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), + FieldSchema(name="sparse", dtype=DataType.SPARSE_FLOAT_VECTOR), + FieldSchema(name="document", dtype=DataType.VARCHAR, max_length=1000, enable_analyzer=True), +] + +bm25_function = Function( + name="bm25", + function_type=FunctionType.BM25, + input_field_names=["document"], + output_field_names="sparse", +) + +schema = CollectionSchema(fields, "hello_bm25 demo") +schema.add_function(bm25_function) + +print(fmt.format("Create collection `hello_bm25`")) +hello_bm25 = Collection("hello_bm25", schema, consistency_level="Strong") + +################################################################################ +# 3. insert data +# We are going to insert 3 rows of data into `hello_bm25` +# Data to be inserted must be organized in fields. +# +# The insert() method returns: +# - either automatically generated primary keys by Milvus if auto_id=True in the schema; +# - or the existing primary key field from the entities if auto_id=False in the schema. + +print(fmt.format("Start inserting entities")) + +num_entities = 6 + +entities = [ + [f"This is a test document {i + hello_bm25.num_entities}" for i in range(num_entities)], +] + +insert_result = hello_bm25.insert(entities) +ids = insert_result.primary_keys + +time.sleep(3) + +hello_bm25.flush() +print(f"Number of entities in Milvus: {hello_bm25.num_entities}") # check the num_entities + +################################################################################ +# 4. create index +# We are going to create an index for hello_bm25 collection, here we simply +# uses AUTOINDEX so Milvus can use the default parameters. +print(fmt.format("Start Creating index AUTOINDEX")) +index = { + "index_type": "AUTOINDEX", + "metric_type": "BM25", +} + +hello_bm25.create_index("sparse", index) + +################################################################################ +# 5. search, query, and scalar filtering search +# After data were inserted into Milvus and indexed, you can perform: +# - search texts relevance by BM25 using sparse vector ANN search +# - query based on scalar filtering(boolean, int, etc.) +# - scalar filtering search. +# + +# Before conducting a search or a query, you need to load the data in `hello_bm25` into memory. +print(fmt.format("Start loading")) +hello_bm25.load() + +# ----------------------------------------------------------------------------- +print(fmt.format("Start searching based on BM25 texts relevance using sparse vector ANN search")) +texts_to_search = entities[-1][-2:] +print(fmt.format(f"texts_to_search: {texts_to_search}")) +search_params = { + "metric_type": "BM25", + "params": {}, +} + +start_time = time.time() +result = hello_bm25.search(texts_to_search, "sparse", search_params, limit=3, output_fields=["document"], consistency_level="Strong") +end_time = time.time() + +for hits, text in zip(result, texts_to_search): + print(f"result of text: {text}") + for hit in hits: + print(f"\thit: {hit}, document field: {hit.entity.get('document')}") +print(search_latency_fmt.format(end_time - start_time)) + +# ----------------------------------------------------------------------------- +# query based on scalar filtering(boolean, int, etc.) +filter_id = ids[num_entities // 2 - 1] +print(fmt.format(f"Start querying with `id > {filter_id}`")) + +start_time = time.time() +result = hello_bm25.query(expr=f"id > {filter_id}", output_fields=["document"]) +end_time = time.time() + +print(f"query result:\n-{result[0]}") +print(search_latency_fmt.format(end_time - start_time)) + +# ----------------------------------------------------------------------------- +# pagination +r1 = hello_bm25.query(expr=f"id > {filter_id}", limit=3, output_fields=["document"]) +r2 = hello_bm25.query(expr=f"id > {filter_id}", offset=1, limit=2, output_fields=["document"]) +print(f"query pagination(limit=3):\n\t{r1}") +print(f"query pagination(offset=1, limit=2):\n\t{r2}") + + +# ----------------------------------------------------------------------------- +# scalar filtering search +print(fmt.format(f"Start filtered searching with `id > {filter_id}`")) + +start_time = time.time() +result = hello_bm25.search(texts_to_search, "sparse", search_params, limit=3, expr=f"id > {filter_id}", output_fields=["document"]) +end_time = time.time() + +for hits, text in zip(result, texts_to_search): + print(f"result of text: {text}") + for hit in hits: + print(f"\thit: {hit}, document field: {hit.entity.get('document')}") +print(search_latency_fmt.format(end_time - start_time)) + +############################################################################### +# 6. delete entities by PK +# You can delete entities by their PK values using boolean expressions. + +expr = f'id in [{ids[0]}, {ids[1]}]' +print(fmt.format(f"Start deleting with expr `{expr}`")) + +result = hello_bm25.query(expr=expr, output_fields=["document"]) +print(f"query before delete by expr=`{expr}` -> result: \n- {result[0]}\n- {result[1]}\n") + +hello_bm25.delete(expr) + +result = hello_bm25.query(expr=expr, output_fields=["document"]) +print(f"query after delete by expr=`{expr}` -> result: {result}\n") + +############################################################################### +# 7. upsert by PK +# You can upsert data to replace existing data. +target_id = ids[2] +print(fmt.format(f"Start upsert operation for id {target_id}")) + +# Query before upsert +result_before = hello_bm25.query(expr=f"id == {target_id}", output_fields=["id", "document"]) +print(f"Query before upsert (id={target_id}):\n{result_before}") + +# Prepare data for upsert +upsert_data = [ + [target_id], + ["This is an upserted document for testing purposes."] +] + +# Perform upsert operation +hello_bm25.upsert(upsert_data) + +# Query after upsert +result_after = hello_bm25.query(expr=f"id == {target_id}", output_fields=["id", "document"]) +print(f"Query after upsert (id={target_id}):\n{result_after}") + + +############################################################################### +# 7. drop collection +# Finally, drop the hello_bm25 collection +print(fmt.format("Drop collection `hello_bm25`")) +utility.drop_collection("hello_bm25") diff --git a/examples/orm_deprecated/datatypes/hello_milvus_array.py b/examples/orm_deprecated/datatypes/hello_milvus_array.py new file mode 100644 index 000000000..05f4165ea --- /dev/null +++ b/examples/orm_deprecated/datatypes/hello_milvus_array.py @@ -0,0 +1,79 @@ +from pymilvus import CollectionSchema, FieldSchema, Collection, connections, DataType, Partition, utility +import numpy as np +import random +import pandas as pd +connections.connect() + +dim = 128 +collection_name = "test_array" +arr_len = 100 +nb = 10 +if utility.has_collection(collection_name): + utility.drop_collection(collection_name) +# create collection +pk_field = FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True, description='pk') +vector_field = FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=dim) +int8_array = FieldSchema(name="int8_array", dtype=DataType.ARRAY, element_type=DataType.INT8, max_capacity=arr_len) +int16_array = FieldSchema(name="int16_array", dtype=DataType.ARRAY, element_type=DataType.INT16, max_capacity=arr_len) +int32_array = FieldSchema(name="int32_array", dtype=DataType.ARRAY, element_type=DataType.INT32, max_capacity=arr_len) +int64_array = FieldSchema(name="int64_array", dtype=DataType.ARRAY, element_type=DataType.INT64, max_capacity=arr_len) +bool_array = FieldSchema(name="bool_array", dtype=DataType.ARRAY, element_type=DataType.BOOL, max_capacity=arr_len) +float_array = FieldSchema(name="float_array", dtype=DataType.ARRAY, element_type=DataType.FLOAT, max_capacity=arr_len) +double_array = FieldSchema(name="double_array", dtype=DataType.ARRAY, element_type=DataType.DOUBLE, max_capacity=arr_len) +string_array = FieldSchema(name="string_array", dtype=DataType.ARRAY, element_type=DataType.VARCHAR, max_capacity=arr_len, + max_length=100) + +fields = [pk_field, vector_field, int8_array, int16_array, int32_array, int64_array, + bool_array, float_array, double_array, string_array] + +schema = CollectionSchema(fields=fields) +collection = Collection(collection_name, schema=schema) + +# insert data +pk_value = [i for i in range(nb)] +vector_value = [[random.random() for _ in range(dim)] for i in range(nb)] +int8_value = [[np.int8(j) for j in range(arr_len)] for i in range(nb)] +int16_value = [[np.int16(j) for j in range(arr_len)] for i in range(nb)] +int32_value = [[np.int32(j) for j in range(arr_len)] for i in range(nb)] +int64_value = [[np.int64(j) for j in range(arr_len)] for i in range(nb)] +bool_value = [[np.bool_(j) for j in range(arr_len)] for i in range(nb)] +float_value = [[np.float32(j) for j in range(arr_len)] for i in range(nb)] +double_value = [[np.double(j) for j in range(arr_len)] for i in range(nb)] +string_value = [[str(j) for j in range(arr_len)] for i in range(nb)] + +data = [pk_value, vector_value, + int8_value,int16_value, int32_value, int64_value, + bool_value, + float_value, + double_value, + string_value + ] + +#collection.insert(data) + +data = pd.DataFrame({ + 'int64': pk_value, + 'float_vector': vector_value, + "int8_array": int8_value, + "int16_array": int16_value, + "int32_array": int32_value, + "int64_array": int64_value, + "bool_array": bool_value, + "float_array": float_value, + "double_array": double_value, + "string_array": string_value +}) +collection.insert(data) + +index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, +} + +collection.create_index("float_vector", index) +collection.load() + +res = collection.query("int64 >= 0", output_fields=["int8_array"]) +for hits in res: + print(hits) diff --git a/examples/orm_deprecated/datatypes/hello_sparse.py b/examples/orm_deprecated/datatypes/hello_sparse.py new file mode 100644 index 000000000..eab0c558e --- /dev/null +++ b/examples/orm_deprecated/datatypes/hello_sparse.py @@ -0,0 +1,161 @@ +# hello_sprase.py demonstrates the basic operations of PyMilvus, a Python SDK of Milvus, +# while operating on sparse float vectors. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search, query, and hybrid search on entities +# 6. delete entities by PK +# 7. drop collection +import time + +import numpy as np +import random +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +fmt = "=== {:30} ===" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 1000, 3000 +# non zero count of randomly generated sparse vectors +nnz = 30 + +def log(msg): + print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + " " + msg) + +# ----------------------------------------------------------------------------- +# connect to Milvus +log(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_sparse") +log(f"Does collection hello_sparse exist in Milvus: {has}") + +# ----------------------------------------------------------------------------- +# create collection with a sparse float vector column +hello_sparse = None +if not has: + fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=True, max_length=100), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.SPARSE_FLOAT_VECTOR), + ] + schema = CollectionSchema(fields, "hello_sparse is the simplest demo to introduce sparse float vector usage") + log(fmt.format("Create collection `hello_sparse`")) + hello_sparse = Collection("hello_sparse", schema, consistency_level="Strong") +else: + hello_sparse = Collection("hello_sparse") + +log(f"hello_sparse has {hello_sparse.num_entities} entities({hello_sparse.num_entities/1000000}M), indexed {hello_sparse.has_index()}") + +# ----------------------------------------------------------------------------- +# insert +log(fmt.format("Start creating entities to insert")) +rng = np.random.default_rng(seed=19530) + +def generate_sparse_vector(dimension: int, non_zero_count: int) -> dict: + indices = random.sample(range(dimension), non_zero_count) + values = [random.random() for _ in range(non_zero_count)] + sparse_vector = {index: value for index, value in zip(indices, values)} + return sparse_vector + +entities = [ + rng.random(num_entities).tolist(), + [generate_sparse_vector(dim, nnz) for _ in range(num_entities)], +] + +log(fmt.format("Start inserting entities")) +insert_result = hello_sparse.insert(entities) + +# ----------------------------------------------------------------------------- +# create index +if not hello_sparse.has_index(): + log(fmt.format("Start Creating index SPARSE_INVERTED_INDEX")) + index = { + "index_type": "SPARSE_INVERTED_INDEX", + "metric_type": "IP", + "params":{ + "drop_ratio_build": 0.2, + } + } + hello_sparse.create_index("embeddings", index) + +log(fmt.format("Start loading")) +hello_sparse.load() + +# ----------------------------------------------------------------------------- +# search based on vector similarity +log(fmt.format("Start searching based on vector similarity")) +vectors_to_search = entities[-1][-1:] +search_params = { + "metric_type": "IP", + "params": { + "drop_ratio_search": "0.2", + } +} + +start_time = time.time() +result = hello_sparse.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["pk", "random", "embeddings"]) +end_time = time.time() + +for hits in result: + for hit in hits: + print(f"hit: {hit}") +log(search_latency_fmt.format(end_time - start_time)) +# ----------------------------------------------------------------------------- +# query based on scalar filtering(boolean, int, etc.) +print(fmt.format("Start querying with `random > 0.5`")) + +start_time = time.time() +result = hello_sparse.query(expr="random > 0.5", output_fields=["random", "embeddings"]) +end_time = time.time() + +print(f"query result:\n-{result[0]}") +print(search_latency_fmt.format(end_time - start_time)) + +# ----------------------------------------------------------------------------- +# pagination +r1 = hello_sparse.query(expr="random > 0.5", limit=4, output_fields=["random"]) +r2 = hello_sparse.query(expr="random > 0.5", offset=1, limit=3, output_fields=["random"]) +print(f"query pagination(limit=4):\n\t{r1}") +print(f"query pagination(offset=1, limit=3):\n\t{r2}") + + +# ----------------------------------------------------------------------------- +# hybrid search +print(fmt.format("Start hybrid searching with `random > 0.5`")) + +start_time = time.time() +result = hello_sparse.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > 0.5", output_fields=["random"]) +end_time = time.time() + +for hits in result: + for hit in hits: + print(f"hit: {hit}, random field: {hit.entity.get('random')}") +print(search_latency_fmt.format(end_time - start_time)) + +# ----------------------------------------------------------------------------- +# delete entities by PK +# You can delete entities by their PK values using boolean expressions. +ids = insert_result.primary_keys + +expr = f'pk in ["{ids[0]}" , "{ids[1]}"]' +print(fmt.format(f"Start deleting with expr `{expr}`")) + +result = hello_sparse.query(expr=expr, output_fields=["random", "embeddings"]) +print(f"query before delete by expr=`{expr}` -> result: \n-{result[0]}\n-{result[1]}\n") + +hello_sparse.delete(expr) + +result = hello_sparse.query(expr=expr, output_fields=["random", "embeddings"]) +print(f"query after delete by expr=`{expr}` -> result: {result}\n") + + +# ----------------------------------------------------------------------------- +# drop collection +print(fmt.format("Drop collection `hello_sparse`")) +utility.drop_collection("hello_sparse") diff --git a/examples/example.py b/examples/orm_deprecated/example.py similarity index 91% rename from examples/example.py rename to examples/orm_deprecated/example.py index ce03f4616..34c5069e8 100644 --- a/examples/example.py +++ b/examples/orm_deprecated/example.py @@ -49,7 +49,7 @@ def create_collection(name, id_field, vector_field): field2 = FieldSchema(name=vector_field, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM, is_primary=False) schema = CollectionSchema(fields=[field1, field2], description="collection description") - collection = Collection(name=name, data=None, schema=schema) + collection = Collection(name=name, data=None, schema=schema, properties={"collection.ttl.seconds": 15}) print("\ncollection created:", name) return collection @@ -113,7 +113,7 @@ def search(collection, vector_field, id_field, search_vectors): "anns_field": vector_field, "param": {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}}, "limit": _TOPK, - "expr": "id_field > 0"} + "expr": "id_field >= 0"} results = collection.search(**search_param) for i, result in enumerate(results): print("\nSearch result for {}th vector: ".format(i)) @@ -121,6 +121,10 @@ def search(collection, vector_field, id_field, search_vectors): print("Top {}: {}".format(j, res)) +def set_properties(collection): + collection.set_properties(properties={"collection.ttl.seconds": 1800}) + + def main(): # create a connection create_connection() @@ -132,12 +136,16 @@ def main(): # create collection collection = create_collection(_COLLECTION_NAME, _ID_FIELD_NAME, _VECTOR_FIELD_NAME) + # alter ttl properties of collection level + set_properties(collection) + # show collections list_collections() # insert 10000 vectors with 128 dimension vectors = insert(collection, 10000, _DIM) + collection.flush() # get the number of entities get_entity_num(collection) @@ -150,12 +158,12 @@ def main(): # search search(collection, _VECTOR_FIELD_NAME, _ID_FIELD_NAME, vectors[:3]) - # drop collection index - drop_index(collection) - # release memory release_collection(collection) + # drop collection index + drop_index(collection) + # drop collection drop_collection(_COLLECTION_NAME) diff --git a/examples/orm_deprecated/example_group_by.py b/examples/orm_deprecated/example_group_by.py new file mode 100644 index 000000000..81dfd5dcb --- /dev/null +++ b/examples/orm_deprecated/example_group_by.py @@ -0,0 +1,63 @@ +from pymilvus import CollectionSchema, FieldSchema, Collection, connections, DataType, Partition, utility +import random +import numpy as np +import secrets + + +def generate_random_hex_string(length): + return secrets.token_hex(length // 2) + + +IP = "localhost" +connections.connect("default", host=IP, port="19530") + +dim = 128 +clean_exist = False +prepare_data = True + +fields = [ + FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="int64", dtype=DataType.INT64), + FieldSchema(name="float", dtype=DataType.FLOAT), + FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=dim), + FieldSchema(name="bool", dtype=DataType.BOOL), + FieldSchema(name="string", dtype=DataType.VARCHAR, max_length=512) +] +schema = CollectionSchema(fields=fields) +collection_name = 'test_group_by_' + generate_random_hex_string(24) +if clean_exist and utility.has_collection(collection_name): + utility.drop_collection(collection_name) + +collection = Collection(collection_name, schema=schema) +nb = 1500 +batch_num = 3 +vectors = [[random.random() for _ in range(dim)] for _ in range(nb)] +# insert data +if prepare_data: + for i in range(batch_num): + data = [ + [i for i in range(nb * i, nb * (i + 1))], + [i % 33 for i in range(nb)], + [np.float32(i) for i in range(nb)], + vectors, + [bool(random.randrange(2)) for i in range(nb)], + [str(i % 44) for i in range(nb * i, nb * (i + 1))], + ] + collection.insert(data) + print("insert data done") + collection.flush() + collection.create_index("float_vector", {"metric_type": "COSINE"}) + +# create collection and load +collection.load() +batch_size = 100 +search_params = {"metric_type": "COSINE"} +result = collection.search(vectors[:3], "float_vector", search_params, limit=batch_size, timeout=600, + output_fields=["int64"], group_by_field="string") #set up group_by_field + +for i in range(len(result)): + resultI = result[i] + print(f"---result{i}_size:{len(result[i])}-------------------------") + for j in range(len(resultI)): + print(resultI[j]) + print("----------------------------") diff --git a/examples/orm_deprecated/example_index.py b/examples/orm_deprecated/example_index.py new file mode 100644 index 000000000..b731c3e45 --- /dev/null +++ b/examples/orm_deprecated/example_index.py @@ -0,0 +1,191 @@ +import random + +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a collection +# 3. insert entities +# 4. create index +# 5. search + + +_HOST = '127.0.0.1' +_PORT = '19530' + +# Const names +_COLLECTION_NAME = 'demo' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' + +# Vector parameters +_DIM = 128 +_INDEX_FILE_SIZE = 32 # max file size of stored index + +# Scalar +_ATTR1_NAME = "attr1" +_ATTR2_NAME = "attr2" + +# Index parameters +_METRIC_TYPE = 'L2' +_INDEX_TYPE = 'IVF_FLAT' +_NLIST = 1024 +_NPROBE = 16 +_TOPK = 3 + + +# Create a Milvus connection +def create_connection(): + print(f"\nCreate connection...") + connections.connect(host=_HOST, port=_PORT) + print(f"\nList connections:") + print(connections.list_connections()) + + +# Create a collection named 'demo' +def create_collection(name, id_field, vector_field, attr1_name, attr2_name): + field1 = FieldSchema(name=id_field, dtype=DataType.VARCHAR, description="varchar", is_primary=True, max_length=10) + field2 = FieldSchema(name=vector_field, dtype=DataType.FLOAT_VECTOR, description="float vector", dim=_DIM) + field3 = FieldSchema(name=attr1_name, dtype=DataType.INT64, description="attr1") + field4 = FieldSchema(name=attr2_name, dtype=DataType.DOUBLE, description="attr2") + schema = CollectionSchema(fields=[field1, field2, field3, field4]) + collection = Collection(name=name, data=None, schema=schema) + print("\ncollection created:", name) + return collection + + +def has_collection(name): + return utility.has_collection(name) + + +# Drop a collection in Milvus +def drop_collection(name): + utility.drop_collection(name) + print("\nDrop collection: {}".format(name)) + + +# List all collections in Milvus +def list_collections(): + print("\nlist collections:") + print(utility.list_collections()) + + +def insert(collection, num, dim): + data = [ + [str(i) for i in range(num)], + [[random.random() for _ in range(dim)] for _ in range(num)], + [random.randint(1, 10000) for _ in range(num)], + [random.random() for _ in range(num)], + ] + collection.insert(data) + return data[1] + + +def get_entity_num(collection): + print("\nThe number of entity:") + print(collection.num_entities) + + +def create_index(collection, filed_name, index_param, index_name): + collection.create_index(filed_name, index_param, index_name=index_name) + index = collection.index(index_name=index_name) + print(f"\nCreated index:\n{index.params}") + + +def drop_index(collection, index_name): + collection.drop_index(index_name=index_name) + print("\nDrop index sucessfully") + + +def load_collection(collection): + collection.load() + + +def release_collection(collection): + collection.release() + + +def search(collection, vector_field, id_field, search_vectors): + search_param = { + "data": search_vectors, + "anns_field": vector_field, + "param": {"metric_type": _METRIC_TYPE, "params": {"nprobe": _NPROBE}}, + "limit": _TOPK, + "expr": 'id_field > "0"'} + + results = collection.search(**search_param) + + for i, result in enumerate(results): + print(f"\nSearch result for {i}th vector: ") + for j, res in enumerate(result): + print(f"Top {j}: {res}") + + +def main(): + # create a connection + create_connection() + + # drop collection if the collection exists + if has_collection(_COLLECTION_NAME): + drop_collection(_COLLECTION_NAME) + + # create collection + collection = create_collection(_COLLECTION_NAME, _ID_FIELD_NAME, _VECTOR_FIELD_NAME, _ATTR1_NAME, _ATTR2_NAME) + + # show collections + list_collections() + + # insert 10000 vectors with 128 dimension + vectors = insert(collection, 10000, _DIM) + + collection.flush() + # get the number of entities + get_entity_num(collection) + + # create index + vec_index_param = { + "index_type": _INDEX_TYPE, + "params": {"nlist": _NLIST}, + "metric_type": _METRIC_TYPE} + scalar_index_param = {"index_type": "inverted_index"} # TODO: replace this with real impl. + + vector_index_name = "vector_index" + create_index(collection, _VECTOR_FIELD_NAME, vec_index_param, vector_index_name) + print(f"has_index {vector_index_name}: ", collection.has_index()) + print("index: ", collection.index().to_dict()) + utility.wait_for_index_building_complete(collection.name) + print("index building progress: ", utility.index_building_progress(collection.name)) + + varchar_index_name = "varchar_id_index" + create_index(collection, _ID_FIELD_NAME, scalar_index_param, varchar_index_name) + print(f"has_index {varchar_index_name}: ", collection.has_index(index_name=varchar_index_name)) + print("all indexes:") + for index in collection.indexes: + print(index.to_dict()) + utility.wait_for_index_building_complete(collection.name, varchar_index_name) + print("index building progress: ", utility.index_building_progress(collection.name, varchar_index_name)) + + # load data to memory + load_collection(collection) + + # search + search(collection, _VECTOR_FIELD_NAME, _ID_FIELD_NAME, vectors[:3]) + + # release memory + release_collection(collection) + + # drop collection index + drop_index(collection, vector_index_name) + drop_index(collection, varchar_index_name) + + # drop collection + drop_collection(_COLLECTION_NAME) + + +if __name__ == '__main__': + main() diff --git a/examples/orm_deprecated/gpu_indx/example_gpu_brute_force.py b/examples/orm_deprecated/gpu_indx/example_gpu_brute_force.py new file mode 100644 index 000000000..e0287c5cb --- /dev/null +++ b/examples/orm_deprecated/gpu_indx/example_gpu_brute_force.py @@ -0,0 +1,84 @@ +import numpy as np +import time +import random + +from pymilvus import ( + connections, + list_collections, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +dim = 128 +nb = 10000 +nq = 10 +collection_name = "GPU_BRUTE_FORCE_test" + +# configure milvus hostname and port +print(f"\nCreate connection...") +connections.connect(host="localhost", port=19530) + +# List all collection names +print(f"\nList collections...") +collection_list = list_collections() +print(list_collections()) + +if(collection_list.count(collection_name)): + print(collection_name, " exist, and drop it") + collection = Collection(collection_name) + collection.drop() + print("drop") + +field1 = FieldSchema(name="id", dtype=DataType.INT64, description="int64", is_primary=True) +field2 = FieldSchema(name = "vec", dtype = DataType.FLOAT_VECTOR, description = "float vector", dim = dim, is_primary = False) +schema = CollectionSchema(fields = [field1, field2], description = "sift decription") +collection = Collection(name = collection_name, data = None, schema = schema, shards_num = 2) + +print(list_collections()) + +print(f"\nList partitions...") +print(collection.partitions) + +print("begin insert...") +rng = np.random.default_rng(seed=19530) +data = rng.random((nb, dim)) +counter = 0 +block_num = 100 +block_size = int(data.shape[0]/block_num) +start = time.time() +for t in range(block_num): + entities = [ + [i for i in range(counter, counter + block_size)], + # [vectors[i] for i in range(counter, counter + block_size)] + [vec for vec in data[counter: counter + block_size]] + ] + insert_result = collection.insert(entities) + counter = counter + block_size +print ("end of insert, cost: ", time.time()-start) + +collection.flush() +print(collection.num_entities) + +# create index +print(f"\nCreate index...") +collection.create_index(field_name="vec", + index_params={'index_type': 'GPU_BRUTE_FORCE', + 'metric_type': 'L2', + 'params': { + }}) +print(f"\nCreated index done.") + +# load +print(f"\nLoad...") +collection.load() +print(f"\nLoaded.") + +print(f"\nSearch...") +res = collection.search([ vec for vec in data[0:1]], + "vec", + {"metric_type": "L2", + "params": {}, + }, + limit=100) +print("run result: ", res[0].ids) +collection.drop() diff --git a/examples/orm_deprecated/gpu_indx/example_gpu_cagra.py b/examples/orm_deprecated/gpu_indx/example_gpu_cagra.py new file mode 100644 index 000000000..c8a9c743b --- /dev/null +++ b/examples/orm_deprecated/gpu_indx/example_gpu_cagra.py @@ -0,0 +1,88 @@ +import numpy as np +import time +import random + +from pymilvus import ( + connections, + list_collections, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +dim = 128 +nb = 10000 +nq = 10 +collection_name = "GPU_CAGRA_test" + +# configure milvus hostname and port +print(f"\nCreate connection...") +connections.connect(host="localhost", port=19530) + +# List all collection names +print(f"\nList collections...") +collection_list = list_collections() +print(list_collections()) + +if(collection_list.count(collection_name)): + print(collection_name, " exist, and drop it") + collection = Collection(collection_name) + collection.drop() + print("drop") + +field1 = FieldSchema(name="id", dtype=DataType.INT64, description="int64", is_primary=True) +field2 = FieldSchema(name = "vec", dtype = DataType.FLOAT_VECTOR, description = "float vector", dim = dim, is_primary = False) +schema = CollectionSchema(fields = [field1, field2], description = "sift decription") +collection = Collection(name = collection_name, data = None, schema = schema, shards_num = 2) + +print(list_collections()) + +print(f"\nList partitions...") +print(collection.partitions) + +print("begin insert...") +rng = np.random.default_rng(seed=19530) +data = rng.random((nb, dim)) +counter = 0 +block_num = 100 +block_size = int(data.shape[0]/block_num) +start = time.time() +for t in range(block_num): + entities = [ + [i for i in range(counter, counter + block_size)], + # [vectors[i] for i in range(counter, counter + block_size)] + [vec for vec in data[counter: counter + block_size]] + ] + insert_result = collection.insert(entities) + counter = counter + block_size +print ("end of insert, cost: ", time.time()-start) + +collection.flush() +print(collection.num_entities) + +# create index +print(f"\nCreate index...") + +collection.create_index(field_name="vec", + index_params={'index_type': 'GPU_CAGRA', + 'metric_type': 'L2', + 'params': { + 'intermediate_graph_degree':64, + 'graph_degree': 32, + }}) +print(f"\nCreated index done.") + +# load +print(f"\nLoad...") +collection.load() +print(f"\nLoaded") + +print(f"\nSearch...") +res = collection.search([ vec for vec in data[0:1]], + "vec", + {"metric_type": "L2", + "params": { + "search_width":100}, + }, + limit=100) +print("run result: ", res[0].ids) +collection.drop() diff --git a/examples/orm_deprecated/hello_cost.py b/examples/orm_deprecated/hello_cost.py new file mode 100644 index 000000000..aa14d353c --- /dev/null +++ b/examples/orm_deprecated/hello_cost.py @@ -0,0 +1,187 @@ +# hello_milvus.py demonstrates the basic operations of PyMilvus, a Python SDK of Milvus. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search, query, and hybrid search on entities +# 6. delete entities by PK +# 7. drop collection +import time + +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 10, 8 + +################################################################################# +# 1. connect to Milvus +# Add a new connection alias `default` for Milvus server in `localhost:19530` +# Actually the "default" alias is a buildin in PyMilvus. +# If the address of Milvus is the same as `localhost:19530`, you can omit all +# parameters and call the method as: `connections.connect()`. +# +# Note: the `using` parameter of the following methods is default to "default". +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +collection_name = "hello_cost" +has = utility.has_collection(collection_name) +print(f"Does collection {collection_name} exist in Milvus: {has}") + +################################################################################# +# 2. create collection +# We're going to create a collection with 3 fields. +# +-+------------+------------+------------------+------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+------------+------------+------------------+------------------------------+ +# |1| "pk" | VarChar | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+------------+------------+------------------+------------------------------+ +# |2| "random" | Double | | "a double field" | +# +-+------------+------------+------------------+------------------------------+ +# |3|"embeddings"| FloatVector| dim=8 | "float vector with dim 8" | +# +-+------------+------------+------------------+------------------------------+ +fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + +schema = CollectionSchema(fields, f"{collection_name} is the simplest demo to introduce the APIs") + +print(fmt.format(f"Create collection `{collection_name}`")) +hello_milvus = Collection(collection_name, schema, consistency_level="Strong") + +################################################################################ +# 3. insert data +# We are going to insert 3000 rows of data into `hello_milvus` +# Data to be inserted must be organized in fields. +# +# The insert() method returns: +# - either automatically generated primary keys by Milvus if auto_id=True in the schema; +# - or the existing primary key field from the entities if auto_id=False in the schema. + +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) +entities = [ + # provide the pk field because `auto_id` is set to False + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim)), # field embeddings, supports numpy.ndarray and list +] + +insert_result = hello_milvus.insert(entities) +# OUTPUT: +# insert result: (insert count: 10, delete count: 0, upsert count: 0, timestamp: 449296288881311748, success count: 10, err count: 0, cost: 1); +# insert cost: 1 +print(f"insert result: {insert_result};\ninsert cost: {insert_result.cost}") + +hello_milvus.flush() +print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entities + +################################################################################ +# 4. create index +# We are going to create an IVF_FLAT index for hello_milvus collection. +# create_index() can only be applied to `FloatVector` and `BinaryVector` fields. +print(fmt.format("Start Creating index IVF_FLAT")) +index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, +} + +hello_milvus.create_index("embeddings", index) + +################################################################################ +# 5. search, query, and hybrid search +# After data were inserted into Milvus and indexed, you can perform: +# - search based on vector similarity +# - query based on scalar filtering(boolean, int, etc.) +# - hybrid search based on vector similarity and scalar filtering. +# + +# Before conducting a search or a query, you need to load the data in `hello_milvus` into memory. +print(fmt.format("Start loading")) +hello_milvus.load() + +# ----------------------------------------------------------------------------- +# search based on vector similarity +print(fmt.format("Start searching based on vector similarity")) +vectors_to_search = entities[-1][-2:] +search_params = { + "metric_type": "L2", + "params": {"nprobe": 10}, +} + +start_time = time.time() +result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, output_fields=["random"]) +end_time = time.time() + +# OUTPUT: +# search result: data: ['["id: 8, distance: 0.0, entity: {\'random\': 0.9007387227368949}", "id: 0, distance: 0.49515748023986816, entity: {\'random\': 0.6378742006852851}", "id: 2, distance: 0.5305156707763672, entity: {\'random\': 0.1321158395732429}"]', '["id: 9, distance: 0.0, entity: {\'random\': 0.4494463384561439}", "id: 8, distance: 0.558194100856781, entity: {\'random\': 0.9007387227368949}", "id: 2, distance: 0.7718868255615234, entity: {\'random\': 0.1321158395732429}"]'], cost: 21; +# search cost: 21 +print(f"search result: {result};\nsearch cost: {result.cost}") +print(search_latency_fmt.format(end_time - start_time)) + +# ----------------------------------------------------------------------------- +# query based on scalar filtering(boolean, int, etc.) +print(fmt.format("Start querying with `random > 0.5`")) + +start_time = time.time() +result = hello_milvus.query(expr="random > 0.5", output_fields=["random", "embeddings"]) +end_time = time.time() + +# OUTPUT: +# query result: data: ["{'random': 0.6378742006852851, 'embeddings': [0.18477614, 0.42930314, 0.40345728, 0.3957196, 0.6963897, 0.24356908, 0.42512414, 0.5724385], 'pk': '0'}", "{'random': 0.744296470467782, 'embeddings': [0.8349225, 0.6614872, 0.98359716, 0.15854438, 0.30939594, 0.23553558, 0.1950739, 0.80361205], 'pk': '4'}", "{'random': 0.6025374094941409, 'embeddings': [0.36677808, 0.218786, 0.25240582, 0.82230526, 0.21011819, 0.16813536, 0.8129038, 0.74800706], 'pk': '7'}", "{'random': 0.9007387227368949, 'embeddings': [0.27464902, 0.07500089, 0.57728964, 0.6654878, 0.8698446, 0.3814792, 0.8825416, 0.58730817], 'pk': '8'}"], extra_info: {'cost': '21'}; +# query cost: 21 +print(f"query result: {result};\nquery cost: {result.extra['cost']}") +print(search_latency_fmt.format(end_time - start_time)) + + +# ----------------------------------------------------------------------------- +# hybrid search +print(fmt.format("Start hybrid searching with `random > 0.5`")) + +start_time = time.time() +result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > 0.5", output_fields=["random"]) +end_time = time.time() + +# OUTPUT: +# search result: data: ['["id: 8, distance: 0.0, entity: {\'random\': 0.9007387227368949}", "id: 0, distance: 0.49515748023986816, entity: {\'random\': 0.6378742006852851}", "id: 7, distance: 0.670731246471405, entity: {\'random\': 0.6025374094941409}"]', '["id: 8, distance: 0.558194100856781, entity: {\'random\': 0.9007387227368949}", "id: 0, distance: 1.0780366659164429, entity: {\'random\': 0.6378742006852851}", "id: 7, distance: 1.1083570718765259, entity: {\'random\': 0.6025374094941409}"]'], cost: 21; +# search cost: 21 +print(f"search result: {result};\nsearch cost: {result.cost}") +print(search_latency_fmt.format(end_time - start_time)) + +############################################################################### +# 6. delete entities by PK +# You can delete entities by their PK values using boolean expressions. +ids = insert_result.primary_keys + +expr = f'pk in ["{ids[0]}" , "{ids[1]}"]' +print(fmt.format(f"Start deleting with expr `{expr}`")) + +result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"]) +print(f"query before delete by expr=`{expr}` -> result: \n-{result[0]}\n-{result[1]}\n") + +delete_result = hello_milvus.delete(expr) +# OUTPUT: +# delete result: (insert count: 0, delete count: 2, upsert count: 0, timestamp: 0, success count: 0, err count: 0, cost: 2); +# delete cost: 2 +print(f"delete result: {delete_result};\ndelete cost: {delete_result.cost}") + +result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"]) +print(f"query after delete by expr=`{expr}` -> result: {result}\n") + + +############################################################################### +# 7. drop collection +# Finally, drop the hello_milvus collection +print(fmt.format(f"Drop collection `{collection_name}`")) +utility.drop_collection(collection_name) diff --git a/examples/hello_milvus.ipynb b/examples/orm_deprecated/hello_milvus.ipynb similarity index 59% rename from examples/hello_milvus.ipynb rename to examples/orm_deprecated/hello_milvus.ipynb index b54eefa3c..c66a57970 100644 --- a/examples/hello_milvus.ipynb +++ b/examples/orm_deprecated/hello_milvus.ipynb @@ -6,8 +6,8 @@ "source": [ "# hello_milvus Demo\n", "\n", - " hello_milvus.ipynb demonstrates the basic operations of PyMilvus, a Python SDK of Milvus.\n", - " Before running, make sure that you have a running Milvus instance.\n", + "`hello_milvus.ipynb` demonstrates the basic operations of PyMilvus, a Python SDK of Milvus.\n", + "Before running, make sure that you have a running Milvus instance.\n", "\n", "1. connect to Milvus\n", "2. create collection\n", @@ -20,11 +20,11 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ - "import random\n", + "import numpy as np\n", "import time\n", "\n", "from pymilvus import (\n", @@ -35,7 +35,8 @@ ")\n", "\n", "fmt = \"\\n=== {:30} ===\\n\"\n", - "search_latency_fmt = \"search latency = {:.4f}s\"" + "search_latency_fmt = \"search latency = {:.4f}s\"\n", + "num_entities, dim = 3000, 8" ] }, { @@ -44,15 +45,16 @@ "source": [ "## 1. connect to Milvus\n", "\n", - "Add a new connection alias `default` for Milvus server in `localhost:19530`. Actually the \"default\" alias is a buildin in PyMilvus. 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", + "Add a new connection alias `default` for Milvus server in `localhost:19530`. \n", + "\n", + "Actually the `default` alias is a buildin in PyMilvus. If the address of Milvus is the same as `localhost:19530`, you can omit all parameters and call the method as: `connections.connect()`.\n", "\n", "Note: the `using` parameter of the following methods is default to \"default\"." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -77,28 +79,28 @@ "## 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\" | Int64 | is_primary=True, auto_id=False | \"primary field\" |\n", - "|2| \"random\" | Double | | \"a double field\" |\n", - "|3|\"embeddings\"| FloatVector| dim=8 | \"float vector with dim 8\" |" + "| |field name |field type |other attributes | field description |\n", + "|---|:----------:|:---------:|:----------------------------:|:-----------------------:|\n", + "|1 | \"pk\" | VARCHAR |is_primary=True, auto_id=False| \"primary field\" |\n", + "|2 | \"random\" | Double | | \"a double field\" |\n", + "|3 |\"embeddings\"|FloatVector| dim=8 |\"float vector with dim 8\"|" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "fields = [\n", - " FieldSchema(name=\"pk\", dtype=DataType.INT64, is_primary=True, auto_id=False),\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=8)\n", + " FieldSchema(name=\"embeddings\", dtype=DataType.FLOAT_VECTOR, dim=dim)\n", "]\n", "\n", "schema = CollectionSchema(fields, \"hello_milvus is the simplest demo to introduce the APIs\")\n", "\n", - "hello_milvus = Collection(\"hello_milvus\", schema, consistency_level=\"Strong\")\n" + "hello_milvus = Collection(\"hello_milvus\", schema, consistency_level=\"Strong\")" ] }, { @@ -116,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -128,11 +130,12 @@ } ], "source": [ + "rng = np.random.default_rng(seed=19530)\n", "entities = [\n", " # provide the pk field because `auto_id` is set to False\n", - " [i for i in range(3000)],\n", - " [float(random.randrange(-20, -10)) for _ in range(3000)], # field random\n", - " [[random.random() for _ in range(8)] for _ in range(3000)], # field embeddings\n", + " [str(i) for i in range(num_entities)],\n", + " rng.random(num_entities).tolist(), # field random, only supports list\n", + " rng.random((num_entities, dim)), # field embeddings, supports numpy.ndarray and list\n", "]\n", "\n", "insert_result = hello_milvus.insert(entities)\n", @@ -152,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -161,7 +164,7 @@ "Status(code=0, message='')" ] }, - "execution_count": 5, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -191,50 +194,43 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "hello_milvus.load()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Search based on vector similarity**" + ] + }, + { + "cell_type": "code", + "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "=== Start searching based on vector similarity ===\n", - "\n", - "hit: (distance: 0.0, id: 2998), random field: -20.0\n", - "hit: (distance: 0.1339951753616333, id: 1871), random field: -13.0\n", - "hit: (distance: 0.16615478694438934, id: 1180), random field: -16.0\n", - "hit: (distance: 0.0, id: 2999), random field: -16.0\n", - "hit: (distance: 0.10607236623764038, id: 764), random field: -11.0\n", - "hit: (distance: 0.14412546157836914, id: 750), random field: -11.0\n", - "search latency = 0.3159s\n", - "\n", - "=== Start querying with `random > -14` ===\n", - "\n", - "query result:\n", - "-{'pk': 0, 'random': -13.0, 'embeddings': [0.07525, 0.534547, 0.778204, 0.646336, 0.800183, 0.998726, 0.545411, 0.631751]}\n", - "search latency = 0.2571s\n", - "\n", - "=== Start hybrid searching with `random > -12` ===\n", - "\n", - "hit: (distance: 0.3116421699523926, id: 801), random field: -11.0\n", - "hit: (distance: 0.34958416223526, id: 568), random field: -11.0\n", - "hit: (distance: 0.3618723750114441, id: 1105), random field: -11.0\n", - "hit: (distance: 0.10607236623764038, id: 764), random field: -11.0\n", - "hit: (distance: 0.14412546157836914, id: 750), random field: -11.0\n", - "hit: (distance: 0.29973354935646057, id: 2716), random field: -11.0\n", - "search latency = 0.1434s\n" + "hit: (distance: 0.0, id: 2998), random field: 0.9728033590489911\n", + "hit: (distance: 0.08883658051490784, id: 1262), random field: 0.2978858685751561\n", + "hit: (distance: 0.09590047597885132, id: 1265), random field: 0.3042039939240304\n", + "hit: (distance: 0.0, id: 2999), random field: 0.02316334456872482\n", + "hit: (distance: 0.05628091096878052, id: 1580), random field: 0.3855988746044062\n", + "hit: (distance: 0.08096685260534286, id: 2377), random field: 0.8745922204004368\n", + "search latency = 0.2968s\n" ] } ], "source": [ - "hello_milvus.load()\n", - "\n", - "# search based on vector similarity\n", - "print(fmt.format(\"Start searching based on vector similarity\"))\n", "vectors_to_search = entities[-1][-2:]\n", "search_params = {\n", - " \"metric_type\": \"l2\",\n", + " \"metric_type\": \"L2\",\n", " \"params\": {\"nprobe\": 10},\n", "}\n", "\n", @@ -245,31 +241,79 @@ "for hits in result:\n", " for hit in hits:\n", " print(f\"hit: {hit}, random field: {hit.entity.get('random')}\")\n", - "print(search_latency_fmt.format(end_time - start_time))\n", - "\n", - "# -----------------------------------------------------------------------------\n", - "# query based on scalar filtering(boolean, int, etc.)\n", - "print(fmt.format(\"Start querying with `random > -14`\"))\n", + "print(search_latency_fmt.format(end_time - start_time))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Query based on scalar filtering(boolean, int, etc.)**\n", "\n", + "Start quering with `random > 0.5`" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "query result:\n", + "-{'pk': '4', 'embeddings': [0.803092, 0.748499, 0.733152, 0.7597, 0.113219, 0.028412, 0.496197, 0.191172], 'random': 0.744296470467782}\n", + "search latency = 0.2481s\n" + ] + } + ], + "source": [ "start_time = time.time()\n", - "result = hello_milvus.query(expr=\"random > -14\", output_fields=[\"random\", \"embeddings\"])\n", + "result = hello_milvus.query(expr=\"random > 0.5\", output_fields=[\"random\", \"embeddings\"])\n", "end_time = time.time()\n", "\n", "print(f\"query result:\\n-{result[0]}\")\n", - "print(search_latency_fmt.format(end_time - start_time))\n", - "\n", - "# -----------------------------------------------------------------------------\n", - "# hybrid search\n", - "print(fmt.format(\"Start hybrid searching with `random > -12`\"))\n", + "print(search_latency_fmt.format(end_time - start_time))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Hybrid search**\n", "\n", + "Start hybrid searching with `random > 0.5`" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hit: (distance: 0.0, id: 2998), random field: 0.9728033590489911\n", + "hit: (distance: 0.14606499671936035, id: 747), random field: 0.5648774800635661\n", + "hit: (distance: 0.1530652642250061, id: 2527), random field: 0.8928974315571507\n", + "hit: (distance: 0.08096685260534286, id: 2377), random field: 0.8745922204004368\n", + "hit: (distance: 0.20354536175727844, id: 2034), random field: 0.5526117606328499\n", + "hit: (distance: 0.21908017992973328, id: 958), random field: 0.6647383716417955\n", + "search latency = 0.1282s\n" + ] + } + ], + "source": [ "start_time = time.time()\n", - "result = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, expr=\"random > -12\", output_fields=[\"random\"])\n", + "result = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, expr=\"random > 0.5\", output_fields=[\"random\"])\n", "end_time = time.time()\n", "\n", "for hits in result:\n", " for hit in hits:\n", " print(f\"hit: {hit}, random field: {hit.entity.get('random')}\")\n", - "print(search_latency_fmt.format(end_time - start_time))\n" + "print(search_latency_fmt.format(end_time - start_time))" ] }, { @@ -282,25 +326,25 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "query before delete by expr=`pk in [2, 3]` -> result: \n", - "-{'pk': 2, 'random': -14.0, 'embeddings': [0.976175, 0.088528, 0.806287, 0.004207, 0.30336, 0.298667, 0.279592, 0.421679]}\n", - "-{'pk': 3, 'random': -20.0, 'embeddings': [0.230225, 0.149853, 0.704977, 0.938874, 0.092708, 0.104514, 0.839864, 0.235236]}\n", + "query before delete by expr=`pk in [\"0\", \"1\"]` -> result: \n", + "-{'pk': '0', 'random': 0.6378742006852851, 'embeddings': [0.209635, 0.397467, 0.120191, 0.694749, 0.953557, 0.545455, 0.823604, 0.210963]}\n", + "-{'pk': '1', 'random': 0.43925103574669633, 'embeddings': [0.523236, 0.80354, 0.778247, 0.803696, 0.49148, 0.826561, 0.614527, 0.802345]}\n", "\n", - "query after delete by expr=`pk in [2, 3]` -> result: []\n", + "query after delete by expr=`pk in [\"0\", \"1\"]` -> result: []\n", "\n" ] } ], "source": [ "ids = insert_result.primary_keys\n", - "expr = f\"pk in [{ids[2]}, {ids[3]}]\"\n", + "expr = f'pk in [\"{ids[0]}\", \"{ids[1]}\"]'\n", "\n", "result = hello_milvus.query(expr=expr, output_fields=[\"random\", \"embeddings\"])\n", "print(f\"query before delete by expr=`{expr}` -> result: \\n-{result[0]}\\n-{result[1]}\\n\")\n", @@ -321,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -334,7 +378,7 @@ "hash": "08729c1b09183f4f38e81bb10929f98dd3c2fb886eeaa68ef9ddc9d2071f5c86" }, "kernelspec": { - "display_name": "Python 3.7.0 64-bit ('pymilvus': conda)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -348,9 +392,8 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.0" - }, - "orig_nbformat": 4 + "version": "3.6.9" + } }, "nbformat": 4, "nbformat_minor": 2 diff --git a/examples/hello_milvus.py b/examples/orm_deprecated/hello_milvus.py similarity index 81% rename from examples/hello_milvus.py rename to examples/orm_deprecated/hello_milvus.py index d724eec45..bd9c0a020 100644 --- a/examples/hello_milvus.py +++ b/examples/orm_deprecated/hello_milvus.py @@ -6,10 +6,9 @@ # 5. search, query, and hybrid search on entities # 6. delete entities by PK # 7. drop collection - -import random import time +import numpy as np from pymilvus import ( connections, utility, @@ -19,11 +18,12 @@ fmt = "\n=== {:30} ===\n" search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 3000, 8 ################################################################################# # 1. connect to Milvus # Add a new connection alias `default` for Milvus server in `localhost:19530` -# Actually the "default" alias is a buildin in PyMilvus. +# Actually the "default" alias is built-in to PyMilvus. # If the address of Milvus is the same as `localhost:19530`, you can omit all # parameters and call the method as: `connections.connect()`. # @@ -40,7 +40,7 @@ # +-+------------+------------+------------------+------------------------------+ # | | field name | field type | other attributes | field description | # +-+------------+------------+------------------+------------------------------+ -# |1| "pk" | Int64 | is_primary=True | "primary field" | +# |1| "pk" | VarChar | is_primary=True | "primary field" | # | | | | auto_id=False | | # +-+------------+------------+------------------+------------------------------+ # |2| "random" | Double | | "a double field" | @@ -48,9 +48,9 @@ # |3|"embeddings"| FloatVector| dim=8 | "float vector with dim 8" | # +-+------------+------------+------------------+------------------------------+ fields = [ - FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100), FieldSchema(name="random", dtype=DataType.DOUBLE), - FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=8) + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) ] schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs") @@ -66,18 +66,27 @@ # The insert() method returns: # - either automatically generated primary keys by Milvus if auto_id=True in the schema; # - or the existing primary key field from the entities if auto_id=False in the schema. + print(fmt.format("Start inserting entities")) -num_entities = 3000 +rng = np.random.default_rng(seed=19530) entities = [ # provide the pk field because `auto_id` is set to False - [i for i in range(num_entities)], - [float(random.randrange(-20, -10)) for _ in range(num_entities)], # field random - [[random.random() for _ in range(8)] for _ in range(num_entities)], # field embeddings + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim), np.float32), # field embeddings, supports numpy.ndarray and list ] insert_result = hello_milvus.insert(entities) -print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entites +row = { + "pk": "19530", + "random": 0.5, + "embeddings": rng.random((1, dim), np.float32)[0] +} +hello_milvus.insert(row) + +hello_milvus.flush() +print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entities ################################################################################ # 4. create index @@ -109,7 +118,7 @@ print(fmt.format("Start searching based on vector similarity")) vectors_to_search = entities[-1][-2:] search_params = { - "metric_type": "l2", + "metric_type": "L2", "params": {"nprobe": 10}, } @@ -124,21 +133,29 @@ # ----------------------------------------------------------------------------- # query based on scalar filtering(boolean, int, etc.) -print(fmt.format("Start querying with `random > -14`")) +print(fmt.format("Start querying with `random > 0.5`")) start_time = time.time() -result = hello_milvus.query(expr="random > -14", output_fields=["random", "embeddings"]) +result = hello_milvus.query(expr="random > 0.5", output_fields=["random", "embeddings"]) end_time = time.time() print(f"query result:\n-{result[0]}") print(search_latency_fmt.format(end_time - start_time)) +# ----------------------------------------------------------------------------- +# pagination +r1 = hello_milvus.query(expr="random > 0.5", limit=4, output_fields=["random"]) +r2 = hello_milvus.query(expr="random > 0.5", offset=1, limit=3, output_fields=["random"]) +print(f"query pagination(limit=4):\n\t{r1}") +print(f"query pagination(offset=1, limit=3):\n\t{r2}") + + # ----------------------------------------------------------------------------- # hybrid search -print(fmt.format("Start hybrid searching with `random > -12`")) +print(fmt.format("Start hybrid searching with `random > 0.5`")) start_time = time.time() -result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > -12", output_fields=["random"]) +result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr="random > 0.5", output_fields=["random"]) end_time = time.time() for hits in result: @@ -150,7 +167,8 @@ # 6. delete entities by PK # You can delete entities by their PK values using boolean expressions. ids = insert_result.primary_keys -expr = f"pk in [{ids[0]}, {ids[1]}]" + +expr = f'pk in ["{ids[0]}" , "{ids[1]}"]' print(fmt.format(f"Start deleting with expr `{expr}`")) result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"]) diff --git a/examples/orm_deprecated/hello_milvus_delete.py b/examples/orm_deprecated/hello_milvus_delete.py new file mode 100644 index 000000000..5dd296590 --- /dev/null +++ b/examples/orm_deprecated/hello_milvus_delete.py @@ -0,0 +1,74 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, + exceptions +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") +milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2") + +print("collections:", milvus_client.list_collections()) +print(f"{collection_name} :", milvus_client.describe_collection(collection_name)) +rng = np.random.default_rng(seed=19530) + +rows = [ + {"id": 1, "vector": rng.random((1, dim))[0], "a": 1}, + {"id": 2, "vector": rng.random((1, dim))[0], "b": 2}, + {"id": 3, "vector": rng.random((1, dim))[0], "c": 3}, + {"id": 4, "vector": rng.random((1, dim))[0], "d": 4}, + {"id": 5, "vector": rng.random((1, dim))[0], "e": 5}, + {"id": 6, "vector": rng.random((1, dim))[0], "f": 6}, +] + +print(fmt.format("Start inserting entities")) +pks = milvus_client.insert(collection_name, rows, progress_bar=True) +pks2 = milvus_client.insert(collection_name, {"id": 7, "vector": rng.random((1, dim))[0], "g": 1}) +pks.extend(pks2) + + +def fetch_data_by_pk(pk): + print(f"get primary key {pk} from {collection_name}") + pk_data = milvus_client.get(collection_name, pk) + + if pk_data: + print(f"data of primary key {pk} is", pk_data[0]) + else: + print(f"data of primary key {pk} is empty") + +fetch_data_by_pk(pks[2]) + +print(f"start to delete primary key {pks[2]} in collection {collection_name}") +milvus_client.delete(collection_name, pks = pks[2]) + +fetch_data_by_pk(pks[2]) + + +fetch_data_by_pk(pks[4]) +filter = "e == 5 or f == 6" +print(f"start to delete by expr {filter} in collection {collection_name}") +milvus_client.delete(collection_name, filter=filter) + +fetch_data_by_pk(pks[4]) + +print(f"start to delete by expr '{filter}' or by primary 4 in collection {collection_name}, expect get exception") +try: + milvus_client.delete(collection_name, pks = 4, filter=filter) +except Exception as e: + assert isinstance(e, exceptions.ParamError) + print("catch exception", e) + +print(f"start to delete without specify any expr '{filter}' or any primary key in collection {collection_name}, expect get exception") +try: + milvus_client.delete(collection_name) +except Exception as e: + print("catch exception", e) + +result = milvus_client.query(collection_name, "", output_fields = ["count(*)"]) +print(f"final entities in {collection_name} is {result[0]['count(*)']}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/orm_deprecated/hello_text_embedding.py b/examples/orm_deprecated/hello_text_embedding.py new file mode 100644 index 000000000..9400bbd29 --- /dev/null +++ b/examples/orm_deprecated/hello_text_embedding.py @@ -0,0 +1,124 @@ +# hello_text_embedding.py demonstrates how to insert raw data only into Milvus and perform +# dense vector based ANN search using TextEmbedding. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search +# 6. drop collection +import time + +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, Function, DataType, FunctionType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" + +################################################################################# +# 1. connect to Milvus +# Add a new connection alias `default` for Milvus server in `localhost:19530` +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +collection_name = "text_embedding" + +has = utility.has_collection(collection_name) +print(f"Does collection {collection_name} exist in Milvus: {has}") + +################################################################################# +# 2. create collection +# We're going to create a collection with 2 explicit fields and a function. +# +-+------------+------------+------------------+------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+------------+------------+------------------+------------------------------+ +# |1| "id" | INT64 | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+------------+------------+------------------+------------------------------+ +# |2| "document" | VarChar | | "raw text document" | +# +-+------------+------------+------------------+------------------------------+ +# +# Function 'text embedding' is used to convert raw text document to a dense vector representation +# and store it in the 'dense' field. +# +-+------------+-------------------+-----------+------------------------------+ +# | | field name | field type | other attr| field description | +# +-+------------+-------------------+-----------+------------------------------+ +# |3| "dense" |FLOAT_VECTOR | dim=1536 | | +# +-+------------+-------------------+-----------+------------------------------+ +# +fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), + FieldSchema(name="dense", dtype=DataType.FLOAT_VECTOR, dim=1536), + FieldSchema(name="document", dtype=DataType.VARCHAR, max_length=1000), +] + +text_embedding_function = Function( + name="openai", + function_type=FunctionType.TEXTEMBEDDING, + input_field_names=["document"], + output_field_names="dense", + params={ + "provider": "openai", + "model_name": "text-embedding-3-small", + } +) + +schema = CollectionSchema(fields, "hello_text_embedding demo") +schema.add_function(text_embedding_function) + +hello_text_embedding = Collection(collection_name, schema, consistency_level="Strong") + +print(fmt.format("Start inserting documents")) +docs = [ + "Artificial intelligence was founded as an academic discipline in 1956.", + "Alan Turing was the first person to conduct substantial research in AI.", + "Born in Maida Vale, London, Turing was raised in southern England.", +] + +insert_result = hello_text_embedding.insert([docs]) +ids = insert_result.primary_keys + +################################################################################ +# 4. create index +# We are going to create an index for collection, here we simply +# uses AUTOINDEX so Milvus can use the default parameters. +print(fmt.format("Start Creating index AUTOINDEX")) +index = { + "index_type": "AUTOINDEX", + "metric_type": "IP", +} + +hello_text_embedding.create_index("dense", index) + +################################################################################ +# 5. search, query, and scalar filtering search +# After data were inserted into Milvus and indexed, you can perform: +# - search texts relevance by TextEmbedding using dense vector ANN search + +# Before conducting a search or a query, you need to load the data into memory. +print(fmt.format("Start loading")) +hello_text_embedding.load() + +# ----------------------------------------------------------------------------- +search_params = { + "metric_type": "IP", + "params": {"nprobe": 10}, +} +queries = ["When was artificial intelligence founded", + "Where was Alan Turing born?"] + +start_time = time.time() +result = hello_text_embedding.search(queries, "dense", search_params, limit=3, output_fields=["document"], consistency_level="Strong") +end_time = time.time() + +for hits, text in zip(result, queries): + print(f"result of text: {text}") + for hit in hits: + print(f"\thit: {hit}, document field: {hit.entity.get('document')}") +print(search_latency_fmt.format(end_time - start_time)) + +# Finally, drop the collection +utility.drop_collection(collection_name) diff --git a/examples/orm_deprecated/hello_text_match.py b/examples/orm_deprecated/hello_text_match.py new file mode 100644 index 000000000..b716cdf96 --- /dev/null +++ b/examples/orm_deprecated/hello_text_match.py @@ -0,0 +1,168 @@ +# hello_text_match.py demonstrates how to insert raw data only into Milvus and perform +# document retrieval based on specific terms by text match expression. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search, query, and filtering search on entities +# 7. drop collection +import time +import numpy as np + +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, Function, DataType, FunctionType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +dim = 8 + +################################################################################# +# 1. connect to Milvus +# Add a new connection alias `default` for Milvus server in `localhost:19530` +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_text_match") +print(f"Does collection hello_text_match exist in Milvus: {has}") + +################################################################################# +# 2. create collection +# We're going to create a collection with 2 explicit fields and a function. +# +-+------------+------------+----------------------+------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+------------+------------+----------------------+------------------------------+ +# |1| "id" | INT64 | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+------------+------------+----------------------+------------------------------+ +# |2| "document" | VarChar | enable_analyzer=True | "raw text document" | +# | | | | enable_match=True | | +# +-+------------+------------+----------------------+------------------------------+ +# |3|"embeddings"| FloatVector| dim=8 | "float vector with dim 8" | +# +-+------------+------------+----------------------+------------------------------+ +fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), + # set analyzer params in document field for more situations + # default as analyzer_params = {"type": "standard"} + FieldSchema(name="document", dtype=DataType.VARCHAR, max_length=1000, enable_analyzer=True, enable_match=True), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + + +schema = CollectionSchema(fields, "hello_text_match demo") + +print(fmt.format("Create collection `hello_text_match`")) +hello_text_match = Collection("hello_text_match", schema, consistency_level="Strong") + +################################################################################ +# 3. insert data +# We are going to insert 6 rows of data into `hello_text_match` +# Data to be inserted must be organized in fields. +# +# The insert() method returns: +# - either automatically generated primary keys by Milvus if auto_id=True in the schema; +# - or the existing primary key field from the entities if auto_id=False in the schema. + +print(fmt.format("Start inserting entities")) + +rng = np.random.default_rng(seed=19530) +num_entities = 6 +keywords = ["milvus", "match", "search", "query", "analyzer", "tokenizer"] + +entities = [ + [f"This is a test document {i + hello_text_match.num_entities} with keywords: {keywords[i]}" for i in range(num_entities)], + rng.random((num_entities, dim), np.float32) +] + +insert_result = hello_text_match.insert(entities) +ids = insert_result.primary_keys + +hello_text_match.flush() +print(f"Number of entities in Milvus: {hello_text_match.num_entities}") # check the num_entities + +################################################################################ +# 4. create index +# We are going to create an vector index for hello_text_match collection +print(fmt.format("Start Creating index AUTOINDEX")) +index = { + "index_type": "AUTOINDEX", + "metric_type": "IP", +} + +hello_text_match.create_index("embeddings", index) +################################################################################ +# 5. query and scalar filtering search with text match +# After data were inserted into Milvus and indexed, you can perform: +# - query with text match expression +# - search data with text match filter + +# Before conducting a search or a query, you need to load the data in `hello_text_match` into memory. +print(fmt.format("Start loading")) +hello_text_match.load() + +# ----------------------------------------------------------------------------- +# query based text match with single keyword +expr = f"TEXT_MATCH(document, '{keywords[0]}')" +print(fmt.format(f"Start querying with `{expr}`")) + +start_time = time.time() +result = hello_text_match.query(expr=expr, output_fields=["document"]) +end_time = time.time() + +print(f"query result:\n-{result[0]}") +print(search_latency_fmt.format(end_time - start_time)) + +# query based text match with mutiple keywords +expr = f"TEXT_MATCH(document, '{keywords[0]} {keywords[1]} {keywords[2]}')" +print(fmt.format(f"Start querying with `{expr}`")) + +start_time = time.time() +result = hello_text_match.query(expr=expr, output_fields=["document"]) +end_time = time.time() + +print(f"query result:\n-{result[0]}") +print(search_latency_fmt.format(end_time - start_time)) + +# ----------------------------------------------------------------------------- +# scalar filtering search with text match +search_params = { + "metric_type": "IP", + "params": {}, +} +expr = f"TEXT_MATCH(document, '{keywords[0]} {keywords[1]} {keywords[2]}')" +print(fmt.format(f"Start filtered searching with `{expr}`")) + +start_time = time.time() +vector_to_search = rng.random((1, dim), np.float32) +result = hello_text_match.search(vector_to_search, "embeddings", search_params, limit=3, expr=expr, output_fields=["document"]) +end_time = time.time() + +for hits in result: + for hit in hits: + print(f"\thit: {hit}, document field: {hit.entity.get('document')}") +print(search_latency_fmt.format(end_time - start_time)) + +############################################################################### +# 6. delete entities by text match +# You can delete entities by their PK values using boolean expressions. + +expr = f"TEXT_MATCH(document, '{keywords[4]}')" +print(fmt.format(f"Start deleting with expr `{expr}`")) + +result = hello_text_match.query(expr=expr, output_fields=["document"]) +print(f"query before delete by expr=`{expr}` -> result: \n- {result[0]}\n") + +hello_text_match.delete(expr) + +result = hello_text_match.query(expr=expr, output_fields=["document"]) +print(f"query after delete by expr=`{expr}` -> result: {result}\n") + + +############################################################################### +# 7. drop collection +# Finally, drop the hello_text_match collection +print(fmt.format("Drop collection `hello_text_match`")) +utility.drop_collection("hello_text_match") diff --git a/examples/orm_deprecated/hybrid_search/hello_hybrid_bm25.py b/examples/orm_deprecated/hybrid_search/hello_hybrid_bm25.py new file mode 100644 index 000000000..20dc46016 --- /dev/null +++ b/examples/orm_deprecated/hybrid_search/hello_hybrid_bm25.py @@ -0,0 +1,178 @@ +# A demo showing hybrid semantic search with dense and full text search with BM25 +# using Milvus. +# +# You can optionally choose to use the BGE-M3 model to embed the text as dense +# vectors, or simply use random generated vectors as an example. +# +# You can also use the BGE CrossEncoder model to rerank the search results. +# +# Note that the full text search feature is only available in Milvus 2.4.0 or +# higher version. Make sure you follow https://milvus.io/docs/install_standalone-docker.md +# to set up the latest version of Milvus in your local environment. + +# To connect to Milvus server, you need the python client library called pymilvus. +# To use BGE-M3 model, you need to install the optional `model` module in pymilvus. +# You can get them by simply running the following commands: +# +# pip install pymilvus +# pip install pymilvus[model] + +# If true, use BGE-M3 model to generate dense vectors. +# If false, use random numbers to compose dense vectors. +use_bge_m3 = False +# If true, the search result will be reranked using BGE CrossEncoder model. +use_reranker = False + +# The overall steps are as follows: +# 1. embed the text as dense and sparse vectors +# 2. setup a Milvus collection to store the dense and sparse vectors +# 3. insert the data to Milvus +# 4. search and inspect the result! +import random +import string +import numpy as np + +from pymilvus import ( + utility, + FieldSchema, + CollectionSchema, + DataType, + Collection, + AnnSearchRequest, + RRFRanker, + connections, + Function, + FunctionType, +) + +# 1. prepare a small corpus to search +docs = [ + "Artificial intelligence was founded as an academic discipline in 1956.", + "Alan Turing was the first person to conduct substantial research in AI.", + "Born in Maida Vale, London, Turing was raised in southern England.", +] +# add some randomly generated texts +docs.extend( + [ + " ".join( + "".join(random.choice(string.ascii_lowercase) for _ in range(random.randint(1, 8))) + for _ in range(10) + ) + for _ in range(1000) + ] +) +query = "Who started AI research?" + + +def random_embedding(texts): + rng = np.random.default_rng() + return { + "dense": np.random.rand(len(texts), 768), + } + + +dense_dim = 768 +ef = random_embedding + +if use_bge_m3: + # BGE-M3 model is included in the optional `model` module in pymilvus, to + # install it, simply run "pip install pymilvus[model]". + from pymilvus.model.hybrid import BGEM3EmbeddingFunction + + ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu") + dense_dim = ef.dim["dense"] + +docs_embeddings = ef(docs) +query_embeddings = ef([query]) + +# 2. setup Milvus collection and index +connections.connect("default", host="localhost", port="19530") + +# Specify the data schema for the new Collection. +fields = [ + # Use auto generated id as primary key + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=True, max_length=100), + # Store the original text to retrieve based on semantically distance + FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512, enable_analyzer=True), + # We need a sparse vector field to perform full text search with BM25, + # but you don't need to provide data for it when inserting data. + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, dim=dense_dim), +] +functions = [ + Function( + name="bm25", + function_type=FunctionType.BM25, + input_field_names=["text"], + output_field_names="sparse_vector", + ) +] +schema = CollectionSchema(fields, "", functions=functions) +col_name = "hybrid_bm25_demo" +# Now we can create the new collection with above name and schema. +col = Collection(col_name, schema, consistency_level="Strong") + +# We need to create indices for the vector fields. The indices will be loaded +# into memory for efficient search. +sparse_index = {"index_type": "SPARSE_INVERTED_INDEX", "metric_type": "BM25"} +col.create_index("sparse_vector", sparse_index) +dense_index = {"index_type": "FLAT", "metric_type": "IP"} +col.create_index("dense_vector", dense_index) +col.load() + +# 3. insert text and sparse/dense vector representations into the collection +entities = [docs, docs_embeddings["dense"]] +col.insert(entities) +col.flush() + +# 4. search and inspect the result! +k = 2 # we want to get the top 2 docs closest to the query + +# Prepare the search requests for both full text search and dense vector search +full_text_search_params = {"metric_type": "BM25"} +# provide raw text query for full text search, while use the sparse vector as +# ANNS field +full_text_search_req = AnnSearchRequest([query], "sparse_vector", full_text_search_params, limit=k) +dense_search_params = {"metric_type": "IP"} +dense_req = AnnSearchRequest( + query_embeddings["dense"], "dense_vector", dense_search_params, limit=k +) + +# Search topK docs based on dense and sparse vectors and rerank with RRF. +res = col.hybrid_search( + [full_text_search_req, dense_req], rerank=RRFRanker(), limit=k, output_fields=["text"] +) + +# Currently Milvus only support 1 query in the same hybrid search request, so +# we inspect res[0] directly. In future release Milvus will accept batch +# hybrid search queries in the same call. +res = res[0] + +if use_reranker: + result_texts = [hit.fields["text"] for hit in res] + from pymilvus.model.reranker import BGERerankFunction + + bge_rf = BGERerankFunction(device="cpu") + # rerank the results using BGE CrossEncoder model + results = bge_rf(query, result_texts, top_k=2) + for hit in results: + print(f"text: {hit.text} distance {hit.score}") +else: + for hit in res: + print(f'text: {hit.fields["text"]} distance {hit.distance}') + +# If you used both BGE-M3 and the reranker, you should see the following: +# text: Alan Turing was the first person to conduct substantial research in AI. distance 0.9306981017573297 +# text: Artificial intelligence was founded as an academic discipline in 1956. distance 0.03217001154515051 +# +# If you used only BGE-M3, you should see the following: +# text: Alan Turing was the first person to conduct substantial research in AI. distance 0.032786883413791656 +# text: Artificial intelligence was founded as an academic discipline in 1956. distance 0.016129031777381897 + +# In this simple example the reranker yields the same result as the embedding based hybrid search, but in more complex +# scenarios the reranker can provide more accurate results. + +# If you used random vectors, the result will be different each time you run the script. + +# Drop the collection to clean up the data. +utility.drop_collection(col_name) diff --git a/examples/orm_deprecated/hybrid_search/hello_hybrid_sparse_dense.py b/examples/orm_deprecated/hybrid_search/hello_hybrid_sparse_dense.py new file mode 100644 index 000000000..1a167750e --- /dev/null +++ b/examples/orm_deprecated/hybrid_search/hello_hybrid_sparse_dense.py @@ -0,0 +1,151 @@ +# A demo showing hybrid semantic search with dense and sparse vectors using Milvus. +# +# You can optionally choose to use the BGE-M3 model to embed the text as dense +# and sparse vectors, or simply use random generated vectors as an example. +# +# You can also use the BGE CrossEncoder model to rerank the search results. +# +# Note that the sparse vector search feature is only available in Milvus 2.4.0 or +# higher version. Make sure you follow https://milvus.io/docs/install_standalone-docker.md +# to set up the latest version of Milvus in your local environment. + +# To connect to Milvus server, you need the python client library called pymilvus. +# To use BGE-M3 model, you need to install the optional `model` module in pymilvus. +# You can get them by simply running the following commands: +# +# pip install pymilvus +# pip install pymilvus[model] + +# If true, use BGE-M3 model to generate dense and sparse vectors. +# If false, use random numbers to compose dense and sparse vectors. +use_bge_m3 = True +# If true, the search result will be reranked using BGE CrossEncoder model. +use_reranker = True + +# The overall steps are as follows: +# 1. embed the text as dense and sparse vectors +# 2. setup a Milvus collection to store the dense and sparse vectors +# 3. insert the data to Milvus +# 4. search and inspect the result! +import random +import string +import numpy as np + +from pymilvus import ( + utility, + FieldSchema, CollectionSchema, DataType, + Collection, AnnSearchRequest, RRFRanker, connections, +) + +# 1. prepare a small corpus to search +docs = [ + "Artificial intelligence was founded as an academic discipline in 1956.", + "Alan Turing was the first person to conduct substantial research in AI.", + "Born in Maida Vale, London, Turing was raised in southern England.", +] +# add some randomly generated texts +docs.extend([' '.join(''.join(random.choice(string.ascii_lowercase) for _ in range(random.randint(1, 8))) for _ in range(10)) for _ in range(1000)]) +query = "Who started AI research?" + +def random_embedding(texts): + rng = np.random.default_rng() + return { + "dense": np.random.rand(len(texts), 768), + "sparse": [{d: rng.random() for d in random.sample(range(1000), random.randint(20, 30))} for _ in texts], + } + +dense_dim = 768 +ef = random_embedding + +if use_bge_m3: + # BGE-M3 model can embed texts as dense and sparse vectors. + # It is included in the optional `model` module in pymilvus, to install it, + # simply run "pip install pymilvus[model]". + from pymilvus.model.hybrid import BGEM3EmbeddingFunction + ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu") + dense_dim = ef.dim["dense"] + +docs_embeddings = ef(docs) +query_embeddings = ef([query]) + +# 2. setup Milvus collection and index +connections.connect("default", host="localhost", port="19530") + +# Specify the data schema for the new Collection. +fields = [ + # Use auto generated id as primary key + FieldSchema(name="pk", dtype=DataType.VARCHAR, + is_primary=True, auto_id=True, max_length=100), + # Store the original text to retrieve based on semantically distance + FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512), + # Milvus now supports both sparse and dense vectors, we can store each in + # a separate field to conduct hybrid search on both vectors. + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, + dim=dense_dim), +] +schema = CollectionSchema(fields, "") +col_name = 'hybrid_demo' +# Now we can create the new collection with above name and schema. +col = Collection(col_name, schema, consistency_level="Strong") + +# We need to create indices for the vector fields. The indices will be loaded +# into memory for efficient search. +sparse_index = {"index_type": "SPARSE_INVERTED_INDEX", "metric_type": "IP"} +col.create_index("sparse_vector", sparse_index) +dense_index = {"index_type": "FLAT", "metric_type": "IP"} +col.create_index("dense_vector", dense_index) +col.load() + +# 3. insert text and sparse/dense vector representations into the collection +entities = [docs, docs_embeddings["sparse"], docs_embeddings["dense"]] +col.insert(entities) +col.flush() + +# 4. search and inspect the result! +k = 2 # we want to get the top 2 docs closest to the query + +# Prepare the search requests for both vector fields +sparse_search_params = {"metric_type": "IP"} +sparse_req = AnnSearchRequest(query_embeddings["sparse"], + "sparse_vector", sparse_search_params, limit=k) +dense_search_params = {"metric_type": "IP"} +dense_req = AnnSearchRequest(query_embeddings["dense"], + "dense_vector", dense_search_params, limit=k) + +# Search topK docs based on dense and sparse vectors and rerank with RRF. +res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(), + limit=k, output_fields=['text']) + +# Currently Milvus only support 1 query in the same hybrid search request, so +# we inspect res[0] directly. In future release Milvus will accept batch +# hybrid search queries in the same call. +res = res[0] + +if use_reranker: + result_texts = [hit.fields["text"] for hit in res] + from pymilvus.model.reranker import BGERerankFunction + bge_rf = BGERerankFunction(device='cpu') + # rerank the results using BGE CrossEncoder model + results = bge_rf(query, result_texts, top_k=2) + for hit in results: + print(f'text: {hit.text} distance {hit.score}') +else: + for hit in res: + print(f'text: {hit.fields["text"]} distance {hit.distance}') + +# If you used both BGE-M3 and the reranker, you should see the following: +# text: Alan Turing was the first person to conduct substantial research in AI. distance 0.9306981017573297 +# text: Artificial intelligence was founded as an academic discipline in 1956. distance 0.03217001154515051 +# +# If you used only BGE-M3, you should see the following: +# text: Alan Turing was the first person to conduct substantial research in AI. distance 0.032786883413791656 +# text: Artificial intelligence was founded as an academic discipline in 1956. distance 0.016129031777381897 + +# In this simple example the reranker yields the same result as the embedding based hybrid search, but in more complex +# scenarios the reranker can provide more accurate results. + +# If you used random vectors, the result will be different each time you run the script. + +# Drop the collection to clean up the data. +utility.drop_collection(col_name) diff --git a/examples/orm_deprecated/hybrid_search/hybrid_search.py b/examples/orm_deprecated/hybrid_search/hybrid_search.py new file mode 100644 index 000000000..6c5a14d53 --- /dev/null +++ b/examples/orm_deprecated/hybrid_search/hybrid_search.py @@ -0,0 +1,118 @@ +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, + AnnSearchRequest, RRFRanker, WeightedRanker, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 3000, 8 + +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_milvus") +print(f"Does collection hello_milvus exist in Milvus: {has}") +if has: + utility.drop_collection("hello_milvus") + +fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim), + FieldSchema(name="embeddings2", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + +schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs") + +print(fmt.format("Create collection `hello_milvus`")) +hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong", num_shards = 4) + +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) +entities = [ + # provide the pk field because `auto_id` is set to False + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim)), # field embeddings, supports numpy.ndarray and list + rng.random((num_entities, dim)), # field embeddings2, supports numpy.ndarray and list +] + +insert_result = hello_milvus.insert(entities) + +hello_milvus.flush() +print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entities + +print(fmt.format("Start Creating index IVF_FLAT")) +index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, +} + +hello_milvus.create_index("embeddings", index) +hello_milvus.create_index("embeddings2", index) + +print(fmt.format("Start loading")) +hello_milvus.load() + +field_names = ["embeddings", "embeddings2"] + +req_list = [] +nq = 1 +weights = [0.2, 0.3] +default_limit = 5 +vectors_to_search = [] + +for i in range(len(field_names)): + # 4. generate search data + vectors_to_search = rng.random((nq, dim)) + search_param = { + "data": vectors_to_search, + "anns_field": field_names[i], + "param": {"metric_type": "L2"}, + "limit": default_limit, + "expr": "random > 0.5"} + req = AnnSearchRequest(**search_param) + req_list.append(req) + +print(fmt.format("rank by WightedRanker")) +hybrid_res = hello_milvus.hybrid_search(req_list, WeightedRanker(*weights, norm_score=True), default_limit, output_fields=["random"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") + +print(fmt.format("rank by RRFRanker")) +hybrid_res = hello_milvus.hybrid_search(req_list, RRFRanker(), default_limit, output_fields=["random"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") + +req_list = [] +for i in range(len(field_names)): + # 4. generate search data + vectors_to_search = rng.random((nq, dim)) + search_param = { + "data": vectors_to_search, + "anns_field": field_names[i], + "param": {"metric_type": "L2"}, + "limit": default_limit, + "expr": "random > {radius}", + "expr_params": {"radius": 0.5}} + req = AnnSearchRequest(**search_param) + req_list.append(req) + +print(fmt.format("rank by WightedRanker with expression template")) +hybrid_res = hello_milvus.hybrid_search(req_list, WeightedRanker(*weights), default_limit, output_fields=["random"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") + +print(fmt.format("rank by RRFRanker with expression template")) +hybrid_res = hello_milvus.hybrid_search(req_list, RRFRanker(), default_limit, output_fields=["random"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") diff --git a/examples/orm_deprecated/inverted_index_example.py b/examples/orm_deprecated/inverted_index_example.py new file mode 100644 index 000000000..dfc820180 --- /dev/null +++ b/examples/orm_deprecated/inverted_index_example.py @@ -0,0 +1,57 @@ +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +DIMENSION = 8 +COLLECTION_NAME = "books" +connections.connect("default", host="localhost", port="19530") + +fields = [ + FieldSchema(name='id', dtype=DataType.INT64, is_primary=True), + FieldSchema(name='title', dtype=DataType.VARCHAR, max_length=200), + FieldSchema(name='release_year', dtype=DataType.INT64), + FieldSchema(name='embeddings', dtype=DataType.FLOAT_VECTOR, dim=DIMENSION), +] +schema = CollectionSchema(fields=fields, enable_dynamic_field=True) +collection = Collection(name=COLLECTION_NAME, schema=schema) + +data_rows = [ + { + "id": 1, + "title": "Lord of the Flies", + "release_year": 1954, + "embeddings": [0.64, 0.44, 0.13, 0.47, 0.74, 0.03, 0.32, 0.6], + }, + { + "id": 2, + "title": "The Great Gatsby", + "release_year": 1925, + "embeddings": [0.9, 0.45, 0.18, 0.43, 0.4, 0.4, 0.7, 0.24], + }, + { + "id": 3, + "title": "The Catcher in the Rye", + "release_year": 1951, + "embeddings": [0.43, 0.57, 0.43, 0.88, 0.84, 0.69, 0.27, 0.98], + }, +] + +collection.insert(data_rows) +collection.create_index( + "embeddings", {"index_type": "FLAT", "metric_type": "L2"}) + +# create inverted index for scalar fields. +collection.create_index( + "release_year", {"index_type": "INVERTED"}) +collection.create_index( + "title", {"index_type": "INVERTED"}) + +collection.load() + +res = collection.query(expr='release_year <= 1951', output_fields=["id"]) +print(res) +res = collection.query( + expr='release_year in [1951, 1954] and title like "The%"', output_fields=["id", "title"]) +print(res) diff --git a/examples/orm_deprecated/iterator.py b/examples/orm_deprecated/iterator.py new file mode 100644 index 000000000..a482bedc2 --- /dev/null +++ b/examples/orm_deprecated/iterator.py @@ -0,0 +1,258 @@ +import numpy as np +import random +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) +import logging + +HOST = "localhost" +PORT = "19530" +COLLECTION_NAME = "test_iterator" +USER_ID = "id" +MAX_LENGTH = 65535 +AGE = "age" +DEPOSIT = "deposit" +PICTURE = "picture" +CONSISTENCY_LEVEL = "Eventually" +LIMIT = 5 +NUM_ENTITIES = 10000 +DIM = 8 +CLEAR_EXIST = True + +# Create a logger for the main script +log = logging.getLogger("pymilvus") +log.setLevel(logging.INFO) + + +def re_create_collection(prepare_new_data: bool): + if prepare_new_data: + if utility.has_collection(COLLECTION_NAME) and CLEAR_EXIST: + utility.drop_collection(COLLECTION_NAME) + print(f"dropped existed collection{COLLECTION_NAME}") + + fields = [ + FieldSchema(name=USER_ID, dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name=AGE, dtype=DataType.INT64), + FieldSchema(name=DEPOSIT, dtype=DataType.DOUBLE), + FieldSchema(name=PICTURE, dtype=DataType.FLOAT_VECTOR, dim=DIM) + ] + + schema = CollectionSchema(fields) + print(f"Create collection {COLLECTION_NAME}") + collection = Collection(COLLECTION_NAME, schema, consistency_level=CONSISTENCY_LEVEL, num_shards=2) + else: + collection = Collection(COLLECTION_NAME) + return collection + + +def random_pk(filter_set: set, lower_bound: int, upper_bound: int) -> str: + ret: str = "" + while True: + candidate = str(random.randint(lower_bound, upper_bound)) + if candidate in filter_set: + continue + ret = candidate + break + return ret + + +def insert_data(collection): + rng = np.random.default_rng(seed=19530) + batch_count = 5 + for i in range(batch_count): + entities = [ + [i for i in range(NUM_ENTITIES*i, NUM_ENTITIES*(i + 1))], + [int(ni % 100) for ni in range(NUM_ENTITIES)], + [float(ni) for ni in range(NUM_ENTITIES)], + rng.random((NUM_ENTITIES, DIM)), + ] + collection.insert(entities) + collection.flush() + print(f"Finish insert batch{i}, number of entities in Milvus: {collection.num_entities}") + + +def prepare_index(collection): + index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, + } + + collection.create_index(PICTURE, index) + print("Finish Creating index IVF_FLAT") + collection.load() + print("Finish Loading index IVF_FLAT") + + +def prepare_data(collection): + insert_data(collection) + prepare_index(collection) + return collection + + +def query_iterate_collection_no_offset(collection): + expr = f"10 <= {AGE} <= 25" + + query_iterator = collection.query_iterator(expr=expr, output_fields=[USER_ID, AGE], + offset=0, batch_size=5, consistency_level=CONSISTENCY_LEVEL, + reduce_stop_for_best="false", + iterator_cp_file="/tmp/it_cp") + no_best_ids: set = set({}) + page_idx = 0 + while True: + res = query_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + query_iterator.close() + break + for i in range(len(res)): + print(res[i]) + no_best_ids.add(res[i]['id']) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + print("best---------------------------") + query_iterator = collection.query_iterator(expr=expr, output_fields=[USER_ID, AGE], + offset=0, batch_size=5, consistency_level=CONSISTENCY_LEVEL, + reduce_stop_for_best="true", iterator_cp_file="/tmp/it_cp") + + best_ids: set = set({}) + page_idx = 0 + while True: + res = query_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + query_iterator.close() + break + cursor = query_iterator.get_cursor() + print(f"got pk_cursor:{cursor.str_pk}") + for i in range(len(res)): + print(res[i]) + best_ids.add(res[i]['id']) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + diff = best_ids.difference(no_best_ids) + for id in diff: + print(f"diff id:{id}") + + +def query_iterate_collection_with_offset(collection): + expr = f"10 <= {AGE} <= 14" + query_iterator = collection.query_iterator(expr=expr, output_fields=[USER_ID, AGE], + offset=10, batch_size=50, consistency_level=CONSISTENCY_LEVEL) + page_idx = 0 + while True: + res = query_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + query_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + +def query_iterate_collection_with_large_offset(collection): + query_iterator = collection.query_iterator(output_fields=[USER_ID, AGE], + offset=48000, batch_size=50, consistency_level=CONSISTENCY_LEVEL) + page_idx = 0 + while True: + res = query_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + query_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + +def query_iterate_collection_with_limit(collection): + expr = f"10 <= {AGE} <= 44" + query_iterator = collection.query_iterator(expr=expr, output_fields=[USER_ID, AGE], + batch_size=80, limit=530, consistency_level=CONSISTENCY_LEVEL) + page_idx = 0 + while True: + res = query_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + query_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + + + +def search_iterator_collection(collection): + SEARCH_NQ = 1 + DIM = 8 + rng = np.random.default_rng(seed=19530) + vectors_to_search = rng.random((SEARCH_NQ, DIM)) + search_params = { + "metric_type": "L2", + "params": {"nprobe": 10, "radius": 1.0}, + } + search_iterator = collection.search_iterator(vectors_to_search, PICTURE, search_params, batch_size=500, + output_fields=[USER_ID]) + page_idx = 0 + while True: + res = search_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + search_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + +def search_iterator_collection_with_limit(collection): + SEARCH_NQ = 1 + DIM = 8 + rng = np.random.default_rng(seed=19530) + vectors_to_search = rng.random((SEARCH_NQ, DIM)) + search_params = { + "metric_type": "L2", + "params": {"nprobe": 10, "radius": 1.0}, + } + search_iterator = collection.search_iterator(vectors_to_search, PICTURE, search_params, batch_size=200, limit=755, + output_fields=[USER_ID]) + page_idx = 0 + while True: + res = search_iterator.next() + if len(res) == 0: + print("query iteration finished, close") + search_iterator.close() + break + for i in range(len(res)): + print(res[i]) + page_idx += 1 + print(f"page{page_idx}-------------------------") + + +def main(): + prepare_new_data = False + connections.connect("default", host=HOST, port=PORT) + collection = re_create_collection(prepare_new_data) + if prepare_new_data: + collection = prepare_data(collection) + query_iterate_collection_with_large_offset(collection) + query_iterate_collection_no_offset(collection) + query_iterate_collection_with_offset(collection) + query_iterate_collection_with_limit(collection) + search_iterator_collection(collection) + search_iterator_collection_with_limit(collection) + + +if __name__ == '__main__': + main() diff --git a/examples/orm_deprecated/nullable_and_default_value.py b/examples/orm_deprecated/nullable_and_default_value.py new file mode 100644 index 000000000..9b28a6c4c --- /dev/null +++ b/examples/orm_deprecated/nullable_and_default_value.py @@ -0,0 +1,114 @@ +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. query on entities +# 6. drop collection +import time + +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +dim = 8 + +################################################################################# +# 1. connect to Milvus +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_milvus") +print(f"Does collection hello_milvus exist in Milvus: {has}") + +################################################################################# +# 2. create collection +# We're going to create a collection with 4 fields. +# +-+---------------------+------------+---------------------+--------------------------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+---------------------+------------+---------------------+--------------------------------------------------+ +# |1| "pk" | VarChar | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+---------------------+------------+---------------------+--------------------------------------------------+ +# |2| "nullable_fid" | Double | nullable=True | "a double field can insert null" | +# +-+---------------------+------------+---------------------+--------------------------------------------------+ +# |3| "default_value_fid" | Int64 | default_value=1 | "a int64 field can insert with default value" | +# +-+---------------------+------------+---------------------+--------------------------------------------------+ +# |4| "embeddings" | FloatVector| dim=8 | "float vector with dim 8" | +# +-+---------------------+------------+---------------------+--------------------------------------------------+ +fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100), + FieldSchema(name="nullable_fid", dtype=DataType.DOUBLE,nullable=True), + FieldSchema(name="default_value_fid", dtype=DataType.INT64,default_value=1), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + +schema = CollectionSchema(fields, "hello_milvus is the demo to introduce the nullable and default value functions") + +print(fmt.format("Create collection `hello_milvus`")) +hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong") + +################################################################################ +# 3. insert data +# For fields marked as nullable=True: +# you can skip the field when inserting data, or set it directly to a null value, and the system will treat it as null +# For fields marked default_value: +# the system will automatically apply this value if no data is specified for the field during insertion + +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) + +data_rows = [ + { + # skip the field when inserting data + "pk": "19530", + "embeddings": rng.random((1, dim), np.float32)[0] + }, + { + # set it directly to a null value + "pk": "19531", + "nullable_fid": None, + "default_value_fid": None, + "embeddings": rng.random((1, dim), np.float32)[0] + }, +] + +hello_milvus.insert(data_rows) + +hello_milvus.flush() +print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entities + +################################################################################ +# 4. create index +print(fmt.format("Start Creating index IVF_FLAT")) +index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, +} + +hello_milvus.create_index("embeddings", index) + +################################################################################ +# 5. query on entities +print(fmt.format("Start loading")) +hello_milvus.load() + +print(fmt.format("Start querying")) +start_time = time.time() +result = hello_milvus.query(expr='pk in ["19530","19531"]', output_fields=["nullable_fid", "default_value_fid","embeddings"]) +end_time = time.time() + +print(f"query result:\n-{result[0]}") +print(search_latency_fmt.format(end_time - start_time)) + +############################################################################### +# 6. drop collection +# Finally, drop the hello_milvus collection +print(fmt.format("Drop collection `hello_milvus`")) +utility.drop_collection("hello_milvus") diff --git a/examples/orm_deprecated/partition.py b/examples/orm_deprecated/partition.py new file mode 100644 index 000000000..3c6bb30ce --- /dev/null +++ b/examples/orm_deprecated/partition.py @@ -0,0 +1,148 @@ +# Copyright (C) 2019-2020 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under the License. + +from pymilvus import ( + connections, list_collections, has_partition, + FieldSchema, CollectionSchema, DataType, + Collection, Partition +) + +import random +import string + +default_dim = 128 +default_nb = 3000 +default_float_vec_field_name = "float_vector" +default_segment_row_limit = 1000 + + +all_index_types = [ + "FLAT", + "IVF_FLAT", + "IVF_SQ8", + # "IVF_SQ8_HYBRID", + "IVF_PQ", + "HNSW", + # "NSG", + "ANNOY", + "RHNSW_FLAT", + "RHNSW_PQ", + "RHNSW_SQ", + "BIN_FLAT", + "BIN_IVF_FLAT" +] + +default_index_params = [ + {"nlist": 128}, + {"nlist": 128}, + {"nlist": 128}, + # {"nlist": 128}, + {"nlist": 128, "m": 16, "nbits": 8}, + {"M": 48, "efConstruction": 500}, + # {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50}, + {"n_trees": 50}, + {"M": 48, "efConstruction": 500}, + {"M": 48, "efConstruction": 500, "PQM": 64}, + {"M": 48, "efConstruction": 500}, + {"nlist": 128}, + {"nlist": 128} +] + + +default_index = {"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"} + + +def gen_default_fields(auto_id=True): + default_fields = [ + FieldSchema(name="count", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="float", dtype=DataType.FLOAT), + FieldSchema(name=default_float_vec_field_name, dtype=DataType.FLOAT_VECTOR, dim=default_dim) + ] + default_schema = CollectionSchema(fields=default_fields, description="test collection", + segment_row_limit=default_segment_row_limit, auto_id=False) + return default_schema + + +def gen_data(nb): + entities = [ + [i for i in range(nb)], + [float(i) for i in range(nb)], + [[random.random() for _ in range(dim)] for _ in range(num)], + ] + return entities + + +def gen_unique_str(str_value=None): + prefix = "".join(random.choice(string.ascii_letters + string.digits) for _ in range(8)) + return "collection_" + prefix if str_value is None else str_value + "_" + prefix + + +def binary_support(): + return ["BIN_FLAT", "BIN_IVF_FLAT"] + + +def gen_simple_index(): + index_params = [] + for i in range(len(all_index_types)): + if all_index_types[i] in binary_support(): + continue + dic = {"index_type": all_index_types[i], "metric_type": "L2"} + dic.update({"params": default_index_params[i]}) + index_params.append(dic) + return index_params + + +def test_partition(): + connections.connect(alias="default") + print("create collection") + collection = Collection(name=gen_unique_str(), schema=gen_default_fields()) + print("create partition") + partition = Partition(collection, name=gen_unique_str()) + print(list_collections()) + assert has_partition(collection.name, partition.name) is True + + data = gen_data(default_nb) + print("insert data to partition") + res = partition.insert(data) + collection.flush() + print(res.insert_count) + assert partition.is_empty is False + assert partition.num_entities == default_nb + + print("start to create index") + index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, + } + collection.create_index(default_float_vec_field_name, index) + + print("load partition") + partition.load() + topK = 5 + round_decimal = 3 + search_params = {"metric_type": "L2", "params": {"nprobe": 10}} + print("search partition") + res = partition.search(data[2][-2:], "float_vector", search_params, topK, "count > 100", round_decimal=round_decimal) + for hits in res: + for hit in hits: + print(hit) + + print("release partition") + partition.release() + print("drop partition") + partition.drop() + print("drop collection") + collection.drop() + + +if __name__ == "__main__": + test_partition() diff --git a/examples/orm_deprecated/rbac.py b/examples/orm_deprecated/rbac.py new file mode 100644 index 000000000..6ecfb5c18 --- /dev/null +++ b/examples/orm_deprecated/rbac.py @@ -0,0 +1,114 @@ +from pymilvus import ( + connections, + FieldSchema, CollectionSchema, DataType, + Collection, + utility, + Role +) + +# This example shows how to: +# 1. connect to Milvus server +# 2. create a role +# 3. add user to the role +# 4. assign the role to the user +# 5. create privilege group +# 6. add privileges to the privilege group +# 7. remove privileges from the privilege group +# 8. list privilege groups of the role +# 9. grant the privilege group to the role +# 10. grant a built-in privilege group to the role +# 11. revoke the privilege group from the role +# 12. revoke a built-in privilege group from the role +# 13. drop the role + +_HOST = 'localhost' +_USER = 'root' +_PASSWORD = 'Milvus' + +# Create a Milvus connection +def create_connection(): + print(f"\nCreate connection...") + connections.connect(host=_HOST, user=_USER, password=_PASSWORD) + print(f"\nList connections:") + print(connections.list_connections()) + +def create_privilege_group(role, group_name): + role.create_privilege_group(group_name) + +def add_privileges_to_group(role, group_name, privileges): + role.add_privileges_to_group(group_name, privileges) + +def list_privilege_groups(role): + return role.list_privilege_groups() + +def remove_privileges_from_group(role, group_name, privileges): + role.remove_privileges_from_group(group_name, privileges) + +def drop_privilege_group(role, group_name): + role.drop_privilege_group(group_name) + +def grant_v2(role, privilege, collection_name, db_name): + role.grant_v2(privilege, collection_name, db_name=db_name) + +def revoke_v2(role, privilege, collection_name, db_name): + role.revoke_v2(privilege, collection_name, db_name=db_name) + +def list_grants(role): + return role.list_grants() + +def main(): + # Connect to Milvus server + create_connection() + + # create role + role = Role("privilege_group_role") + role.create() + + # list roles + utility.list_roles(True) + + # create user + utility.create_user(user="user1", password="Milvus") + + # add user + role.add_user("user1") + + # create privilege group + privilege_group = "search_query" + create_privilege_group(role, privilege_group) + + # add privileges to group + add_privileges_to_group(role, privilege_group, ["Search", "Query"]) + + # list privilege groups + groups = list_privilege_groups(role) + print("List privilege groups: ", groups) + + # remove privileges from group + remove_privileges_from_group(role, privilege_group, ["Query"]) + + # grant custom privielge group to role + grant_v2(role, privilege_group, "*", db_name="*") + + # grant built-in privielge group to role + grant_v2(role, "ClusterReadOnly", "*", db_name="*") + + # list grants + grants =list_grants(role) + print("List grants: ", grants) + + # revoke custom privielge group from role + revoke_v2(role, privilege_group, "*", db_name="*") + + # revoke built-in privielge group from role + revoke_v2(role, "ClusterReadOnly", "*", db_name="*") + + # drop privilege group + drop_privilege_group(role, privilege_group) + + # drop role + role.drop() + + +if __name__ == '__main__': + main() diff --git a/examples/orm_deprecated/resource_group.py b/examples/orm_deprecated/resource_group.py new file mode 100644 index 000000000..5c9c98a6e --- /dev/null +++ b/examples/orm_deprecated/resource_group.py @@ -0,0 +1,89 @@ +from pymilvus import utility, connections +from pymilvus.client.constants import DEFAULT_RESOURCE_GROUP +from example import * + +_HOST = '127.0.0.1' +_PORT = '19530' + +_CONNECTION_NAME = "default" + +_COLLECTION_NAME = 'rg_demo' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' + +# Vector parameters +_DIM = 128 + +# Create a Milvus connection + +def create_connection(user, passwd): + print(f"\nCreate connection...") + connections.connect(alias=_CONNECTION_NAME,host=_HOST, port=_PORT, user=user, password=passwd) + print(f"\nList connections:") + print(connections.list_connections()) + + +def create_resource_group(name): + print(f"create resource group: {name}") + utility.create_resource_group(name, using=_CONNECTION_NAME) + + +def drop_resource_group(name): + print(f"drop resource group: {name}") + utility.drop_resource_group(name, using=_CONNECTION_NAME) + + +def describe_resource_group(name): + info = utility.describe_resource_group(name, using=_CONNECTION_NAME) + print(f"describe resource group: {info}") + + +def list_resource_groups(): + rgs = utility.list_resource_groups(using=_CONNECTION_NAME) + print(f"list resource group: {rgs}") + + +def transfer_node(source, target, num_node): + print(f"transfer {num_node} nodes from {source} to {target}") + utility.transfer_node(source, target, num_node, using=_CONNECTION_NAME) + + +def transfer_replica(source, target, collection_name, num_replica): + print( + f"transfer {num_replica} replicas in {collection_name} from {source} to {target}") + utility.transfer_replica( + source, target, collection_name, num_replica, using=_CONNECTION_NAME) + +def run(): + create_connection("root", "123456") + coll = create_collection(_COLLECTION_NAME, _ID_FIELD_NAME, _VECTOR_FIELD_NAME) + vectors = insert(coll, 10000, _DIM) + coll.flush() + create_index(coll, _VECTOR_FIELD_NAME) + + create_resource_group("rg") + list_resource_groups() + describe_resource_group("rg") + transfer_node(DEFAULT_RESOURCE_GROUP, "rg", 1) + describe_resource_group(DEFAULT_RESOURCE_GROUP) + describe_resource_group("rg") + release_collection(coll) + coll.load(_resource_groups=["rg"]) + print("load finish") + + transfer_node("rg", DEFAULT_RESOURCE_GROUP, 1) + describe_resource_group(DEFAULT_RESOURCE_GROUP) + describe_resource_group("rg") + + describe_resource_group(DEFAULT_RESOURCE_GROUP) + describe_resource_group("rg") + transfer_replica("rg", DEFAULT_RESOURCE_GROUP, _COLLECTION_NAME, 1) + describe_resource_group(DEFAULT_RESOURCE_GROUP) + describe_resource_group("rg") + + drop_resource_group("rg") + release_collection(coll) + drop_collection(_COLLECTION_NAME) + +if __name__ == "__main__": + run() diff --git a/examples/orm_deprecated/resource_group_declarative_api.py b/examples/orm_deprecated/resource_group_declarative_api.py new file mode 100644 index 000000000..a5df77496 --- /dev/null +++ b/examples/orm_deprecated/resource_group_declarative_api.py @@ -0,0 +1,157 @@ +from pymilvus import utility, connections, Collection +from pymilvus.client.constants import DEFAULT_RESOURCE_GROUP +from pymilvus.client.types import ResourceGroupConfig +from typing import List +from example import create_connection, create_collection, insert, create_index + +_PENDING_NODES_RESOURCE_GROUP="pending_nodes" +# Vector parameters +_DIM = 128 +_COLLECTION_NAME = 'rg_declarative_demo' +_ID_FIELD_NAME = 'id_field' +_VECTOR_FIELD_NAME = 'float_vector_field' + +def create_example_collection_and_load(replica_number: int, resource_groups: List[str]): + print(f"\nCreate collection and load...") + coll = create_collection(_COLLECTION_NAME, _ID_FIELD_NAME, _VECTOR_FIELD_NAME) + insert(coll, 10000, _DIM) + coll.flush() + create_index(coll, _VECTOR_FIELD_NAME) + coll.load(replica_number=replica_number, _resource_groups=resource_groups) + +def transfer_replica(src: str, dest: str, num_replica: int): + utility.transfer_replica(source_group=src, target_group=dest, collection_name=_COLLECTION_NAME, num_replicas=num_replica) + +def list_replica(): + coll = Collection(name=_COLLECTION_NAME) + replicas = coll.get_replicas() + print(replicas) + +def init_cluster(node_num: int): + print(f"Init cluster with {node_num} nodes, all nodes will be put in default resource group") + # create a pending resource group, which can used to hold the pending nodes that do not hold any data. + utility.create_resource_group(name=_PENDING_NODES_RESOURCE_GROUP, config=ResourceGroupConfig( + requests={"node_num": 0}, # this resource group can hold 0 nodes, no data will be load on it. + limits={"node_num": 10000}, # this resource group can hold at most 10000 nodes + )) + + # create a default resource group, which can used to hold the nodes that all initial node in it. + utility.update_resource_groups({ + DEFAULT_RESOURCE_GROUP: ResourceGroupConfig( + requests={"node_num": node_num}, + limits={"node_num": node_num}, + transfer_from=[{"resource_group": _PENDING_NODES_RESOURCE_GROUP}], # recover missing node from pending resource group at high priority. + transfer_to=[{"resource_group": _PENDING_NODES_RESOURCE_GROUP}], # recover redundant node to pending resource group at low priority. + )}) + +def list_all_resource_groups(): + rg_names = utility.list_resource_groups() + + for rg_name in rg_names: + resource_group = utility.describe_resource_group(rg_name) + print(resource_group) + # print(f"Resource group {rg_name} has {resource_group.nodes} with config: {resource_group.config}") + +def scale_resource_group_to(name :str, node_num: int): + """scale resource group to node_num nodes, new query node need to be added from outside orchestration system""" + utility.update_resource_groups({ + name: ResourceGroupConfig( + requests={"node_num": node_num}, + limits={"node_num": node_num}, + transfer_from=[{"resource_group": _PENDING_NODES_RESOURCE_GROUP}], # recover missing node from pending resource group at high priority. + transfer_to=[{"resource_group": _PENDING_NODES_RESOURCE_GROUP}], # recover redundant node to pending resource group at low priority. + ) + }) + +def create_resource_group(name: str, node_num: int): + print(f"Create resource group {name} with {node_num} nodes") + utility.create_resource_group(name, config=ResourceGroupConfig( + requests={"node_num": node_num}, + limits={"node_num": node_num}, + transfer_from=[{"resource_group": _PENDING_NODES_RESOURCE_GROUP}], # recover missing node from pending resource group at high priority. + transfer_to=[{"resource_group": _PENDING_NODES_RESOURCE_GROUP}], # recover redundant node to pending resource group at low priority. + )) + +def resource_group_management(): + # cluster is initialized with 1 node in default resource group, and 0 node in pending resource group. + init_cluster(1) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 0 + + # rg1 missing two query node. + create_resource_group("rg1", 2) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 0 + # rg1: 0(missing 2) + + # scale_out(2) + # scale out two new query node into cluster by orchestration system, these node will be added to rg1 automatically. + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 0 + # rg1: 2 + + + # rg1 missing one query node. + scale_resource_group_to("rg1", 3) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 0 + # rg1: 2(missing 1) + + # scale_out(2) + # scale out two new query node into cluster by orchestration system, one node will be added to rg1 automatically + # and one redundant node will be added to pending resource group. + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 1 + # rg1: 3 + + scale_resource_group_to("rg1", 1) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 3 + # rg1: 1 + + # rg2 missing three query node, will be added from pending resource group. + create_resource_group("rg2", 3) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1 + # _PENDING_NODES_RESOURCE_GROUP: 0 + # rg1: 1 + # rg2: 3 + + scale_resource_group_to(DEFAULT_RESOURCE_GROUP, 5) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 1(missing 4) + # _PENDING_NODES_RESOURCE_GROUP: 0 + # rg1: 1 + # rg2: 3 + + # scale_out(4) + list_all_resource_groups() + # DEFAULT_RESOURCE_GROUP: 5 + # _PENDING_NODES_RESOURCE_GROUP: 1 + # rg1: 1 + # rg2: 3 + +def replica_management(): + # load collection into default. + # create_example_collection_and_load(4, ["rg1", "rg2", "rg2", "rg2"]) + # one replica per node in default resource group. + list_replica() + transfer_replica("rg1", DEFAULT_RESOURCE_GROUP, 1) + list_replica() + transfer_replica("rg2", DEFAULT_RESOURCE_GROUP, 1) + list_replica() + # DEFAULT_RESOURCE_GROUP: 2 replica on 5 nodes. + # rg1: 0 replica. + # rg2: 2 replica on 3 nodes. + +if __name__ == "__main__": + create_connection() + resource_group_management() + create_example_collection_and_load(4, ["rg1", "rg2", "rg2", "rg2"]) + replica_management() diff --git a/examples/orm_deprecated/role_and_privilege.py b/examples/orm_deprecated/role_and_privilege.py new file mode 100644 index 000000000..3fb8af49e --- /dev/null +++ b/examples/orm_deprecated/role_and_privilege.py @@ -0,0 +1,222 @@ +from pymilvus import utility, connections, Collection, CollectionSchema, FieldSchema, DataType +from pymilvus.orm.role import Role + +import random + +_CONNECTION = "demo" +_FOO_CONNECTION = "foo_connection" +_DB_NAME = "foo_db" +_HOST = '127.0.0.1' +_PORT = '19530' +_ROOT = "root" +_ROOT_PASSWORD = "Milvus" +_COLLECTION_NAME = "foocol2" + + +def connect_to_milvus(connection=_CONNECTION, user=_ROOT, password=_ROOT_PASSWORD, db_name="default"): + print(f"connect to milvus\n") + connections.connect(alias=connection, + host=_HOST, + port=_PORT, + user=user, + password=password, + db_name=db_name, + ) + + +def create_credential(user, password, connection=_CONNECTION): + print(f"create credential, user: {user}, password: {password}") + utility.create_user(user, password, using=connection) + print(f"create credential down\n") + + +def update_credential(user, password, old_password, connection=_CONNECTION): + print(f"update credential, user: {user}, password: {password}, old password: {old_password}") + utility.reset_password(user, old_password, password, using=connection) + print(f"update credential down\n") + + +def drop_credential(user, connection=_CONNECTION): + print(f"drop credential, user: {user}") + utility.delete_user(user, using=connection) + print(f"drop credential down\n") + + +def select_one_user(username, connection=_CONNECTION): + print(f"select one user, username: {username}") + roles = utility.list_user(username, True, using=connection) + print(roles) + print(f"select one user done\n") + + +def select_all_user(connection=_CONNECTION): + print(f"select all user") + userinfo = utility.list_users(False, using=connection) + print(userinfo) + userinfo = utility.list_users(True, using=connection) + print(userinfo) + print(f"select all user done\n") + + +def select_all_role(connection=_CONNECTION): + print(f"select_all_role") + roles = utility.list_roles(False, using=connection) + print(roles) + roles = utility.list_roles(True, using=connection) + print(roles) + print(f"select_all_role done\n") + + +def has_collection(collection_name, connection=_CONNECTION): + print(f"has collection, collection_name: {collection_name}") + has = utility.has_collection("hello_milvus", using=connection) + print(has) + print(f"has collection end") + + +default_dim = 128 +default_nb = 1000 + + +def gen_float_vectors(num, dim): + return [[random.random() for _ in range(dim)] for _ in range(num)] + + +def gen_float_data(nb): + entities = [ + [i for i in range(nb)], + [float(i) for i in range(nb)], + gen_float_vectors(nb, default_dim), + ] + return entities + + +# rbac I +def rbac_collection(connection=_CONNECTION): + print(f"rbac_collection") + default_float_vec_field_name = "float_vector" + default_fields = [ + FieldSchema(name="int64", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="double", dtype=DataType.DOUBLE), + FieldSchema(name=default_float_vec_field_name, dtype=DataType.FLOAT_VECTOR, dim=default_dim) + ] + default_schema = CollectionSchema(fields=default_fields, description="create_collection_rbac") + collection = Collection(name=_COLLECTION_NAME, schema=default_schema, using=connection) + + data = gen_float_data(default_nb) + collection.insert(data) + + is_exception = False + try: + collection.drop() + except Exception as e: + print(e) + is_exception = True + assert is_exception + + collection = Collection(name=_COLLECTION_NAME, schema=default_schema, using=_CONNECTION) + collection.drop() + print(f"rbac_collection done") + + +# rbac II +def rbac_user(username, password, role_name, connection=_CONNECTION): + update_credential(username, "pfoo1235", password, connection=connection) + print(select_one_user(username, connection=connection)) + is_exception = False + try: + select_all_user(connection=connection) + except Exception as e: + print(e) + is_exception = True + assert is_exception + role = Role(role_name, using=_CONNECTION) + role.grant("User", "*", "SelectUser", db_name=_DB_NAME) + print(select_all_user(connection)) + role.revoke("User", "*", "SelectUser", db_name=_DB_NAME) + + +def role_example(): + role_name = "role_test5" + role = Role(role_name, using=_CONNECTION) + print(f"create role, role_name: {role_name}") + role.create() + print(f"get users") + role.get_users() + print(f"select all role") + print(select_all_role()) + print(f"drop role") + role.drop() + + +def associate_users_with_roles_example(): + username = "root" + role_name = "public" + role = Role(role_name, using=_CONNECTION) + print(f"add user") + role.add_user(username) + print(f"get users") + role.get_users() + print(select_one_user(username)) + print(select_all_user()) + print(f"remove user") + role.remove_user(username) + + +def privilege_example(): + print(f"privilege example") + + username = "foo53" + password = "pfoo123" + role_name = "general53" + privilege_create = "CreateCollection" + privilege_insert = "Insert" + object_name = _COLLECTION_NAME + + create_credential(username, password) + role = Role(role_name, using=_CONNECTION) + print(f"create role, role_name: {role_name}") + role.create() + print(f"add user") + role.add_user(username) + print(f"grant privilege") + role.grant("Global", "*", privilege_create, db_name=_DB_NAME) + role.grant("Collection", object_name, privilege_insert, db_name=_DB_NAME) + # role.grant("Collection", object_name, "*", db_name=_DB_NAME) + # role.grant("Collection", "*", privilege_insert, db_name=_DB_NAME) + + print(f"list grants") + print(role.list_grants(db_name=_DB_NAME)) + print(f"list grant") + print(role.list_grant("Collection", object_name, db_name=_DB_NAME)) + + print(f"list grants") + print(role.list_grants()) + print(f"list grant") + print(role.list_grant("Collection", object_name)) + + connect_to_milvus(connection=_FOO_CONNECTION, user=username, password=password, db_name=_DB_NAME) + has_collection(_COLLECTION_NAME, connection=_FOO_CONNECTION) + rbac_collection(connection=_FOO_CONNECTION) + rbac_user(username, password, role_name, connection=_FOO_CONNECTION) + + print(f"revoke privilege") + role.revoke("Global", "*", privilege_create) + role.revoke("Collection", object_name, privilege_insert, db_name=_DB_NAME) + # role.revoke("Collection", object_name, "*", db_name=_DB_NAME) + # role.revoke("Collection", "*", privilege_insert, db_name=_DB_NAME) + print(f"remove user") + role.remove_user(username) + role.drop() + drop_credential(username) + + +def run(): + connect_to_milvus() + role_example() + associate_users_with_roles_example() + privilege_example() + + +if __name__ == "__main__": + run() diff --git a/examples/orm_deprecated/search_with_template_expression.py b/examples/orm_deprecated/search_with_template_expression.py new file mode 100644 index 000000000..95e8da818 --- /dev/null +++ b/examples/orm_deprecated/search_with_template_expression.py @@ -0,0 +1,196 @@ +# hello_milvus.py demonstrates the basic operations of PyMilvus, a Python SDK of Milvus. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search, query, and hybrid search on entities +# 6. delete entities by PK +# 7. drop collection +import time + +import numpy as np +from pymilvus import ( + connections, + utility, + FieldSchema, CollectionSchema, DataType, + Collection, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 3000, 8 + +################################################################################# +# 1. connect to Milvus +# Add a new connection alias `default` for Milvus server in `localhost:19530` +# Actually the "default" alias is a buildin in PyMilvus. +# If the address of Milvus is the same as `localhost:19530`, you can omit all +# parameters and call the method as: `connections.connect()`. +# +# Note: the `using` parameter of the following methods is default to "default". +print(fmt.format("start connecting to Milvus")) +connections.connect("default", host="localhost", port="19530") + +has = utility.has_collection("hello_milvus") +print(f"Does collection hello_milvus exist in Milvus: {has}") + +################################################################################# +# 2. create collection +# We're going to create a collection with 3 fields. +# +-+------------+------------+------------------+------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+------------+------------+------------------+------------------------------+ +# |1| "pk" | VarChar | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+------------+------------+------------------+------------------------------+ +# |2| "random" | Double | | "a double field" | +# +-+------------+------------+------------------+------------------------------+ +# |3|"embeddings"| FloatVector| dim=8 | "float vector with dim 8" | +# +-+------------+------------+------------------+------------------------------+ +fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=dim) +] + +schema = CollectionSchema(fields, "hello_milvus is the simplest demo to introduce the APIs") + +print(fmt.format("Create collection `hello_milvus`")) +hello_milvus = Collection("hello_milvus", schema, consistency_level="Strong") + +################################################################################ +# 3. insert data +# We are going to insert 3000 rows of data into `hello_milvus` +# Data to be inserted must be organized in fields. +# +# The insert() method returns: +# - either automatically generated primary keys by Milvus if auto_id=True in the schema; +# - or the existing primary key field from the entities if auto_id=False in the schema. + +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) +entities = [ + # provide the pk field because `auto_id` is set to False + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim), np.float32), # field embeddings, supports numpy.ndarray and list +] + +insert_result = hello_milvus.insert(entities) + +row = { + "pk": "19530", + "random": 0.5, + "embeddings": rng.random((1, dim), np.float32)[0] +} +hello_milvus.insert(row) + +hello_milvus.flush() +print(f"Number of entities in Milvus: {hello_milvus.num_entities}") # check the num_entities + +################################################################################ +# 4. create index +# We are going to create an IVF_FLAT index for hello_milvus collection. +# create_index() can only be applied to `FloatVector` and `BinaryVector` fields. +print(fmt.format("Start Creating index IVF_FLAT")) +index = { + "index_type": "IVF_FLAT", + "metric_type": "L2", + "params": {"nlist": 128}, +} + +hello_milvus.create_index("embeddings", index) + +################################################################################ +# 5. search, query, and hybrid search +# After data were inserted into Milvus and indexed, you can perform: +# - search based on vector similarity +# - query based on scalar filtering(boolean, int, etc.) +# - hybrid search based on vector similarity and scalar filtering. +# + +# Before conducting a search or a query, you need to load the data in `hello_milvus` into memory. +print(fmt.format("Start loading")) +hello_milvus.load() + +# ----------------------------------------------------------------------------- +# search based on vector similarity +print(fmt.format("Start searching based on vector similarity")) +vectors_to_search = entities[-1][-2:] +search_params = { + "metric_type": "L2", + "params": {"nprobe": 10}, +} + +exprs = { + "pk == {str}": {"str": "10"}, + "pk in {list}": {"list": ["1", "10", "100"]}, + "random > {target}": {"target": 5}, + "random <= {target}": {"target": 111.5}, + "{min} <= random < {max}": {"min": 0, "max": 9999}, +} + +for expr, expr_params in exprs.items(): + print(f"search with expression: {expr}") + start_time = time.time() + result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr=expr, + output_fields=["random"], expr_params=expr_params) + end_time = time.time() + + for hits in result: + for hit in hits: + print(f"hit: {hit}, random field: {hit.entity.get('random')}") + print(search_latency_fmt.format(end_time - start_time)) + + # ----------------------------------------------------------------------------- + # query based on scalar filtering(boolean, int, etc.) + start_time = time.time() + result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"], expr_params=expr_params) + end_time = time.time() + + print(f"query result:\n-{result}") + print(search_latency_fmt.format(end_time - start_time)) + + # ----------------------------------------------------------------------------- + # pagination + r1 = hello_milvus.query(expr=expr, limit=4, output_fields=["random"], expr_params=expr_params) + r2 = hello_milvus.query(expr=expr, offset=1, limit=3, output_fields=["random"], expr_params=expr_params) + print(f"query pagination(limit=4):\n\t{r1}") + print(f"query pagination(offset=1, limit=3):\n\t{r2}") + + # ----------------------------------------------------------------------------- + # hybrid search + + start_time = time.time() + result = hello_milvus.search(vectors_to_search, "embeddings", search_params, limit=3, expr=expr, + output_fields=["random"], expr_params=expr_params) + end_time = time.time() + + for hits in result: + for hit in hits: + print(f"hit: {hit}, random field: {hit.entity.get('random')}") + print(search_latency_fmt.format(end_time - start_time)) + +############################################################################### +# 6. delete entities by PK +# You can delete entities by their PK values using boolean expressions. +ids = insert_result.primary_keys + +expr = "pk in {list}" +expr_params = {"list": [ids[0], ids[1]]} +print(fmt.format(f"Start deleting with expr `{expr}`")) + +result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"], expr_params=expr_params) +print(f"query before delete by expr=`{expr}` -> result: \n-{result[0]}\n-{result[1]}\n") + +hello_milvus.delete(expr, expr_params=expr_params) + +result = hello_milvus.query(expr=expr, output_fields=["random", "embeddings"], expr_params=expr_params) +print(f"query after delete by expr=`{expr}` -> result: {result}\n") + + +############################################################################### +# 7. drop collection +# Finally, drop the hello_milvus collection +print(fmt.format("Drop collection `hello_milvus`")) +utility.drop_collection("hello_milvus") diff --git a/examples/orm_deprecated/user.py b/examples/orm_deprecated/user.py new file mode 100644 index 000000000..ddacff6f5 --- /dev/null +++ b/examples/orm_deprecated/user.py @@ -0,0 +1,93 @@ +from pymilvus import utility, connections + +_COLLECTION = "demo" + +_HOST = '127.0.0.1' +_PORT = '19530' + +_ROOT = "root" +_CONNECTION_NAME = "default" +_ANOTHER_CONNECTION_NAME = "another_conn" + +_USER = "user" +_PASSWORD = "password" +_ANOTHER_USER = "another_user" +_ANOTHER_PASSWORD = "another_password" +_NEW_PASSWORD = "new_password" + + +def connect_without_auth(connection_name, host, port): + print(f"connect to milvus without auth") + print(f"connection: {connection_name}, host: {host}, port: {port}\n") + connections.connect(alias=connection_name, + host=host, + port=port, + ) + + +def connect_to_milvus(connection_name, host, port, user, password): + print(f"connect to milvus user and password") + print(f"connection: {connection_name}, host: {host}, port: {port}\n") + connections.connect(alias=connection_name, + host=host, + port=port, + user=user, + password=password, + ) + + +def create_user(connection_name, user, password): + print(f"create user, connection: {connection_name}, user: {user}, password: {password}\n") + utility.create_user(user, password, using=connection_name) + + +def update_password(connection_name, user, old_password, new_password): + print(f"update password, connection: {connection_name}, user: {user}, old_password: {old_password}, new_password: {new_password}\n") + utility.update_password(user, old_password, new_password, using=connection_name) + + +def delete_user(connection_name, user): + print(f"delete user, connection: {connection_name}, user: {user}\n") + utility.delete_user(user, using=connection_name) + + +def reset_password(connection_name, user, old_password, new_password): + print(f"reset password, connection: {connection_name}, user: {user}, old_password: {old_password}, new_password: {new_password}\n") + utility.reset_password(user, old_password, new_password, using=connection_name) + + +def test_connection(connection_name): + print(f"test for {connection_name}") + has = utility.has_collection(_COLLECTION, using=connection_name) + print(f"has collection {_COLLECTION}: {has}") + users = utility.list_usernames(using=connection_name) + print(f"users in Milvus: {users}") + print(f"test for {connection_name} done\n") + + +def run(): + connect_without_auth(_ROOT, _HOST, _PORT) + test_connection(_ROOT) + + # after credential created, _ROOT was not able to call rpc of Milvus. + # we should use new connection to communicate with Milvus. + create_user(_ROOT, _USER, _PASSWORD) + connect_to_milvus(_CONNECTION_NAME, _HOST, _PORT, _USER, _PASSWORD) + test_connection(_CONNECTION_NAME) + + create_user(_CONNECTION_NAME, _ANOTHER_USER, _ANOTHER_PASSWORD) + update_password(_CONNECTION_NAME, _ANOTHER_USER, _ANOTHER_PASSWORD, _NEW_PASSWORD) + connect_to_milvus(_ANOTHER_CONNECTION_NAME, _HOST, _PORT, _ANOTHER_USER, _NEW_PASSWORD) + test_connection(_ANOTHER_CONNECTION_NAME) + + reset_password(_CONNECTION_NAME, _USER, _PASSWORD, _NEW_PASSWORD) + test_connection(_CONNECTION_NAME) + + delete_user(_CONNECTION_NAME, _ANOTHER_USER) + delete_user(_CONNECTION_NAME, _USER) + test_connection(_ROOT) + + +if __name__ == "__main__": + run() + diff --git a/examples/partition.py b/examples/partition.py index 15a54ed57..a21ac0c42 100644 --- a/examples/partition.py +++ b/examples/partition.py @@ -1,146 +1,88 @@ -# Copyright (C) 2019-2020 Zilliz. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under the License. - +import time +import numpy as np from pymilvus import ( - connections, list_collections, has_partition, - FieldSchema, CollectionSchema, DataType, - Collection, Partition + MilvusClient, ) -import random -from sklearn import preprocessing -import string - -default_dim = 128 -default_nb = 3000 -default_float_vec_field_name = "float_vector" -default_segment_row_limit = 1000 - - -all_index_types = [ - "FLAT", - "IVF_FLAT", - "IVF_SQ8", - # "IVF_SQ8_HYBRID", - "IVF_PQ", - "HNSW", - # "NSG", - "ANNOY", - "RHNSW_FLAT", - "RHNSW_PQ", - "RHNSW_SQ", - "BIN_FLAT", - "BIN_IVF_FLAT" -] - -default_index_params = [ - {"nlist": 128}, - {"nlist": 128}, - {"nlist": 128}, - # {"nlist": 128}, - {"nlist": 128, "m": 16, "nbits": 8}, - {"M": 48, "efConstruction": 500}, - # {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50}, - {"n_trees": 50}, - {"M": 48, "efConstruction": 500}, - {"M": 48, "efConstruction": 500, "PQM": 64}, - {"M": 48, "efConstruction": 500}, - {"nlist": 128}, - {"nlist": 128} -] - - -default_index = {"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"} - - -def gen_default_fields(auto_id=True): - default_fields = [ - FieldSchema(name="count", dtype=DataType.INT64, is_primary=True), - FieldSchema(name="float", dtype=DataType.FLOAT), - FieldSchema(name=default_float_vec_field_name, dtype=DataType.FLOAT_VECTOR, dim=default_dim) - ] - default_schema = CollectionSchema(fields=default_fields, description="test collection", - segment_row_limit=default_segment_row_limit, auto_id=False) - return default_schema - - -def gen_vectors(num, dim, is_normal=True): - vectors = [[random.random() for _ in range(dim)] for _ in range(num)] - vectors = preprocessing.normalize(vectors, axis=1, norm='l2') - return vectors.tolist() - - -def gen_data(nb, is_normal=False): - vectors = gen_vectors(nb, default_dim, is_normal) - entities = [ - [i for i in range(nb)], - [float(i) for i in range(nb)], - vectors - ] - return entities - - -def gen_unique_str(str_value=None): - prefix = "".join(random.choice(string.ascii_letters + string.digits) for _ in range(8)) - return "collection_" + prefix if str_value is None else str_value + "_" + prefix - - -def binary_support(): - return ["BIN_FLAT", "BIN_IVF_FLAT"] - - -def gen_simple_index(): - index_params = [] - for i in range(len(all_index_types)): - if all_index_types[i] in binary_support(): - continue - dic = {"index_type": all_index_types[i], "metric_type": "L2"} - dic.update({"params": default_index_params[i]}) - index_params.append(dic) - return index_params - - -def test_partition(): - connections.connect(alias="default") - print("create collection") - collection = Collection(name=gen_unique_str(), schema=gen_default_fields()) - print("create partition") - partition = Partition(collection, name=gen_unique_str()) - print(list_collections()) - assert has_partition(collection.name, partition.name) is True - - data = gen_data(default_nb) - print("insert data to partition") - partition.insert(data) - assert partition.is_empty is False - assert partition.num_entities == default_nb - - print("load partition") - partition.load() - topK = 5 - round_decimal = 3 - search_params = {"metric_type": "L2", "params": {"nprobe": 10}} - print("search partition") - res = partition.search(data[2][-2:], "float_vector", search_params, topK, "count > 100", round_decimal=round_decimal) - for hits in res: - for hit in hits: - print(hit) - - print("release partition") - partition.release() - print("drop partition") - partition.drop() - print("drop collection") - collection.drop() - - -if __name__ == "__main__": - test_partition() +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) + +milvus_client.create_partition(collection_name, partition_name = "p1") +milvus_client.insert(collection_name, {"id": 1, "vector": rng.random((1, dim))[0], "a": 100}, partition_name = "p1") +milvus_client.insert(collection_name, {"id": 2, "vector": rng.random((1, dim))[0], "b": 200}, partition_name = "p1") +milvus_client.insert(collection_name, {"id": 3, "vector": rng.random((1, dim))[0], "c": 300}, partition_name = "p1") + +milvus_client.create_partition(collection_name, partition_name = "p2") +milvus_client.insert(collection_name, {"id": 4, "vector": rng.random((1, dim))[0], "e": 400}, partition_name = "p2") +milvus_client.insert(collection_name, {"id": 5, "vector": rng.random((1, dim))[0], "f": 500}, partition_name = "p2") +milvus_client.insert(collection_name, {"id": 6, "vector": rng.random((1, dim))[0], "g": 600}, partition_name = "p2") + +has_p1 = milvus_client.has_partition(collection_name, "p1") +print("has partition p1", has_p1) + +has_p3 = milvus_client.has_partition(collection_name, "p3") +print("has partition p3", has_p3) + +partitions = milvus_client.list_partitions(collection_name) +print("partitions:", partitions) + +milvus_client.release_collection(collection_name) +milvus_client.load_partitions(collection_name, partition_names =["p1", "p2"]) + +replicas=milvus_client.describe_replica(collection_name) +print("replicas:", replicas) + +print(fmt.format("Start search in partiton p1")) +vectors_to_search = rng.random((1, dim)) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"], partition_names = ["p1"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.release_partitions(collection_name, partition_names = ["p1"]) +milvus_client.drop_partition(collection_name, partition_name = "p1", timeout = 2.0) +print("successfully drop partition p1") + +try: + milvus_client.drop_partition(collection_name, partition_name = "p2", timeout = 2.0) +except Exception as e: + print(f"cacthed {e}") + +has_p1 = milvus_client.has_partition(collection_name, "p1") +print("has partition of p1:", has_p1) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +assert len(query_results) == 0 + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[4]) +print(query_results[0]) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 500") +for ret in query_results: + print(ret) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/privilege_group.py b/examples/privilege_group.py new file mode 100644 index 000000000..a5aa917f6 --- /dev/null +++ b/examples/privilege_group.py @@ -0,0 +1,11 @@ +from pymilvus import MilvusClient + + +uri = "http://localhost:19530" +c = MilvusClient(uri=uri) + +c.create_privilege_group(group_name="query_group") +c.add_privileges_to_group(group_name="query_group", privileges=["Query", "Search"]) +c.list_privilege_groups() +c.remove_privileges_from_group(group_name="query_group", privileges=["Query", "Search"]) +c.drop_privilege_group(group_name="query_group") diff --git a/examples/rbac.py b/examples/rbac.py new file mode 100644 index 000000000..cdc69ebdf --- /dev/null +++ b/examples/rbac.py @@ -0,0 +1,154 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +super_user = "root" +super_password = "Milvus" + +fmt = "\n=== {:30} ===\n" +dim = 8 + +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530", user=super_user, password=super_password) + +milvus_client.drop_user("user1") +milvus_client.drop_user("user2") +milvus_client.drop_user("user3") + +milvus_client.create_user("user1", "password1") +milvus_client.create_user("user2", "password2") +milvus_client.create_user("user3", "password3") + +users = milvus_client.list_users() +print("users:", users) + +milvus_client.drop_user("user3") + +users = milvus_client.list_users() +print("after drop opeartion, users:", users) + + +db_rw_privileges = [ + {"object_type": "Global", "object_name": "*", "privilege": "CreateCollection"}, + {"object_type": "Global", "object_name": "*", "privilege": "DropCollection"}, + {"object_type": "Global", "object_name": "*", "privilege": "DescribeCollection"}, + {"object_type": "Global", "object_name": "*", "privilege": "ShowCollections"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Search"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Query"}, + {"object_type": "Collection", "object_name": "*", "privilege": "CreateIndex"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Load"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Release"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Delete"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Insert"}, +] + +db_ro_privileges = [ + {"object_type": "Global", "object_name": "*", "privilege": "DescribeCollection"}, + {"object_type": "Global", "object_name": "*", "privilege": "ShowCollections"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Search"}, + {"object_type": "Collection", "object_name": "*", "privilege": "Query"}, +] + +role_db_rw = "db_rw" +role_db_ro = "db_ro" +role_custom = "custom_role" +role_cluster_admin = "cluster_admin" +role_database_readonly = "database_readonly" +role_collection_readwrite = "collection_readwrite" + +current_roles = milvus_client.list_roles() +print("current roles:", current_roles) + +for role in [role_db_rw, role_db_ro]: + if role in current_roles: + role_info = milvus_client.describe_role(role) + for item in role_info['privileges']: + milvus_client.revoke_privilege(role, item["object_type"], item["privilege"], item["object_name"]) + + milvus_client.drop_role(role) + +# manage custom privilege group and grant it to custom role +privilege_group_name = "custom_privilege_group" +milvus_client.create_privilege_group(privilege_group_name) +milvus_client.add_privileges_to_group(privilege_group_name, ["Search", "Query"]) +milvus_client.list_privilege_groups() +milvus_client.remove_privileges_from_group(privilege_group_name, ["Search"]) +milvus_client.list_privilege_groups() +milvus_client.create_role(role_custom) +milvus_client.grant_privilege_v2(role_custom, privilege_group_name, "*") + +# grant cluster level built-in privilege group +milvus_client.create_role(role_cluster_admin) +milvus_client.grant_privilege_v2(role_cluster_admin, "ClusterAdmin", "*", "*") + +# grant database level built-in privilege group +milvus_client.create_role(role_database_readonly) +milvus_client.grant_privilege_v2(role_database_readonly, "DatabaseReadOnly", "*", "db1") + +# grant collection level built-in privilege group +milvus_client.create_role(role_collection_readwrite) +milvus_client.grant_privilege_v2(role_collection_readwrite, "CollectionReadWrite", "col1", "db1") + +roles = milvus_client.list_roles() +print("roles:", roles) + +milvus_client.create_role(role_db_rw) +for item in db_rw_privileges: + milvus_client.grant_privilege(role_db_rw, item["object_type"], item["privilege"], item["object_name"]) + + +milvus_client.create_role(role_db_ro) +for item in db_ro_privileges: + milvus_client.grant_privilege(role_db_ro, item["object_type"], item["privilege"], item["object_name"]) + + +roles = milvus_client.list_roles() +print("roles:", roles) +for role in roles: + role_info = milvus_client.describe_role(role) + print(f"info for {role}:", role_info) + + +user1_info = milvus_client.describe_user("user1") +print("user info for user1:", user1_info) +print(f"grant {role_db_rw} to user1") +milvus_client.grant_role("user1", role_db_rw) +print("user info for user1:", user1_info) +milvus_client.grant_role("user1", role_collection_readwrite) + +milvus_client.grant_role("user2", role_db_ro) +milvus_client.grant_role("user2", role_db_rw) +milvus_client.grant_role("user2", role_database_readonly) +milvus_client.grant_role("user2", role_cluster_admin) + +user2_info = milvus_client.describe_user("user2") +print("user info for user2:", user2_info) +print(f"revoke {role} from user2") +milvus_client.revoke_role("user2", role_db_rw) +user2_info = milvus_client.describe_user("user2") +print("user info for user2:", user2_info) + +user3_info = milvus_client.describe_user("user3") +print("user info for user3:", user3_info) + + +# revoke all privileges before dropping roles and users +milvus_client.revoke_privilege_v2(role_cluster_admin, "ClusterAdmin", "*", "*") +milvus_client.revoke_privilege_v2(role_database_readonly, "DatabaseReadOnly", "*", "db1") +milvus_client.revoke_privilege_v2(role_collection_readwrite, "CollectionReadWrite", "col1", "db1") +milvus_client.revoke_privilege_v2(role_custom, privilege_group_name, "*") + +milvus_client.drop_role(role_cluster_admin) +milvus_client.drop_role(role_database_readonly) +milvus_client.drop_role(role_collection_readwrite) +milvus_client.drop_role(role_custom) +milvus_client.list_roles + +milvus_client.drop_privilege_group(privilege_group_name) + +milvus_client.drop_user("user1") +milvus_client.drop_user("user2") +milvus_client.drop_user("user3") + diff --git a/examples/resource_group.py b/examples/resource_group.py new file mode 100644 index 000000000..828a7357a --- /dev/null +++ b/examples/resource_group.py @@ -0,0 +1,105 @@ +from pymilvus import ( + MilvusClient, + DataType, +) +from pymilvus.client.constants import DEFAULT_RESOURCE_GROUP + +from pymilvus.client.types import ( + ResourceGroupConfig, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + + +## create collection and load collection +print("create collection and load collection") +collection_name = "hello_milvus" +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("title", DataType.VARCHAR, max_length=64) +milvus_client.create_collection(collection_name, schema=schema, consistency_level="Strong") +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", metric_type="L2") +index_params.add_index(field_name = "title", index_type = "Trie", index_name="my_trie") +milvus_client.create_index(collection_name, index_params) +milvus_client.load_collection(collection_name) + + +## create resource group +print("create resource group") +milvus_client.create_resource_group("rg1") +milvus_client.create_resource_group("rg2") + +## update resource group +configs = { + "rg1": ResourceGroupConfig( + requests={"node_num": 1}, + limits={"node_num": 5}, + transfer_from=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + transfer_to=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + ), + "rg2": ResourceGroupConfig( + requests={"node_num": 4}, + limits={"node_num": 4}, + transfer_from=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + transfer_to=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + ), + } +milvus_client.update_resource_groups(configs) + +## describe resource group +print("describe rg1") +result = milvus_client.describe_resource_group("rg1") +print(result) + +print("describe rg2") +result = milvus_client.describe_resource_group("rg2") +print(result) + +## list resource group +print("list resource group") +result = milvus_client.list_resource_groups() +print(result) + +## transfer replica +print("transfer replica to rg1") +milvus_client.transfer_replica(DEFAULT_RESOURCE_GROUP, "rg1", collection_name, 1) +print("describe rg1 after transfer replica in") +result = milvus_client.describe_resource_group("rg1") +print(result) + +milvus_client.transfer_replica("rg1", DEFAULT_RESOURCE_GROUP, collection_name, 1) +print("describe rg1 after transfer replica out") +result = milvus_client.describe_resource_group("rg1") +print(result) + +## drop resource group +print("drop resource group") +# create resource group +configs = { + "rg1": ResourceGroupConfig( + requests={"node_num": 0}, + limits={"node_num": 0}, + transfer_from=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + transfer_to=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + ), + "rg2": ResourceGroupConfig( + requests={"node_num": 0}, + limits={"node_num": 0}, + transfer_from=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + transfer_to=[{"resource_group": DEFAULT_RESOURCE_GROUP}], + ), + } +milvus_client.update_resource_groups(configs) +milvus_client.drop_resource_group("rg1") +milvus_client.drop_resource_group("rg2") + + diff --git a/examples/search_group_by.py b/examples/search_group_by.py new file mode 100644 index 000000000..5ad3c92e6 --- /dev/null +++ b/examples/search_group_by.py @@ -0,0 +1,85 @@ +from pymilvus.milvus_client.milvus_client import MilvusClient +from pymilvus import ( + FieldSchema, CollectionSchema, DataType, +) +import numpy as np +from typing import List + +collection_name = "test_milvus_client_iterator" +prepare_new_data = False +clean_exist = False + +USER_ID = "id" +AGE = "age" +DEPOSIT = "deposit" +PICTURE = "picture" +DIM = 8 +NUM_ENTITIES = 10000 +rng = np.random.default_rng(seed=19530) +milvus_client = MilvusClient("http://localhost:19530") +if milvus_client.has_collection(collection_name) and clean_exist: + milvus_client.drop_collection(collection_name) + print(f"dropped existed collection{collection_name}") + +if not milvus_client.has_collection(collection_name): + fields = [ + FieldSchema(name=USER_ID, dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name=AGE, dtype=DataType.INT64), + FieldSchema(name=DEPOSIT, dtype=DataType.DOUBLE), + FieldSchema(name=PICTURE, dtype=DataType.FLOAT_VECTOR, dim=DIM) + ] + schema = CollectionSchema(fields) + milvus_client.create_collection(collection_name, dimension=DIM, schema=schema) + +if prepare_new_data: + entities = [] + for i in range(NUM_ENTITIES): + entity = { + USER_ID: i, + AGE: (i % 100), + DEPOSIT: float(i), + PICTURE: rng.random((1, DIM))[0] + } + entities.append(entity) + milvus_client.insert(collection_name, entities) + milvus_client.flush(collection_name) + print(f"Finish flush collections:{collection_name}") + +index_params = milvus_client.prepare_index_params() + +index_params.add_index( + field_name=PICTURE, + index_type='IVF_FLAT', + metric_type='L2', + params={"nlist": 1024} +) +milvus_client.create_index(collection_name, index_params) +milvus_client.load_collection(collection_name) + +nq = 3 +def print_res(result: List[List[dict]]): + for i in range(nq): + r = result[i] + print(f"search_group_by_res_i:{i}") + for e in r: + print(f"search_entity:{e}") + print(f"======================================================") + + +vector_to_search = rng.random((nq, DIM), np.float32) +# just search_group_by, no group_size, only 1 entities per group +res = milvus_client.search(collection_name, data=vector_to_search, limit=10, anns_field=PICTURE, + output_fields=[USER_ID, AGE], group_by_field=AGE) +print_res(res) + +# search_group_by, with group_size=3, but not strict_group_size, entity number in per group may be 1~3 +res = milvus_client.search(collection_name, data=vector_to_search, limit=10, anns_field=PICTURE, + output_fields=[USER_ID, AGE], group_by_field=AGE, group_size=3) +print_res(res) + +# search_group_by, with group_size=3, and strict_group_size=true, entity number +# in per group will be exactly 3 if data's sufficient +res = milvus_client.search(collection_name, data=vector_to_search, limit=10, anns_field=PICTURE, + output_fields=[USER_ID, AGE], group_by_field=AGE, group_size=3, strict_group_size=True) +print_res(res) + diff --git a/examples/search_with_template_expression.py b/examples/search_with_template_expression.py new file mode 100644 index 000000000..ac3f865c2 --- /dev/null +++ b/examples/search_with_template_expression.py @@ -0,0 +1,104 @@ +import numpy as np +from pymilvus import ( + MilvusClient, + DataType, +) + +fmt = "\n=== {:30} ===\n" +search_latency_fmt = "search latency = {:.4f}s" +num_entities, dim = 3000, 8 + +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(auto_id=False, description="hello_milvus is the simplest demo to introduce the APIs") +schema.add_field("pk", DataType.VARCHAR, is_primary=True, max_length=100) +schema.add_field("random", DataType.DOUBLE) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", index_type = "IVF_FLAT", metric_type="L2", nlist=128) + +print(fmt.format("Create collection `hello_milvus`")) + +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + + +print(fmt.format("Start inserting entities")) +rng = np.random.default_rng(seed=19530) +entities = [ + # provide the pk field because `auto_id` is set to False + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim)), # field embeddings, supports numpy.ndarray and list +] + +rows = [ {"pk": entities[0][i], "random": entities[1][i], "embeddings": entities[2][i]} for i in range (num_entities)] + +insert_result = milvus_client.insert(collection_name, rows) + + +print(fmt.format("Start loading")) +milvus_client.load_collection(collection_name) + +field_name = "embeddings" + +req_list = [] +nq = 1 +default_limit = 5 +vectors_to_search = [] + +filters = { + "pk == {str}": {"str": "10"}, + "pk in {list}": {"list": ["1", "10", "100"]}, + "random > {target}": {"target": 5}, + "random <= {target}": {"target": 111.5}, + "{min} <= random < {max}": {"min": 0, "max": 9999}, +} + +search_param = { + "data": vectors_to_search, + "anns_field": field_name, + "param": {"metric_type": "L2"}, + "limit": default_limit} +vectors_to_search = rng.random((nq, dim)) + +for filter, filter_params in filters.items(): + print(f"search with filter: {filter}") + result = milvus_client.search(collection_name=collection_name, data=vectors_to_search, filter=filter, limit=3, + output_fields=["random"], search_params=search_param, filter_params=filter_params) + + for hits in result: + for hit in hits: + print(f"hit: {hit}") + + query_results = milvus_client.query(collection_name, filter=filter, output_fields=["random"], + filter_params=filter_params, limit=3) + for ret in query_results: + print("query result: ", ret) + +print(fmt.format("Search after delete")) +ids = insert_result["ids"] +filter = "pk in {list}" +filter_params = {"list": [ids[0], ids[1]]} +print(f"Start deleting with filter `{filter}`") + +result = milvus_client.query(collection_name, filter=filter, output_fields=["random"], + filter_params=filter_params, limit=3) +print(f"query before delete by filter=`{filter}` -> result: \n-{result[0]}\n-{result[1]}\n") + +milvus_client.delete(collection_name=collection_name, filter=filter, filter_params=filter_params) + +result = milvus_client.query(collection_name, filter=filter, output_fields=["random"], + filter_params=filter_params, limit=3) +print(f"query after delete by filter=`{filter}` -> result: {result}\n") + +print(fmt.format("Release collection")) +milvus_client.release_collection(collection_name) + +print(fmt.format("Drop collection")) +milvus_client.drop_collection(collection_name) diff --git a/examples/simple.py b/examples/simple.py new file mode 100644 index 000000000..4e1006482 --- /dev/null +++ b/examples/simple.py @@ -0,0 +1,73 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "vector": rng.random((1, dim))[0], "a": 100}, + {"id": 2, "vector": rng.random((1, dim))[0], "b": 200}, + {"id": 3, "vector": rng.random((1, dim))[0], "c": 300}, + {"id": 4, "vector": rng.random((1, dim))[0], "d": 400}, + {"id": 5, "vector": rng.random((1, dim))[0], "e": 500}, + {"id": 6, "vector": rng.random((1, dim))[0], "f": 600}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) +print(fmt.format("Inserting entities done")) +print(insert_result) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +print(query_results[0]) + +upsert_ret = milvus_client.upsert(collection_name, {"id": 2 , "vector": rng.random((1, dim))[0], "g": 100}) +print(upsert_ret) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +print(query_results[0]) + + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 600") +for ret in query_results: + print(ret) + + +print(f"start to delete by specifying filter in collection {collection_name}") +delete_result = milvus_client.delete(collection_name, ids=[6]) +print(delete_result) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 600") +assert len(query_results) == 0 + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/simple_async.py b/examples/simple_async.py new file mode 100644 index 000000000..a8be4ac0f --- /dev/null +++ b/examples/simple_async.py @@ -0,0 +1,125 @@ +from pymilvus import ( + DataType, + MilvusClient, + AsyncMilvusClient, + AnnSearchRequest, + RRFRanker, +) +import numpy as np +import asyncio +import time +import random + +fmt = "\n=== {:30} ===\n" +num_entities, dim = 100, 8 +default_limit = 3 +collection_name = "hello_milvus" +rng = np.random.default_rng(seed=19530) + +milvus_client = MilvusClient("example.db") +async_milvus_client = AsyncMilvusClient("example.db") + +loop = asyncio.get_event_loop() + +schema = milvus_client.create_schema(auto_id=False, description="hello_milvus is the simplest demo to introduce the APIs") +schema.add_field("pk", DataType.VARCHAR, is_primary=True, max_length=100) +schema.add_field("random", DataType.DOUBLE) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("embeddings2", DataType.FLOAT_VECTOR, dim=dim) + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", index_type = "HNSW", metric_type="L2", nlist=128) +index_params.add_index(field_name = "embeddings2",index_type = "HNSW", metric_type="L2", nlist=128) + +# Always use `await` when you want to guarantee the execution order of tasks. +async def recreate_collection(): + print(fmt.format("Start dropping collection")) + await async_milvus_client.drop_collection(collection_name) + print(fmt.format("Dropping collection done")) + print(fmt.format("Start creating collection")) + await async_milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + print(fmt.format("Creating collection done")) + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + loop.run_until_complete(recreate_collection()) +else: + print(fmt.format("Start creating collection")) + loop.run_until_complete(async_milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong")) + print(fmt.format("Creating collection done")) + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +async def async_insert(collection_name): + entities = [ + # provide the pk field because `auto_id` is set to False + [str(i) for i in range(num_entities)], + rng.random(num_entities).tolist(), # field random, only supports list + rng.random((num_entities, dim)), # field embeddings, supports numpy.ndarray and list + rng.random((num_entities, dim)), # field embeddings2, supports numpy.ndarray and list + ] + rows = [ {"pk": entities[0][i], "random": entities[1][i], "embeddings": entities[2][i], "embeddings2": entities[3][i]} for i in range (num_entities)] + print(fmt.format("Start async inserting entities")) + + start_time = time.time() + tasks = [] + for row in rows: + task = async_milvus_client.insert(collection_name, [row]) + tasks.append(task) + await asyncio.gather(*tasks) + end_time = time.time() + print(fmt.format("Total time: {:.2f} seconds".format(end_time - start_time))) + print(fmt.format("Async inserting entities done")) + +loop.run_until_complete(async_insert(collection_name)) + +async def other_async_task(collection_name): + tasks = [] + # search + random_vector = rng.random((1, dim)) + random_vector2 = rng.random((1, dim)) + task = async_milvus_client.search(collection_name, random_vector, limit=default_limit, output_fields=["pk"], anns_field="embeddings") + tasks.append(task) + # hybrid search + search_param = { + "data": random_vector, + "anns_field": "embeddings", + "param": {"metric_type": "L2"}, + "limit": default_limit, + "expr": "random > 0.5"} + req = AnnSearchRequest(**search_param) + task = async_milvus_client.hybrid_search(collection_name, [req], RRFRanker(), default_limit, output_fields=["pk"]) + tasks.append(task) + # get + random_pk = random.randint(0, num_entities - 1) + task = async_milvus_client.get(collection_name=collection_name, ids=[random_pk]) + tasks.append(task) + # query + task = async_milvus_client.query(collection_name=collection_name, filter="", limit=default_limit) + tasks.append(task) + # delete + task = async_milvus_client.delete(collection_name=collection_name, ids=[random_pk]) + tasks.append(task) + # insert + task = async_milvus_client.insert( + collection_name=collection_name, + data=[{"pk": str(random_pk), "random": random_vector[0][0], "embeddings": random_vector[0], "embeddings2": random_vector[0]}], + ) + tasks.append(task) + # upsert + task = async_milvus_client.upsert( + collection_name=collection_name, + data=[{"pk": str(random_pk), "random": random_vector2[0][0], "embeddings": random_vector2[0], "embeddings2": random_vector2[0]}], + ) + tasks.append(task) + + results = await asyncio.gather(*tasks) + return results + +results = loop.run_until_complete(other_async_task(collection_name)) +for r in results: + print(r) diff --git a/examples/simple_async2.py b/examples/simple_async2.py new file mode 100644 index 000000000..5db4fd7db --- /dev/null +++ b/examples/simple_async2.py @@ -0,0 +1,75 @@ +from pymilvus import ( + DataType, + MilvusClient, + AsyncMilvusClient, +) +import numpy as np +import asyncio + +num_entities, dim = 10000, 128 +nq, default_limit = 2, 3 +collection_name = "hello_milvus" +partition_name = "p1" +index_field_name = "vector" +rng = np.random.default_rng(seed=19530) +output_fields = ["id"] +uri = "http://localhost:19530" + +milvus_client = MilvusClient(uri=uri) +async_milvus_client = AsyncMilvusClient(uri=uri) + +loop = asyncio.get_event_loop() + +# create collection, partition, index +print("Start dropping all collection") +for c in milvus_client.list_collections(): + loop.run_until_complete(async_milvus_client.drop_collection(c)) +print("Dropping collection done") +print("Start creating collection") +schema = async_milvus_client.create_schema(auto_id=False) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("vector", DataType.FLOAT_VECTOR, dim=dim) +loop.run_until_complete(async_milvus_client.create_collection(collection_name, schema=schema, consistency_level="Strong")) +print("Creating collection done") +print("Start creating partition") +loop.run_until_complete(async_milvus_client.create_partition(collection_name, partition_name=partition_name)) +print("Creating partition done") +print("Start creating index") +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name=index_field_name, index_type="HNSW", metric_type="COSINE", M=30, efConstruction=200) +loop.run_until_complete(async_milvus_client.create_index(collection_name, index_params)) +print("Creating index done") + +print(f"all collections: {milvus_client.list_collections()}") +print(f"schema of collection {collection_name}:", milvus_client.describe_collection(collection_name)) +print(f"load state of collection {collection_name}:", milvus_client.get_load_state(collection_name, "")) +print(f"has partition p1:", milvus_client.has_partition(collection_name, partition_name)) +print(f"load state of partition p1:", milvus_client.get_load_state(collection_name, partition_name)) +print(f"describe index {index_field_name}:", milvus_client.describe_index(collection_name, index_field_name)) + +# load collecton, partition +loop.run_until_complete(async_milvus_client.load_partitions(collection_name, partition_name)) +loop.run_until_complete(async_milvus_client.load_collection(collection_name)) + +print("Loading collecton, partition done") +print(f"load state of collection {collection_name}:", milvus_client.get_load_state(collection_name, "")) +print(f"load state of partition p1:", milvus_client.get_load_state(collection_name, partition_name)) + +# release collection, partition +loop.run_until_complete(async_milvus_client.release_partitions(collection_name, partition_name)) +loop.run_until_complete(async_milvus_client.release_collection(collection_name)) + +print("Releasing collecton, partition done") +print(f"load state of collection {collection_name}:", milvus_client.get_load_state(collection_name, "")) +print(f"load state of partition p1:", milvus_client.get_load_state(collection_name, partition_name)) + +# drop collection, partition, index +loop.run_until_complete(async_milvus_client.drop_partition(collection_name, partition_name)) +print("Dropping partition done") +print(f"has partition p1:", milvus_client.has_partition(collection_name, partition_name)) +loop.run_until_complete(async_milvus_client.drop_index(collection_name, index_field_name)) +print("Dropping index done") +print(f"describe index {index_field_name}:", milvus_client.describe_index(collection_name, index_field_name)) +loop.run_until_complete(async_milvus_client.drop_collection(collection_name)) +print("Dropping collection done") +print(f"all collections: {milvus_client.list_collections()}") diff --git a/examples/simple_auto_id.py b/examples/simple_auto_id.py new file mode 100644 index 000000000..873303df1 --- /dev/null +++ b/examples/simple_auto_id.py @@ -0,0 +1,60 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2", auto_id=True) + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"vector": rng.random((1, dim))[0], "a": 100}, + {"vector": rng.random((1, dim))[0], "b": 200}, + {"vector": rng.random((1, dim))[0], "c": 300}, + {"vector": rng.random((1, dim))[0], "d": 400}, + {"vector": rng.random((1, dim))[0], "e": 500}, + {"vector": rng.random((1, dim))[0], "f": 600}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) +print("insert done:", insert_result) + +print(fmt.format("Start query by specifying filter")) +query_results = milvus_client.query(collection_name, filter= "f == 600") +for ret in query_results: + print(ret) + + +print(f"start to delete by specifying filter in collection {collection_name}") +delete_result = milvus_client.delete(collection_name, filter = "f == 600") +print(delete_result) + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter= "f == 600") +assert len(query_results) == 0 + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"]) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/simple_cost.py b/examples/simple_cost.py new file mode 100644 index 000000000..c57e50481 --- /dev/null +++ b/examples/simple_cost.py @@ -0,0 +1,72 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_client_cost" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +milvus_client.create_collection(collection_name, dim, consistency_level="Strong", metric_type="L2") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"id": 1, "vector": rng.random((1, dim))[0], "a": 100}, + {"id": 2, "vector": rng.random((1, dim))[0], "b": 200}, + {"id": 3, "vector": rng.random((1, dim))[0], "c": 300}, + {"id": 4, "vector": rng.random((1, dim))[0], "d": 400}, + {"id": 5, "vector": rng.random((1, dim))[0], "e": 500}, + {"id": 6, "vector": rng.random((1, dim))[0], "f": 600}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) +print(fmt.format("Inserting entities done")) +# OUTPUT: +# insert result: {'insert_count': 6, 'ids': [1, 2, 3, 4, 5, 6], 'cost': '1'}; +# insert cost: 1 +print(f"insert result: {insert_result};\ninsert cost: {insert_result['cost']}") + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +# OUTPUT: +# query result: data: ["{'id': 2, 'vector': [0.9007387, 0.44944635, 0.18477614, 0.42930314, 0.40345728, 0.3957196, 0.6963897, 0.24356908], 'b': 200}"], extra_info: {'cost': '21'} +# query cost: 21 +print(f"query result: {query_results}\nquery cost: {query_results.extra['cost']}") + +upsert_ret = milvus_client.upsert(collection_name, {"id": 2 , "vector": rng.random((1, dim))[0], "g": 100}) +# OUTPUT: +# upsert result: {'upsert_count': 1, 'cost': '2'} +# upsert cost: 2 +print(f"upsert result: {upsert_ret}\nupsert cost: {upsert_ret['cost']}") + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query(collection_name, ids=[2]) +print(f"query result: {query_results}\nquery cost: {query_results.extra['cost']}") + +print(f"start to delete by specifying filter in collection {collection_name}") +delete_result = milvus_client.delete(collection_name, ids=[6]) +# OUTPUT: +# delete result: {'delete_count': 1, 'cost': '1'} +# delete cost: 1 +print(f"delete result: {delete_result}\ndelete cost: {delete_result['cost']}") + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["pk", "a", "b"]) +print(f"search result: {result}\nsearch cost: {result.extra['cost']}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/simple_partial_update.py b/examples/simple_partial_update.py new file mode 100644 index 000000000..61159de97 --- /dev/null +++ b/examples/simple_partial_update.py @@ -0,0 +1,174 @@ +#!/usr/bin/env python3 + +""" +Simple partial update example for Milvus. + +This example demonstrates the difference between partial and full upsert operations: + +1. partial_update=True: Update only specified fields, preserve others + - Only provide fields you want to change + - Vectors and other fields remain unchanged + - Ideal for metadata updates + +2. partial_update=False (default): Replace entire entity + - Must provide ALL required fields including vectors + - Missing fields may cause errors or data loss + - Use for complete entity replacement + +Key takeaway: Always use partial_update=True when updating subset of fields! +""" + +import numpy as np +from pymilvus import MilvusClient, DataType, CollectionSchema, FieldSchema +import logging + +logging.basicConfig(level=logging.DEBUG) + +logger = logging.getLogger(__name__) + +logger.info("Starting simple partial update demo") +logger.warning("Setting up collection with explicit schema and data...") +logger.debug("Setting up collection with explicit schema and data...") +# Setup +dim = 8 +collection_name = "simple_partial_update" +client = MilvusClient("http://localhost:19530") + +print("=== Simple Partial Update Demo ===\n") + +# 1. Create collection with explicit schema and insert data +print("1. Setting up collection with explicit schema and data...") +if client.has_collection(collection_name): + client.drop_collection(collection_name) + +# Define schema explicitly +fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False, description="Primary key"), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=dim, description="Vector field for similarity search"), + FieldSchema(name="name", dtype=DataType.VARCHAR, max_length=100, description="Product name"), + FieldSchema(name="price", dtype=DataType.FLOAT, description="Product price"), + FieldSchema(name="category", dtype=DataType.VARCHAR, max_length=50, description="Product category") +] + +schema = CollectionSchema(fields=fields, description="Collection for partial update demo") + +client.create_collection(collection_name, schema=schema, consistency_level="Strong") + +index_params = client.prepare_index_params() +index_params.add_index(field_name = "vector", metric_type="L2") + +client.create_index(collection_name, index_params) + +client.load_collection(collection_name) + +# Insert initial data +rng = np.random.default_rng(seed=19530) +initial_data = [ + { + "id": 1, + "vector": rng.random(dim).tolist(), + "name": "Product A", + "price": 100.0, + "category": "Electronics" + }, + { + "id": 2, + "vector": rng.random(dim).tolist(), + "name": "Product B", + "price": 200.0, + "category": "Home" + } +] + +client.insert(collection_name, initial_data) +print("Initial data inserted") + +# Query initial state +results = client.query(collection_name, filter="id > 0", output_fields=["*"]) +print("\nInitial state:") +for r in results: + print(f" ID: {r['id']}, Name: {r['name']}, Price: ${r['price']}, Category: {r['category']}") + +# 2. Partial Update - Update only price +print("\n2. Partial Update - Price only...") +price_update = [{"id": 1, "price": 80.0}] # 20% discount + +# Using partial_update=True preserves other fields +client.upsert(collection_name, price_update, partial_update=True) + +results = client.query(collection_name, filter="id == 1", output_fields=["*"]) +print(f"After partial price update:") +for r in results: + print(f" ID: {r['id']}, Name: {r['name']}, Price: ${r['price']}, Category: {r['category']}") + print(" ✅ Only price changed, other fields preserved") + +# 3. Comparison: Full update (partial_update=False - requires all fields) +print("\n3. Full update (partial_update=False) - Must provide ALL fields") + +# Save current state +current_state = client.query(collection_name, filter="id == 2", output_fields=["*"])[0] +print(f"Current state of ID 2:") +print(f" Name: {current_state['name']}, Price: ${current_state['price']}, Category: {current_state['category']}") + +# Full update requires ALL fields including vector +print("\n3a. Full update with all required fields:") +full_update_complete = [{ + "id": 2, + "vector": current_state['vector'], # Must include vector + "name": "Product B - Full Update", # Can change this + "price": 150.0, # Can change this + "category": "Home & Garden" # Can change this +}] + +client.upsert(collection_name, full_update_complete) # partial_update=False (default) + +results = client.query(collection_name, filter="id == 2", output_fields=["*"]) +print(f"After full update with all fields:") +for r in results: + print(f" ID: {r['id']}, Name: {r['name']}, Price: ${r['price']}, Category: {r['category']}") + print(" ✅ All fields provided, update successful") + +# Demonstrate what happens when required fields are missing +print("\n3b. What happens when fields are missing in full update:") +print("❌ This would cause an error or unexpected behavior:") +print(" full_update_incomplete = [{'id': 2, 'price': 175.0}]") +print(" client.upsert(collection_name, full_update_incomplete) # Missing vector!") +print(" → May fail or cause data loss depending on collection schema") + +# 4. Fix using partial update +print("\n4. Using partial update to modify specific fields...") +partial_fix = [{"id": 2, "name": "Product B - Corrected", "category": "Smart Home"}] +client.upsert(collection_name, partial_fix, partial_update=True) + +results = client.query(collection_name, filter="id == 2", output_fields=["*"]) +print("After partial update correction:") +for r in results: + print(f" ID: {r['id']}, Name: {r['name']}, Price: ${r['price']}, Category: {r['category']}") + print(" ✅ Only specified fields updated, price and vector preserved") + +# 5. Multiple field partial update +print("\n5. Multiple field partial update...") +multi_update = [ + {"id": 1, "name": "Product A - Updated", "category": "Premium Electronics"}, + {"id": 2, "name": "Product B - Updated", "category": "Smart Home"} +] + +client.upsert(collection_name, multi_update, partial_update=True) + +results = client.query(collection_name, filter="id > 0", output_fields=["*"]) +print("After multi-field partial update:") +for r in results: + print(f" ID: {r['id']}, Name: {r['name']}, Price: ${r['price']}, Category: {r['category']}") + +print("\n=== Summary ===") +print("✅ partial_update=True: Updates only specified fields, preserves others") +print("❌ partial_update=False (default): Requires ALL fields, replaces entire entity") +print("💡 Key differences:") +print(" • partial_update=True: Provide only fields you want to change") +print(" • partial_update=False: Must provide ALL required fields (including vectors)") +print(" • Use partial_update=True for metadata updates") +print(" • Use partial_update=False for complete entity replacement") + +# Cleanup +client.drop_collection(collection_name) +print("\nCollection dropped. Demo complete!") diff --git a/examples/simple_rerank.py b/examples/simple_rerank.py new file mode 100644 index 000000000..fa135f4ce --- /dev/null +++ b/examples/simple_rerank.py @@ -0,0 +1,92 @@ +import time +import numpy as np +from pymilvus import ( + MilvusClient, + DataType, + Function, + FunctionType, + AnnSearchRequest, +) + +fmt = "\n=== {:30} ===\n" +dim = 8 +collection_name = "hello_milvus" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema(enable_dynamic_field=False, auto_id=True) +schema.add_field("id", DataType.INT64, is_primary=True) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) +schema.add_field("ts", DataType.INT64) + + +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name = "embeddings", index_type="FLAT", metric_type="L2") +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +rng = np.random.default_rng(seed=19530) +rows = [ + {"embeddings": rng.random((1, dim))[0], "ts": 100}, + {"embeddings": rng.random((1, dim))[0], "ts": 200}, + {"embeddings": rng.random((1, dim))[0], "ts": 300}, + {"embeddings": rng.random((1, dim))[0], "ts": 400}, + {"embeddings": rng.random((1, dim))[0], "ts": 500}, + {"embeddings": rng.random((1, dim))[0], "ts": 600}, +] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows) +print(fmt.format("Inserting entities done")) +print(insert_result) + + +print(fmt.format("Start load collection ")) +milvus_client.load_collection(collection_name) + +rng = np.random.default_rng(seed=19530) +vectors_to_search = rng.random((1, dim)) + +ranker = Function( + name="rerank_fn", + input_field_names=["ts"], + function_type=FunctionType.RERANK, + params={ + "reranker": "decay", + "function": "exp", + "origin": 0, + "offset": 200, + "decay": 0.9, + "scale": 100 + } +) + +print(fmt.format(f"Start search with retrieve serveral fields.")) +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=["*"], ranker=ranker) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +vectors_to_search = rng.random((1, dim)) +search_param = { + "data": vectors_to_search, + "anns_field": "embeddings", + "param": {"metric_type": "L2"}, + "limit": 3, +} +req = AnnSearchRequest(**search_param) + +hybrid_res = milvus_client.hybrid_search(collection_name, [req, req], ranker=ranker, limit=3, output_fields=["ts"]) +for hits in hybrid_res: + for hit in hits: + print(f" hybrid search hit: {hit}") + +milvus_client.drop_collection(collection_name) diff --git a/examples/sparse.py b/examples/sparse.py new file mode 100644 index 000000000..d55daad96 --- /dev/null +++ b/examples/sparse.py @@ -0,0 +1,88 @@ +from pymilvus import ( + MilvusClient, + FieldSchema, CollectionSchema, DataType, +) + +import random + +def generate_sparse_vector(dimension: int, non_zero_count: int) -> dict: + indices = random.sample(range(dimension), non_zero_count) + values = [random.random() for _ in range(non_zero_count)] + sparse_vector = {index: value for index, value in zip(indices, values)} + return sparse_vector + + +fmt = "\n=== {:30} ===\n" +dim = 100 +non_zero_count = 20 +collection_name = "hello_sparse" +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) +fields = [ + FieldSchema(name="pk", dtype=DataType.VARCHAR, + is_primary=True, auto_id=True, max_length=100), + FieldSchema(name="random", dtype=DataType.DOUBLE), + FieldSchema(name="embeddings", dtype=DataType.SPARSE_FLOAT_VECTOR), +] +schema = CollectionSchema( + fields, "demo for using sparse float vector with milvus client") +index_params = milvus_client.prepare_index_params() +index_params.add_index(field_name="embeddings", index_name="sparse_inverted_index", + index_type="SPARSE_INVERTED_INDEX", metric_type="IP", params={"drop_ratio_build": 0.2}) +milvus_client.create_collection(collection_name, schema=schema, + index_params=index_params, timeout=5, consistency_level="Strong") + +print(fmt.format(" all collections ")) +print(milvus_client.list_collections()) + +print(fmt.format(f"schema of collection {collection_name}")) +print(milvus_client.describe_collection(collection_name)) + +N = 6 +rows = [{"random": i, "embeddings": generate_sparse_vector( + dim, non_zero_count)} for i in range(N)] + +print(fmt.format("Start inserting entities")) +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) +print(fmt.format("Inserting entities done")) +print(insert_result) + +print(fmt.format(f"Start vector anns search.")) +vectors_to_search = [generate_sparse_vector(dim, non_zero_count)] +search_params = { + "metric_type": "IP", + "params": { + "drop_ratio_search": 0.2, + } +} +# no need to specify anns_field for collections with only 1 vector field +result = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[ + "pk", "random", "embeddings"], search_params=search_params) +for hits in result: + for hit in hits: + print(f"hit: {hit}") + +print(fmt.format("Start query by specifying filtering expression")) +query_results = milvus_client.query(collection_name, filter="random < 3") +pks = [ret['pk'] for ret in query_results] +for ret in query_results: + print(ret) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query( + collection_name, filter=f"pk == '{pks[0]}'") +print(query_results[0]) + +print(f"start to delete by specifying filter in collection {collection_name}") +delete_result = milvus_client.delete(collection_name, ids=pks[:1]) +print(delete_result) + +print(fmt.format("Start query by specifying primary keys")) +query_results = milvus_client.query( + collection_name, filter=f"pk == '{pks[0]}'") +print(f'query result should be empty: {query_results}') + +milvus_client.drop_collection(collection_name) diff --git a/examples/struct_example.py b/examples/struct_example.py new file mode 100644 index 000000000..7807c6106 --- /dev/null +++ b/examples/struct_example.py @@ -0,0 +1,134 @@ +import numpy as np +import time +import random +from pymilvus import ( + MilvusClient, + DataType +) +from pymilvus.client.embedding_list import EmbeddingList + +COLLECTION_NAME = "Documents" +EMBEDDING_DIM = 32 +analyzer_params = { + "type": "standard", + "filter": ["lowercase"], +} +fmt = "\n=== {:30} ===\n" + +milvus_client = MilvusClient("http://localhost:19530") +has_collection = milvus_client.has_collection(COLLECTION_NAME, timeout=5) +if has_collection: + milvus_client.drop_collection(COLLECTION_NAME) + +schema = milvus_client.create_schema(enable_dynamic_field=True, auto_id=True) +schema.add_field("id", DataType.INT64, is_primary=True, max_length=100) +schema.add_field("content", DataType.VARCHAR, max_length=10000, enable_analyzer=True, + analyzer_params=analyzer_params, enable_match=True) +schema.add_field("embedding", DataType.FLOAT_VECTOR, dim=16) + + +struct_schema = milvus_client.create_struct_field_schema() +struct_schema.add_field("struct_str", DataType.VARCHAR, max_length=65535) +struct_schema.add_field("struct_float_vec", DataType.FLOAT_VECTOR, dim=EMBEDDING_DIM) +# we can have multiple vector field in a struct +# struct_schema.add_field("struct_float16_vec", DataType.FLOAT16_VECTOR, dim=EMBEDDING_DIM) +schema.add_field("struct_field",datatype=DataType.ARRAY, element_type=DataType.STRUCT, struct_schema=struct_schema, max_capacity=1000) + +struct_schema = milvus_client.create_struct_field_schema() +struct_schema.add_field("struct_str", DataType.VARCHAR, max_length=65535) +struct_schema.add_field("struct_float_vec", DataType.FLOAT_VECTOR, dim=EMBEDDING_DIM) +schema.add_field("struct_field2",datatype=DataType.ARRAY, element_type=DataType.STRUCT, struct_schema=struct_schema, max_capacity=1000) + + +milvus_client.create_collection(COLLECTION_NAME, schema=schema) + +index_params = milvus_client.prepare_index_params() +dense_index_params = { + "index_type": "IVF_FLAT", # Choose an appropriate index type (e.g., IVF_FLAT) + "metric_type": "COSINE", # Metric type (e.g., COSINE for cosine similarity) + "params": {"nlist": 128} # Index parameters +} + +index_params.add_index(field_name="embedding", index_type="IVF_FLAT", metric_type="COSINE", index_params={"nlist": 128}) +index_params.add_index(field_name="struct_field[struct_float_vec]", index_type="HNSW", index_name="struct_float_vec_index1", metric_type="MAX_SIM_COSINE", index_params={"M": 16, "efConstruction": 200}) +# index_params.add_index(field_name="struct_field[struct_float16_vec]", index_type="HNSW", index_name="struct_float_vec_index2",metric_type="MAX_SIM_COSINE", index_params={"M": 16, "efConstruction": 200}) +index_params.add_index(field_name="struct_field2[struct_float_vec]", index_type="HNSW", index_name="struct_float_vec_index3", metric_type="MAX_SIM_IP", index_params={"M": 16, "efConstruction": 200}) +milvus_client.create_index(COLLECTION_NAME, schema=schema, index_params=index_params) + +coll = milvus_client.describe_collection(COLLECTION_NAME) +print("Describe collection", coll) + +rng = np.random.default_rng(seed=19530) + +N = 100 +content = ["aaa", + "jjj", + "sss", + "asdasd", + "dvzicxv", + "dcmxvxv", + "dvxcnvmlzc", + "aczxcc", + "qiqixcc"] +iterations = 10 +for _ in range(iterations): + arr_len = random.randint(2, 5) + rows = [{"embedding": rng.random((1, 16))[0], + "content": content[random.randint(0, len(content) - 1)], + "struct_field": [ + { + "struct_str": content[random.randint(0, len(content) - 1)], + "struct_float_vec": rng.random((1, EMBEDDING_DIM))[0], + # "struct_float16_vec": rng.random((1, EMBEDDING_DIM))[0].astype(np.float16), + } + for _ in range(arr_len)], + "struct_field2": [ + { + "struct_str": content[random.randint(0, len(content) - 1)], + "struct_float_vec": rng.random((1, EMBEDDING_DIM))[0], + } + for _ in range(arr_len)], + } + for _ in range(N)] + result = milvus_client.insert(COLLECTION_NAME, rows) + +milvus_client.flush(COLLECTION_NAME) + +milvus_client.load_collection(COLLECTION_NAME) + +result = milvus_client.query( + collection_name=COLLECTION_NAME, + filter="", + output_fields=["struct_field"], + limit=2, +) + +print("Query", result) + +rng = np.random.default_rng(seed=19530) + + + +# Create search queries using EmbeddingList +# For testing purposes, using random test data +queries = [ + EmbeddingList._from_random_test(7, EMBEDDING_DIM, seed=19530), # Query with 7 vectors + EmbeddingList._from_random_test(4, EMBEDDING_DIM, seed=19531), # Query with 4 vectors +] + +embeddingList = EmbeddingList() +# Query with 2 vectors +embeddingList.add(np.random.randn(EMBEDDING_DIM)) +embeddingList.add(np.random.randn(EMBEDDING_DIM)) + +queries.append(embeddingList) + +field = "struct_field[struct_float_vec]" +res = milvus_client.search(COLLECTION_NAME, data=queries, limit=10, anns_field=field, + output_fields=["struct_field[struct_str]"]) + +for i, (hits, query) in enumerate(zip(res, queries)): + print(f"============== Query {i+1} ({query}) - Total hits: {len(hits)}") + for hit in hits: + print(f" Hit id: {hit.id}, distance: {hit.distance}") + print(f" entity: {hit}") \ No newline at end of file diff --git a/examples/test_bitmap_index.py b/examples/test_bitmap_index.py new file mode 100644 index 000000000..f20dca528 --- /dev/null +++ b/examples/test_bitmap_index.py @@ -0,0 +1,73 @@ +# test_bitmap_index.py demonstrates how to create bitmap index and perform query +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create bitmap index +# 5. search +# 6. drop collection +import time + +from pymilvus import ( + MilvusClient, + utility, + FieldSchema, CollectionSchema, Function, DataType, FunctionType, + Collection, +) + +collection_name = "text_bitmap_book" + +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema() +schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False) +schema.add_field("title", DataType.VARCHAR, max_length=200) +schema.add_field("type", DataType.VARCHAR, max_length=200) +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=8) + +index_params = milvus_client.prepare_index_params() +index_params.add_index( + field_name="embeddings", + index_name="vec_index", + index_type="FLAT", + metric_type="L2", +) +index_params.add_index( + field_name="type", + index_name="type_index", + index_type="BITMAP", +) + +ret = milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +rows = [ + { + "id": 1, + "title": "Lord of the Flies", + "type": "novel", + "embeddings": [0.64, 0.44, 0.13, 0.47, 0.74, 0.03, 0.32, 0.6], + }, + { + "id": 2, + "title": "Chinese-English dictionary", + "type": "reference", + "embeddings": [0.9, 0.45, 0.18, 0.43, 0.4, 0.4, 0.7, 0.24], + }, + { + "id": 3, + "title": "My Childhood", + "type": "autobiographical", + "embeddings": [0.43, 0.57, 0.43, 0.88, 0.84, 0.69, 0.27, 0.98], + }, +] + +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) + +result = milvus_client.query(collection_name, filter='type in ["reference"]', output_fields=["type"], consistency_level="Strong") +print(result) + +# Finally, drop the collection +milvus_client.drop_collection(collection_name) diff --git a/examples/text_embedding.py b/examples/text_embedding.py new file mode 100644 index 000000000..4667a29d5 --- /dev/null +++ b/examples/text_embedding.py @@ -0,0 +1,80 @@ +# hello_text_embedding.py demonstrates how to insert raw data only into Milvus and perform +# dense vector based ANN search using TextEmbedding. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. create index +# 5. search +# 6. drop collection +import time + +from pymilvus import ( + MilvusClient, + utility, + FieldSchema, CollectionSchema, Function, DataType, FunctionType, + Collection, +) + +collection_name = "text_embedding" + +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +if has_collection: + milvus_client.drop_collection(collection_name) + +schema = milvus_client.create_schema() +schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False) +schema.add_field("document", DataType.VARCHAR, max_length=9000) +schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1536) + +text_embedding_function = Function( + name="openai", + function_type=FunctionType.TEXTEMBEDDING, + input_field_names=["document"], + output_field_names="dense", + params={ + "provider": "openai", + "model_name": "text-embedding-3-small", + } +) + +schema.add_function(text_embedding_function) + +index_params = milvus_client.prepare_index_params() +index_params.add_index( + field_name="dense", + index_name="dense_index", + index_type="AUTOINDEX", + metric_type="IP", +) + +ret = milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +rows = [ + {"id": 1, "document": "Artificial intelligence was founded as an academic discipline in 1956."}, + {"id": 2, "document": "Alan Turing was the first person to conduct substantial research in AI."}, + {"id": 3, "document": "Born in Maida Vale, London, Turing was raised in southern England."}, +] + +insert_result = milvus_client.insert(collection_name, rows, progress_bar=True) + + +# ----------------------------------------------------------------------------- +search_params = { + "params": {"nprobe": 10}, +} +queries = ["When was artificial intelligence founded", + "Where was Alan Turing born?"] + +start_time = time.time() +result = milvus_client.search(collection_name, data=queries, anns_field="dense", search_params=search_params, limit=3, output_fields=["document"], consistency_level="Strong") +end_time = time.time() + +for hits, text in zip(result, queries): + print(f"result of text: {text}") + for hit in hits: + print(f"\thit: {hit}, document field: {hit.get('document')}") + +# Finally, drop the collection +milvus_client.drop_collection(collection_name) diff --git a/examples/text_match.py b/examples/text_match.py new file mode 100644 index 000000000..c3819a06d --- /dev/null +++ b/examples/text_match.py @@ -0,0 +1,148 @@ +# hello_text_match.py demonstrates how to insert raw data only into Milvus and perform +# document retrieval based on specific terms by text match expression. +# 1. connect to Milvus +# 2. create collection +# 3. insert data +# 4. search, query, and filtering search on entities +# 5. drop collection +import time +import numpy as np + +from pymilvus import ( + MilvusClient, + Function, + FunctionType, + DataType, +) + +fmt = "\n=== {:30} ===\n" +collection_name = "text_match" +dim = 8 + +################################################################################# +# 1. connect to Milvus +# Add a new connection alias `default` for Milvus server in `localhost:19530` +print(fmt.format("start connecting to Milvus")) +milvus_client = MilvusClient("http://localhost:19530") + +has_collection = milvus_client.has_collection(collection_name, timeout=5) +print(f"Does collection hello_text_match exist in Milvus: {has_collection}") +if has_collection: + milvus_client.drop_collection(collection_name) + +################################################################################# +# 2. create collection +# We're going to create a collection with 3 explicit fields. +# +-+------------+------------+----------------------+------------------------------+ +# | | field name | field type | other attributes | field description | +# +-+------------+------------+----------------------+------------------------------+ +# |1| "id" | INT64 | is_primary=True | "primary field" | +# | | | | auto_id=False | | +# +-+------------+------------+----------------------+------------------------------+ +# |2| "document" | VarChar | enable_analyzer=True | "raw text document" | +# | | | | enable_match=True | | +# +-+------------+------------+----------------------+------------------------------+ +# |3|"embeddings"| FloatVector| dim=8 | "float vector with dim 8" | +# +-+------------+------------+----------------------+------------------------------+ + +schema = milvus_client.create_schema() +schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False) +# set analyzer params in document field for more situations +# default as analyzer_params = {"type": "standard"} +schema.add_field("document", DataType.VARCHAR, max_length=1000, enable_analyzer=True, enable_match=True), +schema.add_field("embeddings", DataType.FLOAT_VECTOR, dim=dim) + +print(fmt.format("Create collection `hello_text_match`")) + +index_params = milvus_client.prepare_index_params() +index_params.add_index( + "embeddings", + index_type= "AUTOINDEX", + metric_type= "IP" +) + +milvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level="Strong") + +################################################################################ +# 3. insert data +# We are going to insert 6 rows of data into `hello_text_match` +# Data to be inserted must be organized in fields. +# +# The insert() method returns: +# - either automatically generated primary keys by Milvus if auto_id=True in the schema; +# - or the existing primary key field from the entities if auto_id=False in the schema. + +print(fmt.format("Start inserting entities")) + +rng = np.random.default_rng(seed=19530) +num_entities = 6 +keywords = ["milvus", "match", "search", "query", "analyzer", "tokenizer"] +embeddings = rng.random((num_entities, dim), np.float32) + +entities = [{ + "id": i, + "document":f"This is a test document {i} with keywords: {keywords[i]}", + "embeddings": embeddings[i] + } for i in range(num_entities) +] + +insert_result = milvus_client.insert(collection_name, entities) +print(f"Number of insert entities in Milvus: {insert_result['insert_count']}") # check the num_entities +milvus_client.flush(collection_name) + +# ############################################################################### +# 4. query and scalar filtering search with text match +# After data were inserted into Milvus and indexed, you can perform: +# - query with text match expression +# - search data with text match filter + +# ----------------------------------------------------------------------------- +# query based text match with single keyword filter +filter = f"TEXT_MATCH(document, '{keywords[0]}')" +print(fmt.format(f"Start querying with `{filter}`")) + +result = milvus_client.query(collection_name, filter, output_fields=["document"]) +print(f"query result:\n-{result}") + +# query based text match with mutiple keywords +filter = f"TEXT_MATCH(document, '{keywords[0]} {keywords[1]} {keywords[2]}')" +print(fmt.format(f"Start querying with `{filter}`")) + +result = milvus_client.query(collection_name, filter, output_fields=["document"]) +print(f"query result:\n-{result}") + +# ----------------------------------------------------------------------------- +# scalar filtering search with text match +search_params = { + "metric_type": "IP", + "params": {}, +} +filter = f"TEXT_MATCH(document, '{keywords[0]} {keywords[1]} {keywords[2]}')" +print(fmt.format(f"Start filtered searching with `{filter}`")) + +vector_to_search = rng.random((1, dim), np.float32) +result = milvus_client.search(collection_name ,vector_to_search, filter, anns_field="embeddings", search_params=search_params, limit=3, output_fields=["document"]) + +print(result) + +############################################################################### +# 6. delete entities by text match filter +# You can delete entities by their PK values using boolean expressions. + +filter = f"TEXT_MATCH(document, '{keywords[4]}')" +print(fmt.format(f"Start deleting with expr `{filter}`")) + +result = milvus_client.query(collection_name, filter, output_fields=["document"]) +print(f"query before delete by expr=`{filter}` -> result: \n- {result}\n") + +milvus_client.delete(collection_name, filter=filter) + +result = milvus_client.query(collection_name, filter, output_fields=["document"]) +print(f"query after delete by expr=`{filter}` -> result: {result}\n") + + +############################################################################### +# 5. drop collection +# Finally, drop the hello_text_match collection +print(fmt.format(f"Drop collection `{collection_name}`")) +milvus_client.drop_collection(collection_name) diff --git a/examples/timestamptz.py b/examples/timestamptz.py new file mode 100644 index 000000000..0e6755bfe --- /dev/null +++ b/examples/timestamptz.py @@ -0,0 +1,128 @@ +import time +from pymilvus import MilvusClient, DataType, CollectionSchema, IndexType, FieldSchema, milvus_client +import datetime +import pytz + +milvus_host = "http://localhost:19530" +collection_name = "timestamptz_test123" + + +def main(): + client = MilvusClient(uri=milvus_host) + + # create collection with TIMESTAMPTZ field + if client.has_collection(collection_name): + client.drop_collection(collection_name) + + schema = client.create_schema() + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field("tsz", DataType.TIMESTAMPTZ) + schema.add_field("vec", DataType.FLOAT_VECTOR, dim=4) + print("===================alter database timezone===================") + try: + client.alter_database_properties("default", {"timezone": "Asia/Shanghai"}) + except Exception as e: + print(e) + print(client.describe_database("default")) + client.create_collection(collection_name, schema=schema, consistency_level="Session") + index_params = client.prepare_index_params( + collection_name=collection_name, + field_name="vec", + index_type=IndexType.HNSW, + metric_type="COSINE", + params={"M": 30, "efConstruction": 200}, + ) + # add timestamptz index of STL_SORT type + index_params.add_index(field_name="tsz", index_name="tsz_index", index_type="STL_SORT") + + client.create_index(collection_name, index_params) + print(client.describe_collection(collection_name)) + client.load_collection(collection_name) + print(f"load state: {client.get_load_state(collection_name)}") + + # insert data with timezone-aware timestamps + print("===================insert timestamptz===================") + data_size = 8193 + shanghai_tz = pytz.timezone("Asia/Shanghai") + data = [ + { + "id": i + 1, + "tsz": shanghai_tz.localize( + datetime.datetime(2025, 1, 1, 0, 0, 0) + datetime.timedelta(days=i) + ).isoformat(), + "vec": [float(i) / 10 for i in range(4)], + } + for i in range(data_size) + ] + client.insert(collection_name, data) + client.flush(collection_name) + time.sleep(1) # wait for index creation + print(client.describe_index(collection_name, "tsz_index")) + print("===================insert invalid string===================") + data = [{"id": 114514, "tsz": "should cause an error", "vec": [1.1, 1.2, 1.3]}] + try: + client.insert(collection_name, data) + except Exception as e: + print(e) + + # query/search data with TIMESTAMPTZ, define timezone in kwargs + print("====================test query====================") + results = client.query( + collection_name, + filter="id <= 10", + output_fields=["id", "tsz", "vec"], + limit=2, + timezone="America/Havana", + time_fields="year, month, day, hour, minute, second, microsecond", + ) + print("\n".join([str(res) for res in results])) + + print("====================test search====================") + results = client.search( + collection_name, + [[0.5, 0.6, 0.7, 0.8]], + output_fields=["id", "tsz", "vec"], + limit=10, + timezone="America/Chicago", + time_fields="year, month, day, hour, minute, second, microsecond", + ) + print("\n".join([str(res) for res in results[0]])) + + # Alter timezone (IANA timezone) + print(client.describe_collection(collection_name)) + print("===================alter collection timezone===================") + try: + client.alter_collection_properties(collection_name, {"timezone": "Asia/Shanghai"}) + except Exception as e: + print(e) + print(client.describe_collection(collection_name)) + + try: + client.alter_collection_properties(collection_name, {"timezone": "error"}) + except Exception as e: + print(e) + print(client.describe_collection(collection_name)) + + try: + client.alter_database_properties("default", {"timezone": "error"}) + except Exception as e: + print(e) + print(client.describe_database("default")) + + # Query with new operator + results = client.query( + collection_name, limit=10, timezone="Asia/Shanghai" + ) + print("\n".join([str(res) for res in results])) + + expr = "tsz + INTERVAL 'P0D' != ISO '2025-01-03T00:00:00+08:00'" + results = client.query(collection_name, expr, output_fields=["id", "tsz"], limit=10) + print(" The first expr:") + print("\n".join([str(res) for res in results])) + expr = "tsz != ISO '2025-01-03T00:00:00+08:00'" + print(" The second expr") + results = client.query(collection_name, expr, output_fields=["id", "tsz"], limit=10) + print("\n".join([str(res) for res in results])) + +if __name__ == "__main__": + main() diff --git a/examples/timestamptz_insert.py b/examples/timestamptz_insert.py new file mode 100644 index 000000000..5c63fcf77 --- /dev/null +++ b/examples/timestamptz_insert.py @@ -0,0 +1,255 @@ +import time +from pymilvus import MilvusClient, DataType, IndexType +import datetime +import pytz +import random +import sys + +# --- Configuration --- +MILVUS_HOST = "http://localhost:19530" + +# --- Test Scenario 1: Add Field Default Value --- +COLLECTION_NAME_DEFAULT = "default_value_test_col" +TIMESTAMP_FIELD_DEFAULT = "event_time_default" +# Default value for TIMESTAMPTZ field (must be ISO 8601, UTC) +DEFAULT_TS_VALUE_STR = "2025-01-01T00:00:00Z" +EXPLICIT_TS_VALUE_STR = "2026-06-06T12:34:56Z" +EXPECTED_DEFAULT_MATCH = "2025-01-01T00:00:00" + +# --- Test Scenario 2: Naive Time Insertion with Collection Timezone --- +COLLECTION_NAME_TZ_INSERT = "timestamptz_tz_test_col" +TIMESTAMP_FIELD_TZ_INSERT = "event_time_tz" +COLLECTION_TZ_STR = "America/New_York" +RAW_TIME_STR = "2024-01-04 14:26:27" # Naive time + +# Pre-calculate expected UTC based on COLLECTION_TZ_STR +COLLECTION_TZ = pytz.timezone(COLLECTION_TZ_STR) +correct_dt_utc = COLLECTION_TZ.localize( + datetime.datetime.strptime(RAW_TIME_STR, "%Y-%m-%d %H:%M:%S") +).astimezone(pytz.utc) +EXPECTED_CORRECT_UTC = correct_dt_utc.strftime("%Y-%m-%dT%H:%M:%SZ") +OBSERVED_ERROR_UTC_PART = "2024-01-04T14:26:27" # Naive time mistakenly stored as UTC + + +# --- Core Setup Function --- +def setup_base_collection(client: MilvusClient, name: str, tz_property: str = None): + """Creates a generic base collection.""" + schema = client.create_schema() + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field("vec", DataType.FLOAT_VECTOR, dim=4) + + if client.has_collection(name): + client.drop_collection(name) + + properties = {"timezone": tz_property} if tz_property else {} + + client.create_collection(name, schema=schema, consistency_level="Session", properties=properties) + + index_params = client.prepare_index_params( + collection_name=name, + field_name="vec", + index_type=IndexType.HNSW, + metric_type="COSINE", + params={"M": 30, "efConstruction": 200}, + ) + client.create_index(name, index_params) + + return schema + + +# ============================================================================== +# 🚀 TEST SCENARIO 1: add_collection_field Default Value Retroactive Fill +# ============================================================================== +def run_default_value_retrofill_test(client: MilvusClient): + """Validates the default_value behavior of add_collection_field for TIMESTAMPTZ.""" + + print("\n\n" + "=" * 80) + print(f"🚀 TEST 1: {COLLECTION_NAME_DEFAULT} - Add Field Default Value (Retroactive Fill)") + print("=" * 80) + + # 1. Setup Base Collection (No timestamp field yet) + setup_base_collection(client, COLLECTION_NAME_DEFAULT) + client.load_collection(COLLECTION_NAME_DEFAULT) + print(f"✅ Base collection '{COLLECTION_NAME_DEFAULT}' created and loaded.") + + # 2. Inserting historical data (missing the event_time field) + history_data = [ + {"id": 101, "vec": [random.random() for _ in range(4)]}, + {"id": 102, "vec": [random.random() for _ in range(4)]}, + ] + + client.insert(COLLECTION_NAME_DEFAULT, history_data) + client.flush(COLLECTION_NAME_DEFAULT) + print(f"✅ Stage 1: Inserted historical data (ID 101, 102) before field addition.") + + # 3. Adding TIMESTAMPTZ field with a default value + try: + client.add_collection_field( + collection_name=COLLECTION_NAME_DEFAULT, + field_name=TIMESTAMP_FIELD_DEFAULT, + data_type=DataType.TIMESTAMPTZ, + nullable=True, + default_value=DEFAULT_TS_VALUE_STR + ) + print( + f"✅ Stage 2: Field '{TIMESTAMP_FIELD_DEFAULT}' added successfully with default value: {DEFAULT_TS_VALUE_STR}") + except Exception as e: + print(f"❌ Stage 2: Failed to add field: {e}") + return + + # 4. Inserting new data (Testing default vs explicit) + new_data = [ + {"id": 201, "vec": [random.random() for _ in range(4)]}, # Missing field -> Expected Default + {"id": 202, "vec": [random.random() for _ in range(4)], "event_time_default": EXPLICIT_TS_VALUE_STR} + # Explicit -> Expected Explicit + ] + + client.insert(COLLECTION_NAME_DEFAULT, new_data) + client.flush(COLLECTION_NAME_DEFAULT) + print("✅ Stage 3: Inserted new data (ID 201, 202) after field addition.") + + # 5. Verification + client.load_collection(COLLECTION_NAME_DEFAULT) + query_results = client.query( + collection_name=COLLECTION_NAME_DEFAULT, + filter="id in [101, 102, 201, 202]", + output_fields=["id", TIMESTAMP_FIELD_DEFAULT], + timezone="UTC" + ) + + results_map = {r.get('id'): r.get(TIMESTAMP_FIELD_DEFAULT) for r in query_results} + print("\n--- Verification Results ---") + + # ID 101 (Historical Missing) - **Key Test** + actual_ts_101 = results_map.get(101) + if actual_ts_101 and EXPECTED_DEFAULT_MATCH in str(actual_ts_101): + print(f"✅ Result 1 (ID 101, Historical): **Successfully retroactively filled** with default: {actual_ts_101}") + else: + print(f"❌ Result 1 (ID 101, Historical): **FAILED**, not retroactively filled: {actual_ts_101}") + + # ID 201 (New Missing) + actual_ts_201 = results_map.get(201) + if actual_ts_201 and EXPECTED_DEFAULT_MATCH in str(actual_ts_201): + print(f"✅ Result 2 (ID 201, New Missing): Successfully filled with default: {actual_ts_201}") + else: + print(f"❌ Result 2 (ID 201, New Missing): Default value did not take effect: {actual_ts_201}") + + # ID 202 (New Explicit) + actual_ts_202 = results_map.get(202) + if actual_ts_202 and "2026-06-06T12:34:56" in str(actual_ts_202): + print(f"✅ Result 3 (ID 202, New Explicit): Successfully overrode default value: {actual_ts_202}") + else: + print(f"❌ Result 3 (ID 202, New Explicit): Explicit value failed: {actual_ts_202}") + + +# ============================================================================== +# 🚀 TEST SCENARIO 2: Naive Time Insertion with Collection Timezone +# ============================================================================== +def run_naive_insertion_tz_test(client: MilvusClient): + """Verifies that naive time strings are correctly interpreted using the Collection's timezone setting.""" + + print("\n\n" + "=" * 80) + print(f"🚀 TEST 2: {COLLECTION_NAME_TZ_INSERT} - Naive Time Insertion (TZ Conversion)") + print("=" * 80) + print(f"Collection Timezone: {COLLECTION_TZ_STR}") + print(f"Raw Input (Naive): {RAW_TIME_STR}") + print(f"Expected UTC Storage: {EXPECTED_CORRECT_UTC}") + + # 1. Setup Collection with TIMESTAMPTZ field and Collection Timezone + schema = client.create_schema() + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field("vec", DataType.FLOAT_VECTOR, dim=4) + schema.add_field(TIMESTAMP_FIELD_TZ_INSERT, DataType.TIMESTAMPTZ) + + # Drop and recreate the collection to ensure TIMESTAMPTZ field is present from start + if client.has_collection(COLLECTION_NAME_TZ_INSERT): + client.drop_collection(COLLECTION_NAME_TZ_INSERT) + + client.create_collection( + COLLECTION_NAME_TZ_INSERT, + schema=schema, + consistency_level="Session", + properties={"timezone": COLLECTION_TZ_STR} + ) + + # Create index for vector field + index_params = client.prepare_index_params( + collection_name=COLLECTION_NAME_TZ_INSERT, field_name="vec", index_type=IndexType.HNSW, + metric_type="COSINE", params={"M": 30, "efConstruction": 200}, + ) + client.create_index(COLLECTION_NAME_TZ_INSERT, index_params) + client.load_collection(COLLECTION_NAME_TZ_INSERT) + print("✅ Setup complete for Naive Time Insertion Test.") + + # 2. Insert raw data (naive time string) + insert_data = [ + {"id": 1, "vec": [random.random() for _ in range(4)], TIMESTAMP_FIELD_TZ_INSERT: RAW_TIME_STR}, + ] + + client.insert(COLLECTION_NAME_TZ_INSERT, insert_data) + client.flush(COLLECTION_NAME_TZ_INSERT) + print("✅ Stage 1: Insertion of naive time string successful.") + + # 3. Query data and verify UTC storage + client.load_collection(COLLECTION_NAME_TZ_INSERT) + query_results = client.query( + collection_name=COLLECTION_NAME_TZ_INSERT, + filter="id == 1", + output_fields=["id", TIMESTAMP_FIELD_TZ_INSERT], + timezone="UTC" # Retrieve internal UTC storage time + ) + + if not query_results: + print("❌ Query result is empty.") + return + + actual_ts_str = query_results[0].get(TIMESTAMP_FIELD_TZ_INSERT) + + print("\n--- Verification Results ---") + print(f"Actual Query Result (UTC): {actual_ts_str}") + + # Verification Logic: Check if the actual result matches the expected 19:26:27Z + if actual_ts_str and EXPECTED_CORRECT_UTC in actual_ts_str: + print( + f"✅ Verification SUCCESS: Milvus correctly converted '{RAW_TIME_STR}' to UTC based on '{COLLECTION_TZ_STR}'.") + print(f" (Stored UTC: {EXPECTED_CORRECT_UTC})") + elif actual_ts_str and OBSERVED_ERROR_UTC_PART in actual_ts_str: + print(f"❌ Verification FAILED (Issue Reproduced): Milvus mistakenly treated '{RAW_TIME_STR}' as UTC time.") + print(f" (Mistaken UTC: {actual_ts_str})") + else: + print(f"⚠️ Verification FAILED: Actual result '{actual_ts_str}' does not match any expectation.") + + +# ============================================================================== +# 🏃‍♂️ MAIN EXECUTION (Updated Function Name) +# ============================================================================== +def main_timestamptz_tests(): + try: + client = MilvusClient(uri=MILVUS_HOST) + except Exception as e: + print(f"Could not connect to Milvus service {MILVUS_HOST}. Please ensure the service is running. Error: {e}") + sys.exit(1) + + # Run all test scenarios + run_default_value_retrofill_test(client) + run_naive_insertion_tz_test(client) + + # --- Cleanup for all collections --- + print("\n\n" + "=" * 80) + print("🧹 Cleaning up collections...") + print("=" * 80) + + collections_to_clean = [COLLECTION_NAME_DEFAULT, COLLECTION_NAME_TZ_INSERT] + + for name in collections_to_clean: + try: + if client.has_collection(name): + client.release_collection(name) + client.drop_collection(name) + print(f"✅ Cleanup: Collection '{name}' dropped.") + except Exception as e: + print(f"❌ Failed to clean up collection '{name}': {e}") + + +if __name__ == "__main__": + main_timestamptz_tests() \ No newline at end of file diff --git a/examples/timestamptz_meta.py b/examples/timestamptz_meta.py new file mode 100644 index 000000000..8e8e50915 --- /dev/null +++ b/examples/timestamptz_meta.py @@ -0,0 +1,207 @@ +import time +from pymilvus import MilvusClient, DataType, IndexType, FieldSchema +import datetime +import pytz +import sys + +# --- Configuration --- +MILVUS_HOST = "http://localhost:19530" + +# --- Test 1: Database Properties --- +DB_NAME_TEST = "milvus_db_property_test" +VALID_TZ_INITIAL = "Asia/Shanghai" +VALID_TZ_NEW = "Europe/London" +INVALID_TZ = "Invalid/Timezone" + +# --- Test 2: Collection Properties --- +COLLECTION_NAME_TEST = "tz_property_collection_test" +TIMESTAMP_FIELD = "tsz" +VECTOR_DIM = 4 + + +# ============================================================================== +# 🚀 TEST SCENARIO 1: Database Property Management +# ============================================================================== +def run_database_property_tests(client: MilvusClient): + """Executes tests for creating, altering, and dropping database properties, focusing on timezone.""" + + print("\n\n" + "=" * 80) + print("🚀 TEST 1: Database Property Management (Create, Alter, Drop Timezone)") + print("=" * 80) + + # 1. Create Database and Set Initial Timezone + if DB_NAME_TEST in client.list_databases(): + client.drop_database(db_name=DB_NAME_TEST) + + print(f"1. Creating database: {DB_NAME_TEST} with timezone: {VALID_TZ_INITIAL}") + try: + client.create_database( + db_name=DB_NAME_TEST, + properties={"timezone": VALID_TZ_INITIAL, "purpose": "Timezone Test"} + ) + db_info_initial = client.describe_database(db_name=DB_NAME_TEST) + print(f"✅ Success. Initial timezone: {db_info_initial.get('properties', {}).get('timezone')}") + except Exception as e: + print(f"❌ Failed to create database: {e}") + return + + # 2. Alter Database Properties (Change timezone to a valid value) + print(f"\n2. Attempting to change timezone to a valid value: {VALID_TZ_NEW}") + try: + client.alter_database_properties( + db_name=DB_NAME_TEST, + properties={"timezone": VALID_TZ_NEW} + ) + db_info_valid = client.describe_database(db_name=DB_NAME_TEST) + print(f"✅ Success. New timezone: {db_info_valid.get('properties', {}).get('timezone')}") + except Exception as e: + print(f"❌ Failed to alter database properties: {e}") + + # 3. Alter Database Properties (Change timezone to an invalid value - Expected Failure) + print(f"\n3. Attempting to change timezone to an invalid value: {INVALID_TZ} (Expected Failure)") + try: + client.alter_database_properties( + db_name=DB_NAME_TEST, + properties={"timezone": INVALID_TZ} + ) + print("❌ ERROR: Invalid timezone change did not raise error.") + except Exception as e: + print(f"✅ Successfully caught expected error (Invalid Timezone): {e}") + + # 4. Drop Database Property + print("\n4. Dropping 'purpose' property.") + try: + client.drop_database_properties(db_name=DB_NAME_TEST, property_keys=["purpose"]) + print("✅ Successfully dropped 'purpose' property.") + except Exception as e: + print(f"❌ Failed to drop database property: {e}") + + +# ============================================================================== +# 🚀 TEST SCENARIO 2: Collection Property Management +# ============================================================================== +def run_collection_property_tests(client: MilvusClient): + """Executes tests for collection creation idempotency and collection/default DB property alteration.""" + + print("\n\n" + "=" * 80) + print("🚀 TEST 2: Collection Property Management (Idempotency and Timezone Alteration)") + print("=" * 80) + + # 1. Define Schema & Cleanup + schema = client.create_schema() + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field(TIMESTAMP_FIELD, DataType.TIMESTAMPTZ) + schema.add_field("vec", DataType.FLOAT_VECTOR, dim=VECTOR_DIM) + + if client.has_collection(COLLECTION_NAME_TEST): + client.drop_collection(COLLECTION_NAME_TEST) + + # 2. Idempotency Test: Attempting to create the Collection twice + print("\n2.1. Idempotency Test: First Creation") + try: + client.create_collection(COLLECTION_NAME_TEST, schema=schema, consistency_level="Session") + print(f"✅ Collection '{COLLECTION_NAME_TEST}' created successfully.") + except Exception as e: + print(f"❌ Error during first creation: {e}") + + print("\n2.2. Idempotency Test: Second Creation (Expected OK)") + try: + client.create_collection(COLLECTION_NAME_TEST, schema=schema, consistency_level="Session") + print(f"✅ Collection '{COLLECTION_NAME_TEST}' created successfully again (Idempotent success).") + except Exception as e: + print(f"❌ Error during second creation: {e}") + return + + # 3. Initial database timezone setup (on "default" DB) + print("\n3. Alter default database timezone (Initial setup to Asia/Shanghai)") + try: + client.alter_database_properties("default", {"timezone": "Asia/Shanghai"}) + print("✅ Default database timezone set to Asia/Shanghai.") + except Exception as e: + print(f"❌ Failed to alter default database timezone: {e}") + + # 4. Create Index (Necessary setup but also part of ts.py's original flow) + index_params = client.prepare_index_params( + collection_name=COLLECTION_NAME_TEST, field_name="vec", index_type=IndexType.HNSW, + metric_type="COSINE", params={"M": 30, "efConstruction": 200}, + ) + index_params.add_index(field_name=TIMESTAMP_FIELD, index_name="tsz_index", index_type="STL_SORT") + client.create_index(COLLECTION_NAME_TEST, index_params) + print("✅ Collection indexes created.") + + # 5. Comprehensive Alter Collection Timezone Tests + + # 5.1 Alter collection timezone to Europe/London + print("\n5.1. Alter collection timezone to Europe/London") + try: + client.alter_collection_properties(COLLECTION_NAME_TEST, {"timezone": VALID_TZ_NEW}) + col_info = client.describe_collection(COLLECTION_NAME_TEST) + print(f"✅ Success. New Collection timezone: {col_info.get('properties', {}).get('timezone')}") + except Exception as e: + print(f"❌ Failed to alter collection timezone: {e}") + + # 5.2 Alter collection timezone back to Asia/Shanghai + print("\n5.2. Alter collection timezone back to Asia/Shanghai") + try: + client.alter_collection_properties(COLLECTION_NAME_TEST, {"timezone": VALID_TZ_INITIAL}) + col_info = client.describe_collection(COLLECTION_NAME_TEST) + print(f"✅ Success. Collection timezone reset to: {col_info.get('properties', {}).get('timezone')}") + except Exception as e: + print(f"❌ Failed to alter collection timezone: {e}") + + # 5.3 Alter collection timezone to an invalid value (Error expected) + print("\n5.3. Alter collection timezone to 'error' (Expected failure)") + try: + client.alter_collection_properties(COLLECTION_NAME_TEST, {"timezone": INVALID_TZ}) + print("❌ ERROR: Invalid collection timezone change did not raise error.") + except Exception as e: + print(f"✅ Successfully caught expected error: {e}") + + # 6. Invalid Alter Database Timezone Test (on "default" DB) + print("\n6. Alter default database timezone to 'error' (Expected failure)") + try: + client.alter_database_properties("default", {"timezone": INVALID_TZ}) + print("❌ ERROR: Invalid database timezone change did not raise error.") + except Exception as e: + print(f"✅ Successfully caught expected error: {e}") + + +# ============================================================================== +# 🏃‍♂️ MAIN EXECUTION +# ============================================================================== +def main_property_management_tests(): + try: + client = MilvusClient(uri=MILVUS_HOST) + except Exception as e: + print(f"Could not connect to Milvus service {MILVUS_HOST}. Please ensure the service is running. Error: {e}") + sys.exit(1) + + # Execute all test scenarios + run_database_property_tests(client) + run_collection_property_tests(client) + + # --- Final Cleanup --- + print("\n\n" + "=" * 80) + print("🧹 Final Cleanup...") + print("=" * 80) + + # Cleanup for Database Test + try: + if DB_NAME_TEST in client.list_databases(): + client.drop_database(db_name=DB_NAME_TEST) + print(f"✅ Cleanup: Database '{DB_NAME_TEST}' dropped.") + except Exception as e: + print(f"❌ Failed to clean up database '{DB_NAME_TEST}': {e}") + + # Cleanup for Collection Test (in default DB) + try: + if client.has_collection(COLLECTION_NAME_TEST): + client.release_collection(COLLECTION_NAME_TEST) + client.drop_collection(COLLECTION_NAME_TEST) + print(f"✅ Cleanup: Collection '{COLLECTION_NAME_TEST}' dropped.") + except Exception as e: + print(f"❌ Failed to clean up collection '{COLLECTION_NAME_TEST}': {e}") + + +if __name__ == "__main__": + main_property_management_tests() \ No newline at end of file diff --git a/examples/timestamptz_search_query.py b/examples/timestamptz_search_query.py new file mode 100644 index 000000000..151307373 --- /dev/null +++ b/examples/timestamptz_search_query.py @@ -0,0 +1,269 @@ +import time +from pymilvus import MilvusClient, DataType, IndexType +import datetime +import pytz +import random +import sys + +# --- Configuration --- +MILVUS_HOST = "http://localhost:19530" +VECTOR_DIM = 4 + +# ============================================================================== +# --- CONSTANTS --- +# ============================================================================== + +# Test 1: Query & Search Output Timezone +COLLECTION_NAME_QUERY = "timestamptz_query_search_test" +TIMESTAMP_FIELD_QUERY = "event_time" +# Standard data point stored in UTC for conversion tests (2025-01-01T12:00:00Z) +UTC_BASE_TIME = datetime.datetime(2025, 1, 1, 12, 0, 0, tzinfo=pytz.utc).isoformat() +# Los Angeles Test Time (UTC 02:00:00Z -> LA 2024-12-31T18:00:00-08:00) +UTC_LA_TEST_TIME = datetime.datetime(2025, 1, 1, 2, 0, 0, tzinfo=pytz.utc).isoformat() + +# Test 2: Separate DB Property Management +# NEW DB NAME: Renamed for clarity and to prevent conflicts +DB_NAME_SEPARATE_TEST = "tz_mgmt_separate_db" +COLLECTION_NAME_PROP = "timestamptz_prop_col" +VALID_TZ_INITIAL = "Asia/Shanghai" +VALID_TZ_NEW = "Europe/London" +INVALID_TZ = "invalid_timezone_for_test" + + +# ------------------------------------------------------------------------------ +# HELPER FUNCTIONS +# ------------------------------------------------------------------------------ + +def setup_query_collection(client: MilvusClient, name: str, tz_property: str = "UTC"): + """Creates a Collection for retrieval tests and inserts standardized UTC data.""" + schema = client.create_schema() + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field(TIMESTAMP_FIELD_QUERY, DataType.TIMESTAMPTZ) + schema.add_field("vec", DataType.FLOAT_VECTOR, dim=VECTOR_DIM) + + if client.has_collection(name): + client.drop_collection(name) + + properties = {"timezone": tz_property} + client.create_collection(name, schema=schema, consistency_level="Session", properties=properties) + + index_params = client.prepare_index_params(collection_name=name, field_name="vec", index_type=IndexType.HNSW, + metric_type="COSINE") + client.create_index(name, index_params) + client.load_collection(name) + + # Insert two records for different test scenarios + data = [ + # Record 1: Used for general TZ verification (UTC 12:00:00) + {"id": 1, "vec": [0.5] * VECTOR_DIM, TIMESTAMP_FIELD_QUERY: UTC_BASE_TIME}, + # Record 2: Used for Los Angeles TZ verification (UTC 02:00:00) + {"id": 2, "vec": [0.2] * VECTOR_DIM, TIMESTAMP_FIELD_QUERY: UTC_LA_TEST_TIME}, + ] + client.insert(name, data) + client.flush(name) + client.load_collection(name) + print(f"✅ Collection '{name}' created and loaded with UTC data.") + + +# ------------------------------------------------------------------------------ +# 🚀 TEST 1: Query/Search Output Timezone Conversion Verification +# ------------------------------------------------------------------------------ +def run_retrieval_timezone_test(client: MilvusClient): + """Verifies that the timezone parameter in query() and search() correctly converts the output time to different time zones.""" + + print("\n\n" + "=" * 80) + print(f"🚀 TEST 1: {COLLECTION_NAME_QUERY} - Query/Search Output Timezone Conversion Verification") + print("=" * 80) + + setup_query_collection(client, COLLECTION_NAME_QUERY, tz_property="UTC") + + # Define Timezone Verification Parameters: (TZ Name, Expected TZ Offset, Expected Time Part) + TZ_VERIFICATIONS = [ + # Base Time: UTC 12:00:00 (id=1) + ("Asia/Shanghai", "+08:00", "20:00:00"), # UTC 12:00 -> Shanghai 20:00 + ("America/New_York", "-05:00", "07:00:00"), # UTC 12:00 -> New York 07:00 + # Base Time: UTC 02:00:00 (id=2), testing the Los Angeles TZ + ("America/Los_Angeles", "-08:00", "18:00:00"), # UTC 02:00 -> LA 2024-12-31 18:00 + ] + + # --- 1.1 Query Output Conversion Verification --- + print("\n--- 1.1 Query Output Conversion Verification ---") + for output_tz, expected_offset, expected_time_part in TZ_VERIFICATIONS: + + # Use different IDs to match the two base UTC times + filter_id = '1' if expected_time_part not in ["18:00:00"] else '2' + + results = client.query( + COLLECTION_NAME_QUERY, + filter=f"id == {filter_id}", + output_fields=["id", TIMESTAMP_FIELD_QUERY], + timezone=output_tz, + ) + if not results: continue + + ts_output = results[0].get(TIMESTAMP_FIELD_QUERY) + # Check if the output string contains the correct offset and time part + is_correct = expected_offset in ts_output and expected_time_part in ts_output + status = "✅ Success" if is_correct else "❌ Failure" + print(f" - Query {output_tz} ({expected_offset}): {status} (Actual: {ts_output})") + + # --- 1.2 Search Output Conversion Verification (Los Angeles) --- + print("\n--- 1.2 Search Output Conversion Verification (Los Angeles) ---") + + output_tz = "America/Los_Angeles" + expected_offset = "-08:00" + expected_time_part = "18:00:00" + + search_vectors = [[0.2] * VECTOR_DIM] + results = client.search( + COLLECTION_NAME_QUERY, + data=search_vectors, + limit=1, + output_fields=["id", TIMESTAMP_FIELD_QUERY], + search_field="vec", + timezone=output_tz, + ) + + result_ts = results[0][0].get(TIMESTAMP_FIELD_QUERY) if results and results[0] else "N/A" + + is_correct = expected_offset in result_ts and expected_time_part in result_ts + status = "✅ Success" if is_correct else "❌ Failure" + print(f" - Search {output_tz} ({expected_offset}): {status} (Actual: {result_ts})") + + +# ------------------------------------------------------------------------------ +# 🚀 TEST 2: Separate Database and Collection Property Management +# ------------------------------------------------------------------------------ +def run_separate_db_property_tests(base_client: MilvusClient) -> MilvusClient | None: + """Verifies modification and error handling of database and collection properties in a non-'default' database context. + + Returns: + MilvusClient: The client connected to the separate database, used for cleanup. + """ + + print("\n\n" + "=" * 80) + print(f"🚀 TEST 2: Separate Database '{DB_NAME_SEPARATE_TEST}' Timezone Property Management") + print("=" * 80) + + db_client = None + + # --- Pre-Cleanup Logic (Handles existing DB state before creation) --- + if DB_NAME_SEPARATE_TEST in base_client.list_databases(): + print(f"⚠️ Existing database '{DB_NAME_SEPARATE_TEST}' found. Attempting pre-cleanup.") + try: + # Must drop collection inside the database first + temp_client = MilvusClient(uri=MILVUS_HOST, db_name=DB_NAME_SEPARATE_TEST) + if temp_client.has_collection(COLLECTION_NAME_PROP): + temp_client.release_collection(COLLECTION_NAME_PROP) + temp_client.drop_collection(COLLECTION_NAME_PROP) + print(f" ✅ Existing collection '{COLLECTION_NAME_PROP}' dropped from database.") + except Exception as e: + print(f" ❌ Could not clean up collection before database drop attempt: {e}") + + try: + base_client.drop_database(db_name=DB_NAME_SEPARATE_TEST) + print(f" ✅ Existing database '{DB_NAME_SEPARATE_TEST}' dropped.") + except Exception as e: + print(f" ❌ Failed to drop existing database: {e}. Skipping database creation.") + return None + # --- End Pre-Cleanup --- + + # 1. Create a separate database and set initial timezone + try: + base_client.create_database( + db_name=DB_NAME_SEPARATE_TEST, + properties={"timezone": VALID_TZ_INITIAL} + ) + print(f"✅ Database '{DB_NAME_SEPARATE_TEST}' created successfully with initial timezone: {VALID_TZ_INITIAL}") + except Exception as e: + print(f"❌ Database creation failed: {e}") + return None + + # 2. Get a client pointing to the new database and create a collection + db_client = MilvusClient(uri=MILVUS_HOST, db_name=DB_NAME_SEPARATE_TEST) + schema = db_client.create_schema() + schema.add_field("id", DataType.INT64, is_primary=True) + schema.add_field("tsz", DataType.TIMESTAMPTZ) + schema.add_field("vec", DataType.FLOAT_VECTOR, dim=VECTOR_DIM) + db_client.create_collection(COLLECTION_NAME_PROP, schema=schema, consistency_level="Session") + + # 3. Alter Database Properties (VALID_TZ_INITIAL -> VALID_TZ_NEW) + try: + base_client.alter_database_properties(DB_NAME_SEPARATE_TEST, {"timezone": VALID_TZ_NEW}) + db_info = base_client.describe_database(db_name=DB_NAME_SEPARATE_TEST) + print(f"✅ Database timezone successfully altered: {db_info.get('properties', {}).get('timezone')}") + except Exception as e: + print(f"❌ Database timezone alteration failed: {e}") + + # 4. Alter Collection Properties (Override database timezone) + try: + db_client.alter_collection_properties(COLLECTION_NAME_PROP, {"timezone": "America/New_York"}) + col_info = db_client.describe_collection(COLLECTION_NAME_PROP) + print(f"✅ Collection timezone successfully altered: {col_info.get('properties', {}).get('timezone')}") + except Exception as e: + print(f"❌ Collection timezone alteration failed: {e}") + + # 5. Alter Database Timezone to Invalid Value (Error Handling Verification) + print("\n--- 5. Verification of Invalid Timezone Error Handling (Expected Failure) ---") + try: + base_client.alter_database_properties(DB_NAME_SEPARATE_TEST, {"timezone": INVALID_TZ}) + print("❌ ERROR: Invalid timezone alteration did not raise an error.") + except Exception as e: + print(f"✅ Successfully caught expected error (Invalid Timezone): {e}") + + return db_client + + +# ============================================================================== +# 🏃‍♂️ MAIN EXECUTION +# ============================================================================== +def main_timestamptz_retrieval_suite(): + try: + client = MilvusClient(uri=MILVUS_HOST) + except Exception as e: + print(f"Could not connect to Milvus service {MILVUS_HOST}. Please ensure the service is running. Error: {e}") + sys.exit(1) + + # Run all test scenarios + run_retrieval_timezone_test(client) + db_client_separate = run_separate_db_property_tests(client) # Store the client for cleanup + + # --- Cleanup all resources --- + print("\n\n" + "=" * 80) + print("🧹 Cleaning up all test resources...") + print("=" * 80) + + # 1. Cleanup Collection in the default database context + collections_to_clean = [COLLECTION_NAME_QUERY] + + for name in collections_to_clean: + try: + if client.has_collection(name): + client.release_collection(name) + client.drop_collection(name) + print(f"✅ Cleanup: Collection '{name}' dropped.") + except Exception as e: + print(f"❌ Failed to clean up collection '{name}': {e}") + + # 2. Cleanup Collection AND Database for the separate test context + if db_client_separate: + # 2a. Drop collection inside the separate database context + try: + if db_client_separate.has_collection(COLLECTION_NAME_PROP): + db_client_separate.release_collection(COLLECTION_NAME_PROP) + db_client_separate.drop_collection(COLLECTION_NAME_PROP) + print(f"✅ Cleanup: Collection '{COLLECTION_NAME_PROP}' dropped from '{DB_NAME_SEPARATE_TEST}'.") + except Exception as e: + print(f"❌ Failed to clean up collection '{COLLECTION_NAME_PROP}' in separate DB: {e}") + + # 2b. Drop the separate database itself using the base client + try: + if DB_NAME_SEPARATE_TEST in client.list_databases(): + client.drop_database(db_name=DB_NAME_SEPARATE_TEST) + print(f"✅ Cleanup: Database '{DB_NAME_SEPARATE_TEST}' dropped.") + except Exception as e: + print(f"❌ Failed to clean up database '{DB_NAME_SEPARATE_TEST}': {e}") + + +if __name__ == "__main__": + main_timestamptz_retrieval_suite() \ No newline at end of file diff --git a/pylint.conf b/pylint.conf deleted file mode 100644 index 3c5967cb9..000000000 --- a/pylint.conf +++ /dev/null @@ -1,598 +0,0 @@ -[MASTER] - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-whitelist=grpc - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Add files or directories matching the regex patterns to the blacklist. The -# regex matches against base names, not paths. -ignore-patterns= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -init-hook="import sys;sys.path.append('..');sys.path.append('.')" - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=no - -# Specify a configuration file. -#rcfile= - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=print-statement, - parameter-unpacking, - unpacking-in-except, - old-raise-syntax, - backtick, - long-suffix, - old-ne-operator, - old-octal-literal, - import-star-module-level, - non-ascii-bytes-literal, - raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead, - apply-builtin, - basestring-builtin, - buffer-builtin, - cmp-builtin, - coerce-builtin, - execfile-builtin, - file-builtin, - long-builtin, - raw_input-builtin, - reduce-builtin, - standarderror-builtin, - unicode-builtin, - xrange-builtin, - coerce-method, - delslice-method, - getslice-method, - setslice-method, - no-absolute-import, - old-division, - dict-iter-method, - dict-view-method, - next-method-called, - metaclass-assignment, - indexing-exception, - raising-string, - reload-builtin, - oct-method, - hex-method, - nonzero-method, - cmp-method, - input-builtin, - round-builtin, - intern-builtin, - unichr-builtin, - map-builtin-not-iterating, - zip-builtin-not-iterating, - range-builtin-not-iterating, - filter-builtin-not-iterating, - using-cmp-argument, - eq-without-hash, - div-method, - idiv-method, - rdiv-method, - exception-message-attribute, - invalid-str-codec, - sys-max-int, - bad-python3-import, - deprecated-string-function, - deprecated-str-translate-call, - deprecated-itertools-function, - deprecated-types-field, - next-method-defined, - dict-items-not-iterating, - dict-keys-not-iterating, - dict-values-not-iterating, - deprecated-operator-function, - deprecated-urllib-function, - xreadlines-attribute, - deprecated-sys-function, - exception-escape, - comprehension-escape, - c-extension-no-member, - C0103, # invalid-name - C0114, # missing-module-docstring - C0115, # missing-class-docstring - C0116, # missing-function-docstring - C0330, # Wrong hanging indentation before block (add 4 spaces) - R0201, # no-self-use - R0903, # too-few-public-methods - R0904, # too-many-public-methods - R0912, # too-many-branches - R0913, # too-many-arguments - R0914, # many local variables (too-many-locals) - # R1721, unnecessary-comprehension - W0511, # (fixme) - W0107, # Unnecessary pass statement (unnecessary-pass) - W0613, # unused-argument - E1101 # no-member - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# which contain the number of messages in each category, as well as 'statement' -# which is the total number of statements analyzed. This score is used by the -# global evaluation report (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit - - -[STRING] - -# This flag controls whether the implicit-str-concat-in-sequence should -# generate a warning on implicit string concatenation in sequences defined over -# several lines. -check-str-concat-over-line-jumps=no - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. -#class-attribute-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. -#variable-rgx= - - -[LOGGING] - -# Format style used to check logging format string. `old` means using % -# formatting, `new` is for `{}` formatting,and `fstr` is for f-strings. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# List of optional constructs for which whitespace checking is disabled. `dict- -# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. -# `trailing-comma` allows a space between comma and closing bracket: (a, ). -# `empty-line` allows space-only lines. -no-space-check=trailing-comma, - dict-separator - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it work, -# install the python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[CLASSES] - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls - - -[DESIGN] - -# Maximum number of arguments for function / method. -max-args=5 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=15 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). -ext-import-graph= - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). -import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception diff --git a/pymilvus/__init__.py b/pymilvus/__init__.py index 85b63f3bb..25525c66a 100644 --- a/pymilvus/__init__.py +++ b/pymilvus/__init__.py @@ -10,65 +10,135 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. -from .client.stub import Milvus +# Ensure `pymilvus` is a namespace package other distributions (like `pymilvus.model`) can +# participate in. +from pkgutil import extend_path + +__path__ = extend_path(__path__, __name__) + +from .client import __version__ +from .client.abstract import AnnSearchRequest, RRFRanker, WeightedRanker +from .client.asynch import SearchFuture from .client.prepare import Prepare -from .client.types import Status, DataType, RangeType, IndexType -from .client.exceptions import ( - ParamError, - ConnectError, - NotConnectError, - RepeatingConnectError, - VersionError, - BaseException +from .client.search_result import Hit, Hits, SearchResult +from .client.types import ( + BulkInsertState, + DataType, + FunctionType, + Group, + IndexType, + Replica, + ResourceGroupInfo, + Shard, + Status, ) -# comment for dup -# from .client.asynch import MutationFuture -from .client import __version__ - -"""client module""" +from .exceptions import ( + ExceptionsMessage, + MilvusException, + MilvusUnavailableException, +) +from .milvus_client import AsyncMilvusClient, MilvusClient +from .orm import db, utility from .orm.collection import Collection -from .orm.connections import connections, Connections - +from .orm.connections import Connections, connections +from .orm.future import MutationFuture from .orm.index import Index from .orm.partition import Partition +from .orm.role import Role +from .orm.schema import CollectionSchema, FieldSchema, Function, FunctionScore, StructFieldSchema from .orm.utility import ( - loading_progress, - index_building_progress, - wait_for_loading_complete, - wait_for_index_building_complete, + create_resource_group, + create_user, + delete_user, + describe_resource_group, + drop_collection, + drop_resource_group, has_collection, has_partition, + hybridts_to_datetime, + hybridts_to_unixtime, + index_building_progress, list_collections, - drop_collection, - get_query_segment_info, - load_balance, - mkts_from_hybridts, mkts_from_unixtime, mkts_from_datetime, - hybridts_to_unixtime, hybridts_to_datetime, + list_resource_groups, + list_usernames, + loading_progress, + mkts_from_datetime, + mkts_from_hybridts, + mkts_from_unixtime, + reset_password, + transfer_node, + transfer_replica, + update_password, + update_resource_groups, + wait_for_index_building_complete, + wait_for_loading_complete, ) -from .orm import utility -from .orm.default_config import DefaultConfig - -from .orm.search import SearchResult, Hits, Hit -from .orm.schema import FieldSchema, CollectionSchema -from .orm.future import SearchFuture, MutationFuture -from .orm.exceptions import ExceptionsMessage +# Compatiable +from .settings import Config as DefaultConfig __all__ = [ - # pymilvus orm'styled APIs - 'Collection', 'Index', 'Partition', - 'connections', - 'loading_progress', 'index_building_progress', 'wait_for_loading_complete', 'has_collection', 'has_partition', - 'list_collections', 'wait_for_loading_complete', 'wait_for_index_building_complete', 'drop_collection', - 'mkts_from_hybridts', 'mkts_from_unixtime', 'mkts_from_datetime', - 'hybridts_to_unixtime', 'hybridts_to_datetime', - 'SearchResult', 'Hits', 'Hit', - 'FieldSchema', 'CollectionSchema', - 'SearchFuture', 'MutationFuture', - 'utility', 'DefaultConfig', 'ExceptionsMessage', - - # pymilvus old style APIs - 'Milvus', 'Prepare', 'Status', 'DataType', - 'ParamError', 'ConnectError', 'NotConnectError', 'RepeatingConnectError', 'VersionError', 'BaseException', - '__version__' + "AnnSearchRequest", + "AsyncMilvusClient", + "BulkInsertState", + "Collection", + "CollectionSchema", + "Connections", + "DataType", + "DefaultConfig", + "ExceptionsMessage", + "FieldSchema", + "Function", + "FunctionScore", + "FunctionType", + "Group", + "Hit", + "Hits", + "Index", + "IndexType", + "MilvusClient", + "MilvusException", + "MilvusUnavailableException", + "MutationFuture", + "Partition", + "Prepare", + "RRFRanker", + "Replica", + "ResourceGroupInfo", + "Role", + "SearchFuture", + "SearchResult", + "Shard", + "Status", + "StructFieldSchema", + "WeightedRanker", + "__version__", + "connections", + "create_resource_group", + "create_user", + "db", + "delete_user", + "describe_resource_group", + "drop_collection", + "drop_resource_group", + "has_collection", + "has_partition", + "hybridts_to_datetime", + "hybridts_to_unixtime", + "index_building_progress", + "list_collections", + "list_resource_groups", + "list_usernames", + "loading_progress", + "mkts_from_datetime", + "mkts_from_hybridts", + "mkts_from_unixtime", + "reset_password", + "transfer_node", + "transfer_replica", + "update_password", + "update_resource_groups", + "utility", + "wait_for_index_building_complete", + "wait_for_loading_complete", ] diff --git a/pymilvus/bulk_writer/__init__.py b/pymilvus/bulk_writer/__init__.py new file mode 100644 index 000000000..507b0e02e --- /dev/null +++ b/pymilvus/bulk_writer/__init__.py @@ -0,0 +1,28 @@ +from importlib.util import find_spec + +expected_pkgs = ["minio", "azure", "requests", "pyarrow"] + +missing = [pkg for pkg in expected_pkgs if find_spec(pkg) is None] + +if len(missing) > 0: + msg = f"Missing packages: {missing}. Please install bulk_writer by pip install pymilvus[bulk_writer] first" + raise ModuleNotFoundError(msg) + + +from .bulk_import import ( + bulk_import, + get_import_progress, + list_import_jobs, +) +from .constants import BulkFileType +from .local_bulk_writer import LocalBulkWriter +from .remote_bulk_writer import RemoteBulkWriter + +__all__ = [ + "BulkFileType", + "LocalBulkWriter", + "RemoteBulkWriter", + "bulk_import", + "get_import_progress", + "list_import_jobs", +] diff --git a/pymilvus/bulk_writer/buffer.py b/pymilvus/bulk_writer/buffer.py new file mode 100644 index 000000000..3fff2d566 --- /dev/null +++ b/pymilvus/bulk_writer/buffer.py @@ -0,0 +1,424 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import json +import logging +from pathlib import Path +from typing import Optional + +import numpy as np +import pandas as pd + +from pymilvus.client.types import ( + DataType, +) +from pymilvus.exceptions import MilvusException +from pymilvus.orm.schema import ( + CollectionSchema, + FieldSchema, +) + +from .constants import ( + DYNAMIC_FIELD_NAME, + MB, + NUMPY_TYPE_CREATOR, + BulkFileType, +) + +logger = logging.getLogger(__name__) + + +class NumpyEncoder(json.JSONEncoder): + def default(self, obj: object): + if isinstance(obj, np.ndarray): + return obj.tolist() + if isinstance(obj, np.generic): + return obj.item() + return json.JSONEncoder.default(self, obj) + + +def to_raw_type(obj: dict): + keys = obj.keys() + for k in keys: + v = obj[k] + if isinstance(v, dict): + obj[k] = to_raw_type(v) + continue + if isinstance(v, np.ndarray): + obj[k] = v.tolist() + elif isinstance(v, np.generic): + obj[k] = v.item() + return obj + + +class Buffer: + def __init__( + self, + schema: CollectionSchema, + file_type: BulkFileType = BulkFileType.NUMPY, + config: Optional[dict] = None, + ): + self._buffer = {} + self._fields = {} + self._file_type = file_type + self._config = config or {} + for field in schema.fields: + if field.is_primary and field.auto_id: + continue + if field.is_function_output: + continue + self._buffer[field.name] = [] + self._fields[field.name] = field + + for field in schema.struct_fields: + self._buffer[field.name] = [] + self._fields[field.name] = field + + if len(self._buffer) == 0: + self._throw("Illegal collection schema: fields list is empty") + + # dynamic field, internal name is '$meta' + if schema.enable_dynamic_field: + self._buffer[DYNAMIC_FIELD_NAME] = [] + self._fields[DYNAMIC_FIELD_NAME] = FieldSchema( + name=DYNAMIC_FIELD_NAME, dtype=DataType.JSON + ) + + @property + def row_count(self) -> int: + if len(self._buffer) == 0: + return 0 + + for k in self._buffer: + return len(self._buffer[k]) + return None + + def _throw(self, msg: str): + logger.error(msg) + raise MilvusException(message=msg) + + def _raw_obj(self, x: object): + if isinstance(x, np.ndarray): + return x.tolist() + if isinstance(x, np.generic): + return x.item() + + return x + + def append_row(self, row: dict): + dynamic_values = {} + if DYNAMIC_FIELD_NAME in row and not isinstance(row[DYNAMIC_FIELD_NAME], dict): + self._throw(f"Dynamic field '{DYNAMIC_FIELD_NAME}' value should be JSON format") + + for k, v in row.items(): + if k == DYNAMIC_FIELD_NAME: + dynamic_values.update(v) + continue + + if k not in self._buffer: + dynamic_values[k] = self._raw_obj(v) + else: + self._buffer[k].append(v) + + if DYNAMIC_FIELD_NAME in self._buffer: + self._buffer[DYNAMIC_FIELD_NAME].append(dynamic_values) + + def persist(self, local_path: str, **kwargs) -> list: + # verify row count of fields are equal + row_count = -1 + for k in self._buffer: + if row_count < 0: + row_count = len(self._buffer[k]) + elif row_count != len(self._buffer[k]): + buffer_k_len = len(self._buffer[k]) + self._throw( + f"Column {k} row count {buffer_k_len} doesn't equal to the first column row count {row_count}" + ) + + # output files + if self._file_type == BulkFileType.NUMPY: + return self._persist_npy(local_path, **kwargs) + if self._file_type == BulkFileType.JSON: + return self._persist_json_rows(local_path, **kwargs) + if self._file_type == BulkFileType.PARQUET: + return self._persist_parquet(local_path, **kwargs) + if self._file_type == BulkFileType.CSV: + return self._persist_csv(local_path, **kwargs) + + self._throw(f"Unsupported file tpye: {self._file_type}") + return [] + + def _persist_npy(self, local_path: str, **kwargs): + file_list = [] + row_count = len(next(iter(self._buffer.values()))) + for k, v in self._buffer.items(): + full_file_name = Path(local_path).joinpath(k + ".npy") + file_list.append(str(full_file_name)) + try: + Path(local_path).mkdir(exist_ok=True) + + # numpy data type specify + field_schema = self._fields[k] + dt = NUMPY_TYPE_CREATOR[field_schema.dtype.name] + if field_schema.dtype == DataType.ARRAY: + # currently, milvus server doesn't support numpy for array field + self._throw( + f"Failed to persist file {full_file_name}," + f" error: milvus doesn't support parsing array type values from numpy file" + ) + elif field_schema.dtype == DataType.JSON: + # for JSON field, convert to string array + a = [] + for val in v: + a.append(json.dumps(val)) + arr = np.array(a, dtype=dt) + elif field_schema.dtype in { + DataType.FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.INT8_VECTOR, + }: + a = [] + for val in v: + a.append(np.array(val, dtype=dt)) + arr = np.array(a) + elif field_schema.dtype == DataType.SPARSE_FLOAT_VECTOR: + # currently, milvus server doesn't support numpy for sparse vector + self._throw( + f"Failed to persist file {full_file_name}," + f" error: milvus doesn't support parsing sparse vectors from numpy file" + ) + elif field_schema.dtype in {DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR}: + # special process for float16 vector, the self._buffer stores bytes for + # float16 vector, convert the bytes to uint8 array + a = [] + for val in v: + a.append(np.frombuffer(val, dtype=dt).tolist()) + arr = np.array(a, dtype=dt) + else: + a = [] + for val in v: + a.append(None if val is None else dt.type(val)) + arr = np.array(a) + + np.save(str(full_file_name), arr) + except Exception as e: + self._throw(f"Failed to persist file {full_file_name}, error: {e}") + + logger.info(f"Successfully persist file {full_file_name}, row count: {row_count}") + + if len(file_list) != len(self._buffer): + logger.error("Some of fields were not persisted successfully, abort the files") + for f in file_list: + Path(f).unlink() + Path(local_path).rmdir() + file_list.clear() + self._throw("Some of fields were not persisted successfully, abort the files") + + return file_list + + def _persist_json_rows(self, local_path: str, **kwargs): + rows = [] + row_count = len(next(iter(self._buffer.values()))) + row_index = 0 + while row_index < row_count: + row = {} + for k, v in self._buffer.items(): + # special process for float16 vector, the self._buffer stores bytes for + # float16 vector, convert the bytes to float list + field_schema = self._fields[k] + if field_schema.dtype in {DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR}: + dt = ( + np.dtype("bfloat16") + if (field_schema.dtype == DataType.BFLOAT16_VECTOR) + else np.float16 + ) + row[k] = np.frombuffer(v[row_index], dtype=dt).tolist() + else: + row[k] = v[row_index] + rows.append(row) + row_index = row_index + 1 + + data = { + "rows": rows, + } + file_path = Path(local_path + ".json") + try: + with file_path.open("w") as json_file: + json.dump(data, json_file, indent=2, cls=NumpyEncoder) + except Exception as e: + self._throw(f"Failed to persist file {file_path}, error: {e}") + + logger.info(f"Successfully persist file {file_path}, row count: {len(rows)}") + return [str(file_path)] + + def _persist_parquet(self, local_path: str, **kwargs): + file_path = Path(local_path + ".parquet") + + data = {} + for k, v in self._buffer.items(): + field_schema = self._fields[k] + if field_schema.dtype in {DataType.JSON, DataType.SPARSE_FLOAT_VECTOR}: + # for JSON and SPARSE_VECTOR field, store as string array + str_arr = [] + for val in v: + str_arr.append(json.dumps(val)) + data[k] = pd.Series(str_arr, dtype=None) + elif field_schema.dtype in { + DataType.BINARY_VECTOR, + DataType.FLOAT_VECTOR, + DataType.INT8_VECTOR, + }: + arr = [] + for val in v: + arr.append(np.array(val, dtype=NUMPY_TYPE_CREATOR[field_schema.dtype.name])) + data[k] = pd.Series(arr) + elif field_schema.dtype in {DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR}: + # special process for float16 vector, the self._buffer stores bytes for + # float16 vector, convert the bytes to uint8 array + arr = [] + for val in v: + arr.append( + np.frombuffer(val, dtype=NUMPY_TYPE_CREATOR[field_schema.dtype.name]) + ) + data[k] = pd.Series(arr) + elif field_schema.dtype == DataType.ARRAY: + dt = NUMPY_TYPE_CREATOR[field_schema.element_type.name] + arr = [] + for val in v: + arr.append(None if val is None else np.array(val, dtype=dt)) + data[k] = pd.Series(arr) + elif field_schema.dtype == DataType.STRUCT: + # bulk_import accepts struct array as list[dict], + data[k] = pd.Series(v, dtype=None) + elif field_schema.dtype.name in NUMPY_TYPE_CREATOR: + dt = NUMPY_TYPE_CREATOR[field_schema.dtype.name] + arr = [] + for val in v: + arr.append(None if val is None else dt.type(val)) + data[k] = np.array(arr) + else: + # dtype is null, let pandas deduce the type, might not work + data[k] = pd.Series(v) + + # calculate a proper row group size + row_group_size_min = 1000 + row_group_size = 10000 + row_group_size_max = 1000000 + buffer_size = 1 + buffer_row_count = 1 + if "buffer_size" in kwargs and "buffer_row_count" in kwargs: + row_group_bytes = kwargs.get( + "row_group_bytes", 32 * MB + ) # 32MB is an experience value that avoid high memory usage of parquet reader on server-side + buffer_size = kwargs.get("buffer_size", 1) + buffer_row_count = kwargs.get("buffer_row_count", 1) + size_per_row = int(buffer_size / buffer_row_count) + 1 + row_group_size = int(row_group_bytes / size_per_row) + row_group_size = max(row_group_size, row_group_size_min) + row_group_size = min(row_group_size, row_group_size_max) + + # write to Parquet file + data_frame = pd.DataFrame(data=data) + data_frame.to_parquet( + file_path, row_group_size=row_group_size, engine="pyarrow" + ) # don't use fastparquet + + logger.info( + f"Successfully persist file {file_path}, total size: {buffer_size}," + f" row count: {buffer_row_count}, row group size: {row_group_size}" + ) + return [str(file_path)] + + def _persist_csv(self, local_path: str, **kwargs): + sep = self._config.get("sep", ",") + nullkey = self._config.get("nullkey", "") + + header = list(self._buffer.keys()) + data = pd.DataFrame(columns=header) + for k, v in self._buffer.items(): + field_schema = self._fields[k] + # When using df.to_csv(arr) to write non-scalar data, + # the repr function is used to convert the data to a string. + # if the value of arr is [1.0, 2.0], repr(arr) will change with the type of arr: + # when arr is a list, the output is '[1.0, 2.0]' + # when arr is a tuple, the output is '(1.0, 2.0)' + # when arr is a np.array, the output is '[1.0 2.0]' + # we need the output to be '[1.0, 2.0]', consistent with the array format in json + # so 1. whether make sure that arr of type + # (BINARY_VECTOR, FLOAT_VECTOR, INT8_VECTOR, + # FLOAT16_VECTOR, BFLOAT16_VECTOR) is a LIST, + # 2. or convert arr into a string using json.dumps(arr) first and then add it to df + # I choose method 2 here + if field_schema.dtype in { + DataType.SPARSE_FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.FLOAT_VECTOR, + DataType.INT8_VECTOR, + }: + arr = [] + for val in v: + arr.append(json.dumps(val)) + data[k] = pd.Series(arr, dtype=np.dtype("str")) + elif field_schema.dtype in {DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR}: + # special process for float16 vector, the self._buffer stores bytes for + # float16 vector, convert the bytes to float list + dt = ( + np.dtype("bfloat16") + if (field_schema.dtype == DataType.BFLOAT16_VECTOR) + else np.dtype("float16") + ) + arr = [] + for val in v: + arr.append(json.dumps(np.frombuffer(val, dtype=dt).tolist())) + data[k] = pd.Series(arr, dtype=np.dtype("str")) + elif field_schema.dtype in { + DataType.JSON, + DataType.ARRAY, + }: + # JSON/Array values are converted to JSON format strings + arr = [] + for val in v: + arr.append(None if val is None else json.dumps(val)) + data[k] = pd.Series(arr, dtype=np.dtype("str")) + elif field_schema.dtype in {DataType.BOOL}: + # boolean values are converted to string array + data[k] = pd.Series(v, dtype=np.dtype("str")) + elif field_schema.dtype in {DataType.STRUCT}: + # data.to_csv() converts numpy type with unexpected string, we need a raw struct + raw_arr = [] + for structs in v: + raw_structs = [] + for struct in structs: + raw_structs.append(to_raw_type(struct)) + raw_arr.append(json.dumps(raw_structs)) + data[k] = pd.Series(raw_arr, dtype=np.dtype("str")) + else: + # pd.Series cannot handle None with specific np.dtype because it cannot convert + # None to a type value. + # here we use numpy.array as input, each value is converted to numpy.dtype + # except None values. + dt = NUMPY_TYPE_CREATOR[field_schema.dtype.name] + arr = [] + for val in v: + arr.append(None if val is None else dt.type(val)) + data[k] = np.array(arr) + + file_path = Path(local_path + ".csv") + try: + # pd.Series will convert None to np.nan, + # so we can use 'na_rep=nullkey' to replace NaN with nullkey + data.to_csv(file_path, sep=sep, na_rep=nullkey, index=False) + except Exception as e: + self._throw(f"Failed to persist file {file_path}, error: {e}") + + logger.info("Successfully persist file %s, row count: %s", file_path, len(data)) + return [str(file_path)] diff --git a/pymilvus/bulk_writer/bulk_import.py b/pymilvus/bulk_writer/bulk_import.py new file mode 100644 index 000000000..d917dae8a --- /dev/null +++ b/pymilvus/bulk_writer/bulk_import.py @@ -0,0 +1,309 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import json +import logging +from typing import List, Optional, Union + +import requests + +from pymilvus.exceptions import MilvusException + +logger = logging.getLogger(__name__) + + +def _http_headers(api_key: str): + return { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) " + "Chrome/17.0.963.56 Safari/535.11", + "Accept": "application/json", + "Accept-Encodin": "gzip,deflate,sdch", + "Accept-Languag": "en-US,en;q=0.5", + "Authorization": f"Bearer {api_key}", + } + + +def _throw(msg: str): + logger.error(msg) + raise MilvusException(message=msg) + + +def _handle_response(url: str, res: json): + inner_code = res["code"] + if inner_code != 0: + inner_message = res["message"] + _throw(f"Failed to request url: {url}, code: {inner_code}, message: {inner_message}") + + +def _post_request( + url: str, + api_key: str, + params: {}, + timeout: int = 20, + verify: Optional[Union[bool, str]] = True, + cert: Optional[Union[str, tuple]] = None, + **kwargs, +) -> requests.Response: + """Send a POST request with 1-way / 2-way optional certificate validation + + Args: + url (str): The endpoint URL + api_key (str): API key for authentication + params (dict): JSON parameters for the request + timeout (int): Timeout for the request + verify (bool, str, optional): Either a boolean, to verify the server's TLS certificate + or a string, which must be server's certificate path. Defaults to `True`. + cert (str, tuple, optional): if String, path to ssl client cert file. + if Tuple, ('cert', 'key') pair. + + Returns: + requests.Response: Response object. + """ + try: + resp = requests.post( + url=url, + headers=_http_headers(api_key), + json=params, + timeout=timeout, + verify=verify, + cert=cert, + **kwargs, + ) + if resp.status_code != 200: + _throw(f"Failed to post url: {url}, status code: {resp.status_code}") + else: + return resp + except Exception as err: + _throw(f"Failed to post url: {url}, error: {err}") + + +def _get_request( + url: str, api_key: str, params: {}, timeout: int = 20, **kwargs +) -> requests.Response: + try: + resp = requests.get( + url=url, headers=_http_headers(api_key), params=params, timeout=timeout, **kwargs + ) + if resp.status_code != 200: + _throw(f"Failed to get url: {url}, status code: {resp.status_code}") + else: + return resp + except Exception as err: + _throw(f"Failed to get url: {url}, error: {err}") + + +## bulkinsert RESTful api wrapper +def bulk_import( + url: str, + collection_name: str, + db_name: str = "", + files: Optional[List[List[str]]] = None, + object_url: str = "", + object_urls: Optional[List[List[str]]] = None, + cluster_id: str = "", + api_key: str = "", + access_key: str = "", + secret_key: str = "", + token: str = "", + stage_name: str = "", + data_paths: [List[List[str]]] = None, + verify: Optional[Union[bool, str]] = True, + cert: Optional[Union[str, tuple]] = None, + **kwargs, +) -> requests.Response: + """call bulkinsert restful interface to import files + + Args: + url (str): url of the server + collection_name (str): name of the target collection + db_name (str): name of target database + partition_name (str): name of the target partition + files (list of list of str): The files that contain the data to import. + A sub-list contains a single JSON or Parquet file, or a set of Numpy files. + api_key (str): API key to authenticate your requests + + cluster_id (str): id of a milvus instance(cloud) + object_url (str): The object URL of the object to import(cloud), use `object_urls` instead. + object_urls (list of list of str): The object urls that contain the data to import. + A sub-list contains a single object url + access_key (str): access key to access the object storage(cloud) + secret_key (str): secret key to access the object storage(cloud) + token (str): access token to access the object storage(cloud) + + stage_name (str): name of the stage to import(cloud) + data_paths (list of list of str): The paths of files that contain the data to import(cloud) + verify (bool, str, optional): Either a boolean, to verify the server's TLS certificate + or a string, which must be server's certificate path. Defaults to `True`. + cert (str, tuple, optional): if String, path to ssl client cert file. + if Tuple, ('cert', 'key') pair. + + Returns: + response of the restful interface + + Examples: + >>> # 1. Import multiple files into an open-source Milvus instance + >>> bulk_import( + ... url="http://127.0.0.1:19530", + ... api_key="username:password", + ... db_name="", + ... collection_name="my_collection", + ... partition_name="", # If Collection not enable partitionKey, can be specified. + ... files=[ + ... ["parquet-folder/1.parquet"], + ... ["parquet-folder-2/1.parquet"] + ... ] + ... ) + + >>> # 2. Import multiple files or folders from object storage into a Zilliz Cloud instance + >>> bulk_import( + ... url="https://api.cloud.zilliz.com", # If regions in China, it is: https://api.cloud.zilliz.com.cn + ... api_key="YOUR_API_KEY", + ... cluster_id="in0x-xxx", + ... db_name="", # Only For Dedicated deployments: this parameter can be specified. + ... collection_name="my_collection", + ... partition_name="", # If Collection not enable partitionKey, can be specified. + ... object_urls=[ + ... ["s3://bucket-name/parquet-folder-1/1.parquet"], + ... ["s3://bucket-name/parquet-folder-2/1.parquet"], + ... ["s3://bucket-name/parquet-folder-3/"] + ... ], + ... access_key="your-access-key", + ... secret_key="your-secret-key", + ... token="your-token" # for short-term credentials, also include `token` + ... ) + + >>> # 3. Import multiple files or folders from a Zilliz Stage into a Zilliz Cloud instance + >>> bulk_import( + ... url="https://api.cloud.zilliz.com", # If regions in China, it is: https://api.cloud.zilliz.com.cn + ... api_key="YOUR_API_KEY", + ... cluster_id="in0x-xxx", + ... db_name="", # Only For Dedicated deployments: this parameter can be specified. + ... collection_name="my_collection", + ... partition_name="", # If Collection not enable partitionKey, can be specified. + ... stage_name="my_stage", + ... data_paths=[ + ... ["parquet-folder/1.parquet"], + ... ["parquet-folder-2/"] + ... ] + ... ) + """ + request_url = url + "/v2/vectordb/jobs/import/create" + + partition_name = kwargs.pop("partition_name", "") + params = { + "collectionName": collection_name, + "dbName": db_name, + "partitionName": partition_name, + "files": files, + "objectUrl": object_url, + "objectUrls": object_urls, + "clusterId": cluster_id, + "accessKey": access_key, + "secretKey": secret_key, + "token": token, + "stageName": stage_name, + "dataPaths": data_paths, + } + + options = kwargs.pop("options", {}) + if isinstance(options, dict): + params["options"] = options + + resp = _post_request( + url=request_url, api_key=api_key, params=params, verify=verify, cert=cert, **kwargs + ) + _handle_response(request_url, resp.json()) + return resp + + +def get_import_progress( + url: str, + job_id: str, + cluster_id: str = "", + api_key: str = "", + verify: Optional[Union[bool, str]] = True, + cert: Optional[Union[str, tuple]] = None, + **kwargs, +) -> requests.Response: + """get job progress + + Args: + url (str): url of the server + job_id (str): a job id + cluster_id (str): id of a milvus instance(for cloud) + api_key (str): API key to authenticate your requests. + verify (bool, str, optional): Either a boolean, to verify the server's TLS certificate + or a string, which must be server's certificate path. Defaults to `True`. + cert (str, tuple, optional): if String, path to ssl client cert file. + if Tuple, ('cert', 'key') pair. + + Returns: + response of the restful interface + """ + request_url = url + "/v2/vectordb/jobs/import/describe" + + params = { + "jobId": job_id, + "clusterId": cluster_id, + } + + resp = _post_request( + url=request_url, api_key=api_key, params=params, verify=verify, cert=cert, **kwargs + ) + _handle_response(request_url, resp.json()) + return resp + + +def list_import_jobs( + url: str, + collection_name: str = "", + db_name: str = "", + cluster_id: str = "", + api_key: str = "", + page_size: int = 10, + current_page: int = 1, + verify: Optional[Union[bool, str]] = True, + cert: Optional[Union[str, tuple]] = None, + **kwargs, +) -> requests.Response: + """list jobs in a cluster + + Args: + url (str): url of the server + collection_name (str): name of the target collection + cluster_id (str): id of a milvus instance(for cloud) + api_key (str): API key to authenticate your requests. + page_size (int): pagination size + current_page (int): pagination + verify (bool, str, optional): Either a boolean, to verify the server's TLS certificate + or a string, which must be server's certificate path. Defaults to `True`. + cert (str, tuple, optional): if String, path to ssl client cert file. + if Tuple, ('cert', 'key') pair. + + Returns: + response of the restful interface + """ + request_url = url + "/v2/vectordb/jobs/import/list" + + params = { + "collectionName": collection_name, + "dbName": db_name, + "clusterId": cluster_id, + "pageSize": page_size, + "currentPage": current_page, + } + + resp = _post_request( + url=request_url, api_key=api_key, params=params, verify=verify, cert=cert, **kwargs + ) + _handle_response(request_url, resp.json()) + return resp diff --git a/pymilvus/bulk_writer/bulk_writer.py b/pymilvus/bulk_writer/bulk_writer.py new file mode 100644 index 000000000..79e55e9b9 --- /dev/null +++ b/pymilvus/bulk_writer/bulk_writer.py @@ -0,0 +1,363 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import json +import logging +from threading import Lock +from typing import Optional + +import numpy as np + +from pymilvus.client.types import DataType +from pymilvus.exceptions import MilvusException +from pymilvus.orm.schema import CollectionSchema, FieldSchema, StructFieldSchema + +from .buffer import ( + Buffer, +) +from .constants import ( + NUMPY_TYPE_CREATOR, + TYPE_SIZE, + TYPE_VALIDATOR, + BulkFileType, +) + +logger = logging.getLogger("bulk_writer") +logger.setLevel(logging.DEBUG) + + +class BulkWriter: + def __init__( + self, + schema: CollectionSchema, + chunk_size: int, + file_type: BulkFileType, + config: Optional[dict] = None, + **kwargs, + ): + self._schema = schema + self._buffer_size = 0 + self._buffer_row_count = 0 + self._total_row_count = 0 + self._file_type = file_type + self._buffer_lock = Lock() + self._config = config + + # the old parameter segment_size is changed to chunk_size, compatible with the legacy code + self._chunk_size = chunk_size + segment_size = kwargs.get("segment_size", 0) + if segment_size > 0: + self._chunk_size = segment_size + + if len(self._schema.fields) == 0: + self._throw("collection schema fields list is empty") + + if self._schema.primary_field is None: + self._throw("primary field is null") + + self._buffer = None + self._new_buffer() + + @property + def buffer_size(self): + return self._buffer_size + + @property + def buffer_row_count(self): + return self._buffer_row_count + + @property + def total_row_count(self): + return self._total_row_count + + @property + def chunk_size(self): + return self._chunk_size + + def _new_buffer(self): + old_buffer = self._buffer + with self._buffer_lock: + self._buffer = Buffer(self._schema, self._file_type, self._config) + return old_buffer + + def append_row(self, row: dict, **kwargs): + self._verify_row(row) + with self._buffer_lock: + self._buffer.append_row(row) + + def commit(self, **kwargs): + with self._buffer_lock: + self._buffer_size = 0 + self._buffer_row_count = 0 + + @property + def data_path(self): + return "" + + def _try_convert_json(self, field_name: str, obj: object): + if isinstance(obj, str): + try: + return json.loads(obj) + except Exception as e: + self._throw( + f"Illegal JSON value for field '{field_name}', type mismatch or illegal format, error: {e}" + ) + return obj + + def _throw(self, msg: str): + logger.error(msg) + raise MilvusException(message=msg) + + def _verify_vector(self, x: object, field: FieldSchema): + dtype = DataType(field.dtype) + validator = TYPE_VALIDATOR[dtype.name] + if dtype != DataType.SPARSE_FLOAT_VECTOR: + dim = field.params["dim"] + try: + origin_list = validator(x, dim) + if dtype == DataType.FLOAT_VECTOR: + return origin_list, dim * 4 # for float vector, each dim occupies 4 bytes + if dtype in [DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR]: + return ( + origin_list, + dim * 2, + ) # for float16 or bfloat16 vector, each dim occupies 2 bytes + if dtype == DataType.INT8_VECTOR: + return origin_list, dim # for int8 vector, each dim occupies 1 bytes + if dtype == DataType.BINARY_VECTOR: + return origin_list, dim / 8 # for binary vector, 8 dim occupies 1 byte + self._throw(f"Illegal vector data type for vector field: '{field.name}'") + except MilvusException as e: + self._throw(f"Illegal vector data for vector field: '{field.name}': {e.message}") + else: + try: + validator(x) + return x, len(x) * 12 # for sparse vector, each key-value is int-float, 12 bytes + except MilvusException as e: + self._throw(f"Illegal vector data for vector field: '{field.name}': {e.message}") + + def _verify_json(self, x: object, field: FieldSchema): + size = 0 + validator = TYPE_VALIDATOR[DataType.JSON.name] + if isinstance(x, str): + size = len(x) + x = self._try_convert_json(field.name, x) + elif validator(x): + size = len(json.dumps(x)) + else: + self._throw(f"Illegal JSON value for field '{field.name}', type mismatch") + + return x, size + + def _verify_varchar(self, x: object, field: FieldSchema): + max_len = field.params["max_length"] + validator = TYPE_VALIDATOR[DataType.VARCHAR.name] + if not validator(x, max_len): + self._throw( + f"Illegal varchar value for field '{field.name}'," + f" length exceeds {max_len} or type mismatch" + ) + + return len(x) + + def _verify_scalar(self, x: object, dtype: DataType, field_name: str): + validator = TYPE_VALIDATOR[dtype.name] + if not validator(x): + self._throw( + f"Illegal scalar value for field '{field_name}', value overflow or type mismatch" + ) + if isinstance(x, str): + return len(x) + return TYPE_SIZE[dtype.name] + + def _verify_array(self, x: object, field: FieldSchema): + max_capacity = field.params["max_capacity"] + element_type = field.element_type + validator = TYPE_VALIDATOR[DataType.ARRAY.name] + if not validator(x, max_capacity): + self._throw( + f"Illegal array value for field '{field.name}', length exceeds capacity or type mismatch" + ) + + row_size = 0 + if element_type.name in TYPE_SIZE: + row_size = TYPE_SIZE[element_type.name] * len(x) + for ele in x: + self._verify_scalar(ele, element_type, field.name) + elif element_type == DataType.VARCHAR: + for ele in x: + row_size = row_size + self._verify_varchar(ele, field) + else: + self._throw(f"Unsupported element type for array field '{field.name}'") + + return row_size + + def _verify_normal_field(self, row: dict): + row_size = 0 + for field in self._schema.fields: + if field.is_primary and field.auto_id: + if field.name in row: + self._throw( + f"The primary key field '{field.name}' is auto-id, no need to provide" + ) + else: + continue + if field.is_function_output: + if field.name in row: + self._throw(f"Field '{field.name}' is function output, no need to provide") + else: + continue + + dtype = DataType(field.dtype) + + # deal with null (None) according to the Applicable rules in this page: + # https://milvus.io/docs/nullable-and-default.md#Nullable--Default + if field.nullable: + if ( + field.default_value is not None + and field.default_value.WhichOneof("data") is not None + ): + # 1: nullable is true, default_value is not null, user_input is null + # replace the value by default value + if (field.name not in row) or (row[field.name] is None): + data_type = field.default_value.WhichOneof("data") + row[field.name] = getattr(field.default_value, data_type) + continue + + # 2: nullable is true, default_value is not null, user_input is not null + # check and set the value + # 3: nullable is true, default_value is null, user_input is null + # do nothing + elif (field.name not in row) or (row[field.name] is None): + row[field.name] = None + continue + + # 4: nullable is true, default_value is null, user_input is not null + # check and set the value + elif ( + field.default_value is not None + and field.default_value.WhichOneof("data") is not None + ): + # 5: nullable is false, default_value is not null, user_input is null + # replace the value by default value + if (field.name not in row) or (row[field.name] is None): + data_type = field.default_value.WhichOneof("data") + row[field.name] = getattr(field.default_value, data_type) + continue + + # 6: nullable is false, default_value is not null, user_input is not null + # check and set the value + # 7: nullable is false, default_value is not null, user_input is null + # raise an exception + elif (field.name not in row) or (row[field.name] is None): + self._throw(f"The field '{field.name}' is not nullable, not allow None value") + + # 8: nullable is false, default_value is null, user_input is not null + # check and set the value + + # check and set value, calculate size of this row + if dtype in { + DataType.BINARY_VECTOR, + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.SPARSE_FLOAT_VECTOR, + DataType.INT8_VECTOR, + }: + origin_list, byte_len = self._verify_vector(row[field.name], field) + row[field.name] = origin_list + row_size = row_size + byte_len + elif dtype == DataType.VARCHAR: + row_size = row_size + self._verify_varchar(row[field.name], field) + elif dtype == DataType.JSON: + row[field.name], size = self._verify_json(row[field.name], field) + row_size = row_size + size + elif dtype == DataType.ARRAY: + if isinstance(row[field.name], np.ndarray): + row[field.name] = row[field.name].tolist() + + row_size = row_size + self._verify_array(row[field.name], field) + else: + if isinstance(row[field.name], np.generic): + row[field.name] = row[field.name].item() + + row_size = row_size + self._verify_scalar(row[field.name], dtype, field.name) + + return row_size + + def _verify_struct(self, x: object, field: StructFieldSchema): + validator = TYPE_VALIDATOR[DataType.STRUCT.name] + if not validator(x, field.max_capacity): + self._throw( + f"Illegal value for struct field '{field.name}', length exceeds capacity or type mismatch" + ) + + struct_size = 0 + for sub_field in field.fields: + sub_dtype = DataType(sub_field.dtype) + for obj in x: + if sub_field.name not in obj: + self._throw( + f"Sub field '{sub_field.name}' of struct field '{field.name}' is missed" + ) + if sub_dtype == DataType.FLOAT_VECTOR: + origin_list, byte_len = self._verify_vector(obj[sub_field.name], sub_field) + obj[sub_field.name] = np.array( + origin_list, dtype=NUMPY_TYPE_CREATOR[DataType.FLOAT.name] + ) + struct_size = struct_size + byte_len + elif sub_dtype == DataType.VARCHAR: + struct_size = struct_size + self._verify_varchar(obj[sub_field.name], sub_field) + elif sub_dtype in { + DataType.BOOL, + DataType.INT8, + DataType.INT16, + DataType.INT32, + DataType.INT64, + DataType.FLOAT, + DataType.DOUBLE, + }: + if isinstance(obj[sub_field.name], np.generic): + obj[sub_field.name] = obj[sub_field.name].item() + + struct_size = struct_size + self._verify_scalar( + obj[sub_field.name], sub_dtype, sub_field.name + ) + obj[sub_field.name] = NUMPY_TYPE_CREATOR[sub_dtype.name].type( + obj[sub_field.name] + ) + else: + self._throw(f"Unsupported field type '{sub_dtype.name}' for struct field") + + return struct_size + + def _verify_struct_field(self, row: dict): + structs_size = 0 + for field in self._schema.struct_fields: + if field.name not in row: + self._throw(f"The struct field '{field.name}' is missed") + + structs_size = structs_size + self._verify_struct(row[field.name], field) + + return structs_size + + def _verify_row(self, row: dict): + if not isinstance(row, dict): + self._throw("The input row must be a dict object") + + normal_fields_size = self._verify_normal_field(row) + struct_fields_size = self._verify_struct_field(row) + + with self._buffer_lock: + self._buffer_size = self._buffer_size + normal_fields_size + struct_fields_size + self._buffer_row_count = self._buffer_row_count + 1 + self._total_row_count = self._total_row_count + 1 diff --git a/pymilvus/bulk_writer/constants.py b/pymilvus/bulk_writer/constants.py new file mode 100644 index 000000000..2550c85c6 --- /dev/null +++ b/pymilvus/bulk_writer/constants.py @@ -0,0 +1,103 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +from enum import Enum, IntEnum + +import numpy as np + +from pymilvus.client.types import ( + DataType, +) + +from .validators import ( + binary_vector_validator, + float16_vector_validator, + float_vector_validator, + int8_vector_validator, + sparse_vector_validator, + struct_validator, +) + +MB = 1024 * 1024 +GB = 1024 * MB + +DYNAMIC_FIELD_NAME = "$meta" +DEFAULT_BUCKET_NAME = "a-bucket" + +TYPE_SIZE = { + DataType.BOOL.name: 1, + DataType.INT8.name: 1, + DataType.INT16.name: 2, + DataType.INT32.name: 4, + DataType.INT64.name: 8, + DataType.FLOAT.name: 4, + DataType.DOUBLE.name: 8, +} + +TYPE_VALIDATOR = { + DataType.BOOL.name: lambda x: isinstance(x, bool), + DataType.INT8.name: lambda x: isinstance(x, int) and -128 <= x <= 127, + DataType.INT16.name: lambda x: isinstance(x, int) and -32768 <= x <= 32767, + DataType.INT32.name: lambda x: isinstance(x, int) and -2147483648 <= x <= 2147483647, + DataType.INT64.name: lambda x: isinstance(x, int), + DataType.FLOAT.name: lambda x: isinstance(x, float), + DataType.DOUBLE.name: lambda x: isinstance(x, float), + DataType.VARCHAR.name: lambda x, max_len: isinstance(x, str) and len(x) <= max_len, + DataType.JSON.name: lambda x: isinstance(x, (str, list, dict)), + DataType.TIMESTAMPTZ.name: lambda x: isinstance(x, str), + DataType.GEOMETRY.name: lambda x: isinstance(x, str), + DataType.STRUCT.name: lambda x, max_cap: struct_validator(x, max_cap), + DataType.FLOAT_VECTOR.name: lambda x, dim: float_vector_validator(x, dim), + DataType.BINARY_VECTOR.name: lambda x, dim: binary_vector_validator(x, dim), + DataType.FLOAT16_VECTOR.name: lambda x, dim: float16_vector_validator(x, dim, False), + DataType.BFLOAT16_VECTOR.name: lambda x, dim: float16_vector_validator(x, dim, True), + DataType.SPARSE_FLOAT_VECTOR.name: lambda x: sparse_vector_validator(x), + DataType.INT8_VECTOR.name: lambda x, dim: int8_vector_validator(x, dim), + DataType.ARRAY.name: lambda x, cap: (isinstance(x, (list, np.ndarray)) and len(x) <= cap), +} + +NUMPY_TYPE_CREATOR = { + DataType.BOOL.name: np.dtype("bool"), + DataType.INT8.name: np.dtype("int8"), + DataType.INT16.name: np.dtype("int16"), + DataType.INT32.name: np.dtype("int32"), + DataType.INT64.name: np.dtype("int64"), + DataType.FLOAT.name: np.dtype("float32"), + DataType.DOUBLE.name: np.dtype("float64"), + DataType.VARCHAR.name: np.dtype("str"), + DataType.JSON.name: np.dtype("str"), # in numpy/parquet file, json object are stored as string + DataType.TIMESTAMPTZ.name: np.dtype("str"), + DataType.GEOMETRY.name: np.dtype("str"), + DataType.FLOAT_VECTOR.name: np.dtype("float32"), + DataType.BINARY_VECTOR.name: np.dtype("uint8"), + DataType.FLOAT16_VECTOR.name: np.dtype("uint8"), + DataType.BFLOAT16_VECTOR.name: np.dtype("uint8"), + DataType.SPARSE_FLOAT_VECTOR: None, + DataType.INT8_VECTOR.name: np.dtype("int8"), + DataType.ARRAY.name: None, + DataType.STRUCT.name: None, +} + + +class BulkFileType(IntEnum): + NUMPY = 1 + NPY = 1 # deprecated + JSON = 2 + JSON_RB = 2 # deprecated + PARQUET = 3 + CSV = 4 + + +class ConnectType(Enum): + AUTO = "AUTO" + INTERNAL = "INTERNAL" + PUBLIC = "PUBLIC" diff --git a/pymilvus/bulk_writer/endpoint_resolver.py b/pymilvus/bulk_writer/endpoint_resolver.py new file mode 100644 index 000000000..7e0905349 --- /dev/null +++ b/pymilvus/bulk_writer/endpoint_resolver.py @@ -0,0 +1,64 @@ +import http +import logging + +from pymilvus.bulk_writer.constants import ConnectType + +logger = logging.getLogger("EndpointResolver") +logging.basicConfig(level=logging.INFO) + + +class EndpointResolver: + @staticmethod + def resolve_endpoint( + default_endpoint: str, cloud: str, region: str, connect_type: ConnectType + ) -> str: + logger.info( + "Start resolving endpoint, cloud=%s, region=%s, connectType=%s", + cloud, + region, + connect_type, + ) + if cloud == "ali": + default_endpoint = EndpointResolver._resolve_oss_endpoint(region, connect_type) + logger.info("Resolved endpoint: %s, reachable check passed", default_endpoint) + return default_endpoint + + @staticmethod + def _resolve_oss_endpoint(region: str, connect_type: ConnectType) -> str: + internal_endpoint = f"oss-{region}-internal.aliyuncs.com" + public_endpoint = f"oss-{region}.aliyuncs.com" + + if connect_type == ConnectType.INTERNAL: + logger.info("Forced INTERNAL endpoint selected: %s", internal_endpoint) + EndpointResolver._check_endpoint_reachable(internal_endpoint, True) + return internal_endpoint + if connect_type == ConnectType.PUBLIC: + logger.info("Forced PUBLIC endpoint selected: %s", public_endpoint) + EndpointResolver._check_endpoint_reachable(public_endpoint, True) + return public_endpoint + if EndpointResolver._check_endpoint_reachable(internal_endpoint, False): + logger.info("AUTO mode: internal endpoint reachable, using %s", internal_endpoint) + return internal_endpoint + logger.warning( + "AUTO mode: internal endpoint not reachable, fallback to public endpoint %s", + public_endpoint, + ) + EndpointResolver._check_endpoint_reachable(public_endpoint, True) + return public_endpoint + + @staticmethod + def _check_endpoint_reachable(endpoint: str, raise_error: bool) -> bool: + try: + conn = http.client.HTTPSConnection(endpoint, timeout=5) + conn.request("HEAD", "/") + resp = conn.getresponse() + code = resp.status + logger.debug("Checked endpoint %s, response code=%s", endpoint, code) + except Exception as e: + if raise_error: + logger.exception("Endpoint %s not reachable, throwing exception", endpoint) + raise RuntimeError(str(e)) from e + logger.warning("Endpoint %s not reachable, will fallback if needed", endpoint) + return False + else: + return 200 <= code < 400 diff --git a/pymilvus/bulk_writer/file_utils.py b/pymilvus/bulk_writer/file_utils.py new file mode 100644 index 000000000..e4325212d --- /dev/null +++ b/pymilvus/bulk_writer/file_utils.py @@ -0,0 +1,39 @@ +from pathlib import Path +from typing import List, Tuple + + +class FileUtils: + @staticmethod + def process_local_path(local_path: str) -> Tuple[List[str], int]: + """ + Get all file paths under the local_path, recursively. + If local_path is a file, return it directly. + Returns a tuple: (list of file paths, total size in bytes) + """ + if not Path(local_path).exists(): + error_message = f"Path does not exist: {local_path}" + raise ValueError(error_message) + + path = Path(local_path) + if path.is_file(): + return [local_path], path.stat().st_size + if path.is_dir(): + return FileUtils.find_files_recursively(local_path) + + return [], 0 + + @staticmethod + def find_files_recursively(folder_path: str) -> Tuple[List[str], int]: + """ + Recursively finds all files under a folder and calculates total size. + """ + result: List[str] = [] + total_size = 0 + + for file_path in Path(folder_path).rglob("*"): + if file_path.is_file(): + resolved_path = file_path.resolve() + result.append(str(resolved_path)) + total_size += resolved_path.stat().st_size + + return result, total_size diff --git a/pymilvus/bulk_writer/local_bulk_writer.py b/pymilvus/bulk_writer/local_bulk_writer.py new file mode 100644 index 000000000..d92030cf7 --- /dev/null +++ b/pymilvus/bulk_writer/local_bulk_writer.py @@ -0,0 +1,153 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import logging +import threading +import time +import uuid +from pathlib import Path +from threading import Lock, Thread +from typing import Callable, Optional + +from pymilvus.orm.schema import CollectionSchema + +from .bulk_writer import BulkWriter +from .constants import ( + MB, + BulkFileType, +) + +logger = logging.getLogger(__name__) + + +class LocalBulkWriter(BulkWriter): + def __init__( + self, + schema: CollectionSchema, + local_path: str, + chunk_size: int = 128 * MB, + file_type: BulkFileType = BulkFileType.PARQUET, + config: Optional[dict] = None, + **kwargs, + ): + super().__init__(schema, chunk_size, file_type, config, **kwargs) + self._local_path = local_path + self._uuid = str(uuid.uuid4()) + self._flush_count = 0 + self._working_thread = {} + self._working_thread_lock = Lock() + self._local_files = [] + + self._make_dir() + + @property + def uuid(self): + return self._uuid + + def __enter__(self): + return self + + def __exit__(self, exc_type: object, exc_val: object, exc_tb: object): + self._exit() + + def __del__(self): + self._exit() + + def _exit(self): + # wait flush thread + if len(self._working_thread) > 0: + for k, th in self._working_thread.items(): + logger.info(f"Wait flush thread '{k}' to finish") + th.join() + + self._rm_dir() + + def _make_dir(self): + Path(self._local_path).mkdir(exist_ok=True) + logger.info(f"Data path created: {self._local_path}") + + uidir = Path(self._local_path).joinpath(self._uuid) + self._local_path = uidir + Path(uidir).mkdir(exist_ok=True) + logger.info(f"Data path created: {uidir}") + + def _rm_dir(self): + # remove the uuid folder if it is empty + if Path(self._local_path).exists() and not any(Path(self._local_path).iterdir()): + Path(self._local_path).rmdir() + logger.info(f"Delete local directory '{self._local_path}'") + + def append_row(self, row: dict, **kwargs): + super().append_row(row, **kwargs) + + # only one thread can enter this section to persist data, + # in the _flush() method, the buffer will be swapped to a new one. + # in anync mode, the flush thread is asynchronously, other threads can + # continue to append if the new buffer size is less than target size + with self._working_thread_lock: + if self.buffer_size > self.chunk_size: + self.commit(_async=True) + + def commit(self, **kwargs): + # _async=True, the flush thread is asynchronously + while len(self._working_thread) > 0: + logger.info( + f"Previous flush action is not finished, {threading.current_thread().name} is waiting..." + ) + time.sleep(1.0) + + logger.info( + f"Prepare to flush buffer, row_count: {self.buffer_row_count}, size: {self.buffer_size}" + ) + _async = kwargs.get("_async", False) + call_back = kwargs.get("call_back") + + x = Thread(target=self._flush, args=(call_back,)) + logger.info(f"Flush thread begin, name: {x.name}") + self._working_thread[x.name] = x + x.start() + if not _async: + logger.info("Wait flush to finish") + x.join() + + super().commit() # reset the buffer size + logger.info(f"Commit done with async={_async}") + + def _flush(self, call_back: Optional[Callable] = None): + try: + self._flush_count = self._flush_count + 1 + target_path = Path.joinpath(self._local_path, str(self._flush_count)) + + old_buffer = super()._new_buffer() + if old_buffer.row_count > 0: + file_list = old_buffer.persist( + local_path=str(target_path), + buffer_size=self.buffer_size, + buffer_row_count=self.buffer_row_count, + ) + self._local_files.append(file_list) + if call_back: + call_back(file_list) + except Exception as e: + logger.error(f"Failed to fulsh, error: {e}") + raise e from e + finally: + del self._working_thread[threading.current_thread().name] + logger.info(f"Flush thread finished, name: {threading.current_thread().name}") + + @property + def data_path(self): + return self._local_path + + @property + def batch_files(self): + return self._local_files diff --git a/pymilvus/bulk_writer/remote_bulk_writer.py b/pymilvus/bulk_writer/remote_bulk_writer.py new file mode 100644 index 000000000..d0c740635 --- /dev/null +++ b/pymilvus/bulk_writer/remote_bulk_writer.py @@ -0,0 +1,318 @@ +# Copyright (C) 2019-2023 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +import logging +import sys +from pathlib import Path +from typing import Any, Dict, Optional, Union + +from azure.core.exceptions import AzureError +from azure.storage.blob import BlobServiceClient +from minio import Minio +from minio.error import S3Error + +from pymilvus.exceptions import MilvusException +from pymilvus.orm.schema import CollectionSchema + +from .constants import ( + DEFAULT_BUCKET_NAME, + MB, + BulkFileType, +) +from .local_bulk_writer import LocalBulkWriter + +logger = logging.getLogger(__name__) + +TEMP_LOCAL_PATH = "local_path" + + +class RemoteBulkWriter(LocalBulkWriter): + class S3ConnectParam: + def __init__( + self, + bucket_name: str = DEFAULT_BUCKET_NAME, + endpoint: Optional[str] = None, + access_key: Optional[str] = None, + secret_key: Optional[str] = None, + secure: bool = False, + session_token: Optional[str] = None, + region: Optional[str] = None, + http_client: Any = None, + credentials: Any = None, + ): + self._bucket_name = bucket_name + self._endpoint = endpoint + self._access_key = access_key + self._secret_key = secret_key + self._secure = (secure,) + self._session_token = (session_token,) + self._region = (region,) + self._http_client = (http_client,) # urllib3.poolmanager.PoolManager + self._credentials = (credentials,) # minio.credentials.Provider + + ConnectParam = S3ConnectParam # keep the ConnectParam for compatible with user's legacy code + + class AzureConnectParam: + def __init__( + self, + container_name: str, + conn_str: str, + account_url: Optional[str] = None, + credential: Optional[Union[str, Dict[str, str]]] = None, + upload_chunk_size: int = 8 * 1024 * 1024, + upload_concurrency: int = 4, + ): + """Connection parameters for Azure blob storage + Args: + container_name(str): The target container name + + conn_str(str): A connection string to an Azure Storage account, + which can be parsed to an account_url and a credential. + To generate a connection string, read this link: + https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string + + account_url(str): A string in format like https://.blob.core.windows.net + Read this link for more info: + https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview + + credential: Account access key for the account, read this link for more info: + https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal#view-account-access-keys + + upload_chunk_size: If the blob size is larger than this value or unknown, + the blob is uploaded in chunks by parallel connections. This parameter is + passed to max_single_put_size of Azure. Read this link for more info: + https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-upload-python#specify-data-transfer-options-for-upload + + upload_concurrency: The maximum number of parallel connections to use when uploading + in chunks. This parameter is passed to max_concurrency of Azure. + Read this link for more info: + https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-upload-python#specify-data-transfer-options-for-upload + """ + self._container_name = container_name + self._conn_str = conn_str + self._account_url = account_url + self._credential = credential + self._upload_chunk_size = upload_chunk_size + self._upload_concurrency = upload_concurrency + + def __init__( + self, + schema: CollectionSchema, + remote_path: str, + connect_param: Optional[Union[S3ConnectParam, AzureConnectParam]], + chunk_size: int = 1024 * MB, + file_type: BulkFileType = BulkFileType.PARQUET, + config: Optional[dict] = None, + **kwargs, + ): + temp_local_path = str(Path(sys.argv[0]).resolve().parent.joinpath("bulk_writer")) + if TEMP_LOCAL_PATH in kwargs: + temp_local_path = kwargs.get(TEMP_LOCAL_PATH) + kwargs.pop(TEMP_LOCAL_PATH) + super().__init__(schema, temp_local_path, chunk_size, file_type, config, **kwargs) + + self._remote_path = Path("/").joinpath(remote_path).joinpath(super().uuid) + self._connect_param = connect_param + self._client = None + self._get_client() + self._remote_files = [] + logger.info(f"Remote buffer writer initialized, target path: {self._remote_path}") + + def __enter__(self): + return self + + def __exit__(self, exc_type: object, exc_val: object, exc_tb: object): + super().__exit__(exc_type, exc_val, exc_tb) + # remove the temp folder "bulk_writer" + if Path(self._local_path).parent.exists() and not any( + Path(self._local_path).parent.iterdir() + ): + Path(self._local_path).parent.rmdir() + logger.info(f"Delete empty directory '{Path(self._local_path).parent}'") + + def _get_client(self): + if self._client is not None: + return self._client + + if isinstance(self._connect_param, RemoteBulkWriter.S3ConnectParam): + try: + + def arg_parse(arg: Any): + return arg[0] if isinstance(arg, tuple) else arg + + self._client = Minio( + endpoint=arg_parse(self._connect_param._endpoint), + access_key=arg_parse(self._connect_param._access_key), + secret_key=arg_parse(self._connect_param._secret_key), + secure=arg_parse(self._connect_param._secure), + session_token=arg_parse(self._connect_param._session_token), + region=arg_parse(self._connect_param._region), + http_client=arg_parse(self._connect_param._http_client), + credentials=arg_parse(self._connect_param._credentials), + ) + logger.info("Minio/S3 blob storage client successfully initialized") + except Exception as err: + logger.error(f"Failed to connect MinIO/S3, error: {err}") + raise + elif isinstance(self._connect_param, RemoteBulkWriter.AzureConnectParam): + try: + if ( + self._connect_param._conn_str is not None + and len(self._connect_param._conn_str) > 0 + ): + self._client = BlobServiceClient.from_connection_string( + conn_str=self._connect_param._conn_str, + credential=self._connect_param._credential, + max_block_size=self._connect_param._upload_chunk_size, + max_single_put_size=self._connect_param._upload_chunk_size, + ) + elif ( + self._connect_param._account_url is not None + and len(self._connect_param._account_url) > 0 + ): + self._client = BlobServiceClient( + account_url=self._connect_param._account_url, + credential=self._connect_param._credential, + max_block_size=self._connect_param._upload_chunk_size, + max_single_put_size=self._connect_param._upload_chunk_size, + ) + else: + raise MilvusException(message="Illegal connection parameters") + + logger.info("Azure blob storage client successfully initialized") + except Exception as err: + logger.error(f"Failed to connect Azure, error: {err}") + raise + + return self._client + + def _stat_object(self, object_name: str): + if isinstance(self._client, Minio): + return self._client.stat_object( + bucket_name=self._connect_param._bucket_name, object_name=object_name + ) + if isinstance(self._client, BlobServiceClient): + blob = self._client.get_blob_client( + container=self._connect_param._container_name, blob=object_name + ) + return blob.get_blob_properties() + + raise MilvusException(message="Blob storage client is not initialized") + + def _object_exists(self, object_name: str) -> bool: + try: + self._stat_object(object_name=object_name) + except S3Error as s3err: + if s3err.code == "NoSuchKey": + return False + self._throw(f"Failed to stat MinIO/S3 object '{object_name}', error: {s3err}") + except AzureError as azure_err: + if azure_err.error_code == "BlobNotFound": + return False + self._throw(f"Failed to stat Azure object '{object_name}', error: {azure_err}") + + return True + + def _bucket_exists(self) -> bool: + if isinstance(self._client, Minio): + return self._client.bucket_exists(self._connect_param._bucket_name) + if isinstance(self._client, BlobServiceClient): + containers = self._client.list_containers() + for container in containers: + if self._connect_param._container_name == container["name"]: + return True + return False + + raise MilvusException(message="Blob storage client is not initialized") + + def _upload_object(self, file_path: str, object_name: str): + logger.info(f"Prepare to upload '{file_path}' to '{object_name}'") + if isinstance(self._client, Minio): + logger.info(f"Target bucket: '{self._connect_param._bucket_name}'") + self._client.fput_object( + bucket_name=self._connect_param._bucket_name, + object_name=object_name, + file_path=file_path, + ) + elif isinstance(self._client, BlobServiceClient): + logger.info(f"Target bucket: '{self._connect_param._container_name}'") + container_client = self._client.get_container_client( + self._connect_param._container_name + ) + with Path(file_path).open("rb") as data: + container_client.upload_blob( + name=object_name, + data=data, + overwrite=True, + max_concurrency=self._connect_param._upload_concurrency, + connection_timeout=600, + ) + else: + raise MilvusException(message="Blob storage client is not initialized") + + logger.info(f"Upload file '{file_path}' to '{object_name}'") + + def append_row(self, row: dict, **kwargs): + super().append_row(row, **kwargs) + + def commit(self, **kwargs): + super().commit(call_back=self._upload) + + def _local_rm(self, file: str): + try: + Path(file).unlink() + parent_dir = Path(file).parent + if parent_dir != self._local_path and (not any(Path(parent_dir).iterdir())): + Path(parent_dir).rmdir() + logger.info(f"Delete empty directory '{parent_dir}'") + except Exception: + logger.warning(f"Failed to delete local file: {file}") + + def _upload(self, file_list: list): + remote_files = [] + try: + if not self._bucket_exists(): + self._throw("Blob storage bucket/container doesn't exist") + + for file_path in file_list: + ext = Path(file_path).suffix + if ext not in [".json", ".npy", ".parquet", ".csv"]: + continue + + relative_file_path = str(file_path).replace(str(super().data_path), "") + minio_file_path = str( + Path.joinpath(self._remote_path, relative_file_path.lstrip("/")) + ).lstrip("/") + + if self._object_exists(minio_file_path): + logger.info( + f"Remote file '{minio_file_path}' already exists, will overwrite it" + ) + + self._upload_object(object_name=minio_file_path, file_path=file_path) + + remote_files.append(str(minio_file_path)) + self._local_rm(file_path) + except Exception as e: + self._throw(f"Failed to upload files, error: {e}") + + logger.info(f"Successfully upload files: {file_list}") + self._remote_files.append(remote_files) + return remote_files + + @property + def data_path(self): + return self._remote_path + + @property + def batch_files(self): + return self._remote_files diff --git a/pymilvus/bulk_writer/stage_bulk_writer.py b/pymilvus/bulk_writer/stage_bulk_writer.py new file mode 100644 index 000000000..bfbde6c25 --- /dev/null +++ b/pymilvus/bulk_writer/stage_bulk_writer.py @@ -0,0 +1,109 @@ +import logging +import sys +from pathlib import Path +from typing import Any, Dict, List, Optional + +from pymilvus.bulk_writer.stage_file_manager import StageFileManager +from pymilvus.orm.schema import CollectionSchema + +from .constants import MB, BulkFileType, ConnectType +from .local_bulk_writer import LocalBulkWriter + +logger = logging.getLogger(__name__) + + +class StageBulkWriter(LocalBulkWriter): + """StageBulkWriter handles writing local bulk files to a remote stage.""" + + def __init__( + self, + schema: CollectionSchema, + remote_path: str, + cloud_endpoint: str, + api_key: str, + stage_name: str, + chunk_size: int = 1024 * MB, + file_type: BulkFileType = BulkFileType.PARQUET, + config: Optional[dict] = None, + **kwargs, + ): + local_path = Path(sys.argv[0]).resolve().parent / "bulk_writer" + super().__init__(schema, str(local_path), chunk_size, file_type, config, **kwargs) + + remote_dir_path = Path(remote_path) / super().uuid + self._remote_path = str(remote_dir_path) + "/" + self._remote_files: List[List[str]] = [] + self._stage_name = stage_name + self._stage_file_manager = StageFileManager( + cloud_endpoint=cloud_endpoint, + api_key=api_key, + stage_name=stage_name, + connect_type=ConnectType.AUTO, + ) + + logger.info(f"Remote buffer writer initialized, target path: {self._remote_path}") + + def __enter__(self): + return self + + def append_row(self, row: Dict[str, Any], **kwargs): + super().append_row(row, **kwargs) + + def commit(self, **kwargs): + """Commit local bulk files and upload to remote stage.""" + super().commit(call_back=self._upload) + + @property + def data_path(self) -> str: + return str(self._remote_path) + + @property + def batch_files(self) -> List[List[str]]: + return self._remote_files + + def get_stage_upload_result(self) -> Dict[str, str]: + return {"stage_name": self._stage_name, "path": str(self._remote_path)} + + def __exit__(self, exc_type: object, exc_val: object, exc_tb: object): + super().__exit__(exc_type, exc_val, exc_tb) + parent_dir = Path(self._local_path).parent + if parent_dir.exists() and not any(parent_dir.iterdir()): + parent_dir.rmdir() + logger.info(f"Deleted empty directory '{parent_dir}'") + + def _local_rm(self, file_path: str): + """Delete local file and possibly its empty parent directory.""" + try: + path = Path(file_path) + path.unlink() + parent_dir = path.parent + if parent_dir != Path(self._local_path) and not any(parent_dir.iterdir()): + parent_dir.rmdir() + logger.info(f"Deleted empty directory '{parent_dir}'") + except Exception: + logger.warning(f"Failed to delete local file: {file_path}") + + def _upload(self, file_list: List[str]) -> List[str]: + """Upload files to remote stage and remove local copies.""" + uploaded_files: List[str] = [] + + for file_path in file_list: + path = Path(file_path) + relative_file_path = path.relative_to(super().data_path) + remote_file_path = self._remote_path / relative_file_path + + try: + self._upload_object(file_path=str(path), object_name=str(remote_file_path)) + uploaded_files.append(str(remote_file_path)) + self._local_rm(str(path)) + except Exception as e: + self._throw(f"Failed to upload file '{file_path}', error: {e}") + + logger.info(f"Successfully uploaded files: {uploaded_files}") + self._remote_files.append(uploaded_files) + return uploaded_files + + def _upload_object(self, file_path: str, object_name: str): + logger.info(f"Prepare to upload '{file_path}' to '{object_name}'") + self._stage_file_manager.upload_file_to_stage(file_path, self._remote_path) + logger.info(f"Uploaded file '{file_path}' to '{object_name}'") diff --git a/pymilvus/bulk_writer/stage_file_manager.py b/pymilvus/bulk_writer/stage_file_manager.py new file mode 100644 index 000000000..f5b474e32 --- /dev/null +++ b/pymilvus/bulk_writer/stage_file_manager.py @@ -0,0 +1,249 @@ +from __future__ import annotations + +import logging +import threading +import time +from concurrent.futures import ThreadPoolExecutor +from datetime import datetime, timezone +from pathlib import Path +from typing import TYPE_CHECKING + +import urllib3 +from minio import Minio +from minio.error import S3Error + +from pymilvus.bulk_writer.constants import ConnectType +from pymilvus.bulk_writer.endpoint_resolver import EndpointResolver +from pymilvus.bulk_writer.file_utils import FileUtils +from pymilvus.bulk_writer.stage_restful import apply_stage + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +if TYPE_CHECKING: + from minio.helpers import DictType + + +class OAuthMinio(Minio): + def __init__(self, *args, oauth_token: str, **kwargs): + super().__init__(*args, **kwargs) + self.oauth_token = oauth_token + + def _url_open( + self, + method: str, + region: str, + bucket_name: str | None = None, + object_name: str | None = None, + body: bytes | None = None, + headers: DictType | None = None, + query_params: DictType | None = None, + preload_content: bool = True, + no_body_trace: bool = False, + ): + headers = headers or {} + if self.oauth_token: + headers["Authorization"] = f"Bearer {self.oauth_token}" + return super()._url_open( + method, + region, + bucket_name=bucket_name, + object_name=object_name, + headers=headers, + query_params=query_params, + body=body, + preload_content=preload_content, + ) + + +class StageFileManager: + def __init__( + self, + cloud_endpoint: str, + api_key: str, + stage_name: str, + connect_type: ConnectType = ConnectType.AUTO, + ): + """ + private preview feature. Please submit a request and contact us if you need it. + + Args: + cloud_endpoint (str): The fixed cloud endpoint URL. + - For international regions: https://api.cloud.zilliz.com + - For regions in China: https://api.cloud.zilliz.com.cn + api_key (str): The API key associated with your organization + stage_name (str): The name of the Stage. + connect_type: Current value is mainly for Aliyun OSS buckets, default is Auto. + - Default case, if the OSS bucket is reachable via the internal endpoint, + the internal endpoint will be used + - otherwise, the public endpoint will be used. + - You can also force the use of either the internal or public endpoint. + """ + self.cloud_endpoint = cloud_endpoint + self.api_key = api_key + self.stage_name = stage_name + self.connect_type = connect_type + self.local_file_paths = [] + self.total_bytes = 0 + self.stage_info = {} + self._client = None + + def _convert_dir_path(self, input_path: str): + if not input_path or input_path == "/": + return "" + if input_path.endswith("/"): + return input_path + return input_path + "/" + + def _refresh_stage_and_client(self, path: str): + logger.info("refreshing stage info...") + response = apply_stage(self.cloud_endpoint, self.api_key, self.stage_name, path) + self.stage_info = response.json()["data"] + logger.info("stage info refreshed.") + + creds = self.stage_info["credentials"] + http_client = urllib3.PoolManager(maxsize=100) + + cloud = self.stage_info["cloud"] + region = self.stage_info["region"] + endpoint = EndpointResolver.resolve_endpoint( + self.stage_info["endpoint"], + cloud, + region, + self.connect_type, + ) + + session_token = creds["sessionToken"] + if cloud == "gcp": + self._client = OAuthMinio( + endpoint=endpoint, + region=region, + secure=True, + oauth_token=session_token, + http_client=http_client, + ) + else: + self._client = Minio( + endpoint=endpoint, + access_key=creds["tmpAK"], + secret_key=creds["tmpSK"], + session_token=session_token, + region=region, + secure=True, + http_client=http_client, + ) + logger.info("storage client refreshed") + + def _validate_size(self): + file_size_total = self.total_bytes + file_size_limit = self.stage_info["condition"]["maxContentLength"] + if file_size_total > file_size_limit: + error_message = ( + f"localFileTotalSize {file_size_total} exceeds " + f"the maximum contentLength limit {file_size_limit} defined in the condition." + f"If you want to upload larger files, please contact us to lift the restriction." + ) + raise ValueError(error_message) + + def upload_file_to_stage(self, source_file_path: str, target_stage_path: str): + """ + uploads a local file or directory to the specified path within the Stage. + + Args: + source_file_path: the source local file or directory path + target_stage_path: the target directory path in the Stage + Raises: + Exception: If an error occurs during the upload process. + """ + + self.local_file_paths, self.total_bytes = FileUtils.process_local_path(source_file_path) + stage_path = self._convert_dir_path(target_stage_path) + self._refresh_stage_and_client(stage_path) + self._validate_size() + + file_count = len(self.local_file_paths) + logger.info( + f"begin to upload file to stage, localDirOrFilePath:{source_file_path}, fileCount:{file_count} to stageName:{self.stage_name}, stagePath:{stage_path}" + ) + start_time = time.time() + + uploaded_bytes = 0 + uploaded_count = 0 + root_path = Path(source_file_path).resolve() + uploaded_bytes_lock = threading.Lock() + + def _upload_task(file_path: str, root_path: Path, stage_path: str): + nonlocal uploaded_bytes + nonlocal uploaded_count + path_obj = Path(file_path).resolve() + if root_path.is_file(): + relative_path = path_obj.name + else: + relative_path = path_obj.relative_to(root_path).as_posix() + + stage_prefix = f"{self.stage_info['stagePrefix']}" + file_start_time = time.time() + try: + size = Path(file_path).stat().st_size + logger.info(f"uploading file, fileName:{file_path}, size:{size} bytes") + remote_file_path = stage_prefix + stage_path + relative_path + self._put_object(file_path, remote_file_path, stage_path) + with uploaded_bytes_lock: + uploaded_bytes += size + uploaded_count += 1 + percent = uploaded_bytes / self.total_bytes * 100 + elapsed = time.time() - file_start_time + logger.info( + f"Uploaded file, {uploaded_count}/{file_count}: {file_path}, elapsed:{elapsed} s, {uploaded_bytes}/{self.total_bytes} bytes, progress: {percent:.2f}%" + ) + except S3Error as e: + logger.error(f"Failed to upload {file_path}: {e!s}") + raise + + with ThreadPoolExecutor(max_workers=20) as executor: + futures = [] + for _, file_path in enumerate(self.local_file_paths): + futures.append(executor.submit(_upload_task, file_path, root_path, stage_path)) + for f in futures: + f.result() # wait for all + + total_elapsed = time.time() - start_time + logger.info( + f"All files in {source_file_path} uploaded to stage, " + f"stageName:{self.stage_info['stageName']}, stagePath: {stage_path}, " + f"totalFileCount:{file_count}, totalFileSize:{self.total_bytes}, cost time:{total_elapsed}s" + ) + return {"stageName": self.stage_info["stageName"], "path": stage_path} + + def _put_object(self, file_path: str, remote_file_path: str, stage_path: str): + expire_time_str = self.stage_info["credentials"]["expireTime"] + expire_time = datetime.fromisoformat(expire_time_str.replace("Z", "+00:00")) + + now = datetime.now(timezone.utc) + if now > expire_time: + self._refresh_stage_and_client(stage_path) + + self._upload_with_retry(file_path, remote_file_path, stage_path) + + def _upload_with_retry( + self, file_path: str, object_name: str, stage_path: str, max_retries: int = 5 + ): + attempt = 0 + while attempt < max_retries: + try: + self._client.fput_object( + bucket_name=self.stage_info["bucketName"], + object_name=object_name, + file_path=file_path, + ) + break + except Exception as e: + attempt += 1 + logger.warning(f"Attempt {attempt} failed to upload {file_path}: {e}") + self._refresh_stage_and_client(stage_path) + + if attempt == max_retries: + error_message = f"Upload failed after {max_retries} attempts" + raise RuntimeError(error_message) from e + + time.sleep(5) diff --git a/pymilvus/bulk_writer/stage_manager.py b/pymilvus/bulk_writer/stage_manager.py new file mode 100644 index 000000000..bd02a766d --- /dev/null +++ b/pymilvus/bulk_writer/stage_manager.py @@ -0,0 +1,39 @@ +import logging + +from pymilvus.bulk_writer.stage_restful import create_stage, delete_stage, list_stages + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +class StageManager: + def __init__(self, cloud_endpoint: str, api_key: str): + """ + private preview feature. Please submit a request and contact us if you need it. + + Args: + cloud_endpoint (str): The fixed cloud endpoint URL. + - For international regions: https://api.cloud.zilliz.com + - For regions in China: https://api.cloud.zilliz.com.cn + api_key (str): The API key associated with your organization or cluster. + """ + self.cloud_endpoint = cloud_endpoint + self.api_key = api_key + + def create_stage(self, project_id: str, region_id: str, stage_name: str): + """ + Create a stage under the specified project and regionId. + """ + create_stage(self.cloud_endpoint, self.api_key, project_id, region_id, stage_name) + + def delete_stage(self, stage_name: str): + """ + Delete a stage. + """ + delete_stage(self.cloud_endpoint, self.api_key, stage_name) + + def list_stages(self, project_id: str, current_page: int = 1, page_size: int = 10): + """ + Paginated query of the stage list under a specified projectId. + """ + return list_stages(self.cloud_endpoint, self.api_key, project_id, current_page, page_size) diff --git a/pymilvus/bulk_writer/stage_restful.py b/pymilvus/bulk_writer/stage_restful.py new file mode 100644 index 000000000..08d0558eb --- /dev/null +++ b/pymilvus/bulk_writer/stage_restful.py @@ -0,0 +1,242 @@ +import json +import logging + +import requests + +from pymilvus.exceptions import MilvusException + +logger = logging.getLogger(__name__) + + +def list_stages( + url: str, + api_key: str, + project_id: str, + current_page: int = 1, + page_size: int = 10, + **kwargs, +) -> requests.Response: + """call listStages restful interface to list stages of project + + Args: + url (str): url of the server + api_key (str): API key to authenticate your requests. + project_id (str): the id of project + current_page (int): the current page + page_size (int): the size of each page + + Returns: + response of the restful interface + """ + request_url = url + "/v2/stages" + + params = {"projectId": project_id, "currentPage": current_page, "pageSize": page_size} + + resp = _get_request(url=request_url, api_key=api_key, params=params, **kwargs) + _handle_response(request_url, resp.json()) + return resp + + +def create_stage( + url: str, + api_key: str, + project_id: str, + region_id: str, + stage_name: str, + **kwargs, +) -> requests.Response: + """call createStage restful interface to create new stage + + Args: + url (str): url of the server + api_key (str): API key to authenticate your requests. + project_id (str): id of the project + region_id (str): id of the region + stage_name (str): name of the stage + + Returns: + response of the restful interface + """ + request_url = url + "/v2/stages/create" + + params = { + "projectId": project_id, + "regionId": region_id, + "stageName": stage_name, + } + + resp = _post_request(url=request_url, api_key=api_key, params=params, **kwargs) + _handle_response(request_url, resp.json()) + return resp + + +def delete_stage( + url: str, + api_key: str, + stage_name: str, + **kwargs, +) -> requests.Response: + """call deleteStage restful interface to create stage + + Args: + url (str): url of the server + api_key (str): API key to authenticate your requests. + stage_name (str): name of the stage + + Returns: + response of the restful interface + """ + request_url = url + "/v2/stages/" + stage_name + + resp = _delete_request(url=request_url, api_key=api_key, **kwargs) + _handle_response(request_url, resp.json()) + return resp + + +def apply_stage( + url: str, + api_key: str, + stage_name: str, + path: str, + **kwargs, +) -> requests.Response: + """call applyStage restful interface to apply cred of stage + + Args: + url (str): url of the server + api_key (str): API key to authenticate your requests. + stage_name (str): name of the stage + path(str): path of the stage + + Returns: + response of the restful interface + """ + request_url = url + "/v2/stages/apply" + + params = {"stageName": stage_name, "path": path} + + resp = _post_request(url=request_url, api_key=api_key, params=params, **kwargs) + _handle_response(request_url, resp.json()) + return resp + + +def _http_headers(api_key: str): + return { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) " + "Chrome/17.0.963.56 Safari/535.11", + "Accept": "application/json", + "Accept-Encodin": "gzip,deflate,sdch", + "Accept-Languag": "en-US,en;q=0.5", + "Authorization": f"Bearer {api_key}", + } + + +def _throw(msg: str): + logger.error(msg) + raise MilvusException(message=msg) + + +def _handle_response(url: str, res: json): + inner_code = res["code"] + if inner_code != 0: + inner_message = res["message"] + _throw(f"Failed to request url: {url}, code: {inner_code}, message: {inner_message}") + + +def _get_request( + url: str, + api_key: str, + params: {}, + timeout: int = 60, + **kwargs, +) -> requests.Response: + """Send a GET request + + Args: + url (str): The endpoint URL + api_key (str): API key for authentication + params (dict): JSON parameters for the request + timeout (int): Timeout for the request + + Returns: + requests.Response: Response object. + """ + try: + resp = requests.get( + url=url, + headers=_http_headers(api_key), + params=params, + timeout=timeout, + **kwargs, + ) + if resp.status_code != 200: + _throw(f"Failed to get url: {url}, status code: {resp.status_code}") + else: + return resp + except Exception as err: + _throw(f"Failed to get url: {url}, error: {err}") + + +def _post_request( + url: str, + api_key: str, + params: {}, + timeout: int = 60, + **kwargs, +) -> requests.Response: + """Send a POST request + + Args: + url (str): The endpoint URL + api_key (str): API key for authentication + params (dict): JSON parameters for the request + timeout (int): Timeout for the request + + Returns: + requests.Response: Response object. + """ + try: + resp = requests.post( + url=url, + headers=_http_headers(api_key), + json=params, + timeout=timeout, + **kwargs, + ) + if resp.status_code != 200: + _throw(f"Failed to post url: {url}, status code: {resp.status_code}") + else: + return resp + except Exception as err: + _throw(f"Failed to post url: {url}, error: {err}") + + +def _delete_request( + url: str, + api_key: str, + timeout: int = 60, + **kwargs, +) -> requests.Response: + """Send a DELETE request + + Args: + url (str): The endpoint URL + api_key (str): API key for authentication + timeout (int): Timeout for the request + + Returns: + requests.Response: Response object. + """ + try: + resp = requests.delete( + url=url, + headers=_http_headers(api_key), + timeout=timeout, + **kwargs, + ) + if resp.status_code != 200: + _throw(f"Failed to delete url: {url}, status code: {resp.status_code}") + else: + return resp + except Exception as err: + _throw(f"Failed to delete url: {url}, error: {err}") diff --git a/pymilvus/bulk_writer/validators.py b/pymilvus/bulk_writer/validators.py new file mode 100644 index 000000000..e3b8824d3 --- /dev/null +++ b/pymilvus/bulk_writer/validators.py @@ -0,0 +1,184 @@ +import numpy as np + +from pymilvus.exceptions import MilvusException + + +def float_vector_validator(x: object, dim: int): + if isinstance(x, list): # accepts list of float + if len(x) != dim: + raise MilvusException(message="array's length must be equal to vector dimension") + + for k in x: + if not isinstance(k, float): + raise MilvusException(message="array's element must be float value") + return x + + if isinstance(x, np.ndarray): # accepts numpy array of float + if (not issubclass(x.dtype.type, np.float32)) and ( + not issubclass(x.dtype.type, np.float64) + ): + msg = ( + 'numpy.ndarray\'s dtype must be "float32" or "float64" for FLOAT_VECTOR type field' + ) + raise MilvusException(message=msg) + + if len(x.shape) != 1: + raise MilvusException(message="numpy.ndarray's shape must not be one dimension") + + if x.shape[0] != dim: + raise MilvusException( + message="numpy.ndarray's length must be equal to vector dimension" + ) + + return x.tolist() + + raise MilvusException( + message="only accept numpy.ndarray or list[float] for FLOAT_VECTOR type field" + ) + + +def binary_vector_validator(x: object, dim: int): + if isinstance(x, list): # accepts list such as [1, 0, 1, 1, 0, 0, 1, 0] + if len(x) != dim: + raise MilvusException(message="length of the list must be equal to vector dimension") + return np.packbits(x, axis=-1).tolist() + + if isinstance(x, bytes): # accepts bytes such as b'\x00\x01\x02\x03' + x = np.frombuffer(x, dtype=np.uint8).tolist() + if len(x) * 8 != dim: + raise MilvusException( + message="length of the bytes must be equal to 8x of vector dimension" + ) + return x + + if isinstance(x, np.ndarray): # accepts numpy array of uint8 + if not issubclass(x.dtype.type, np.uint8): + msg = 'numpy.ndarray\'s dtype must be "uint8" for BINARY_VECTOR type field' + raise MilvusException(message=msg) + + if len(x.shape) != 1: + raise MilvusException(message="numpy.ndarray's shape must be one dimension") + + if x.shape[0] * 8 != dim: + raise MilvusException( + message="numpy.ndarray's length must be equal to 8x of vector dimension" + ) + + return x.tolist() + + raise MilvusException( + message="only accept numpy.ndarray, list, bytes for BINARY_VECTOR type field" + ) + + +def float16_vector_validator(x: object, dim: int, is_bfloat: bool): + if isinstance(x, list): # accepts list of float + if len(x) != dim: + raise MilvusException(message="array's length must be equal to vector dimension") + + for k in x: + if not isinstance(k, float): + raise MilvusException(message="array's element must be float value") + + arr = ( + np.array(x, dtype=np.dtype("bfloat16")) if is_bfloat else np.array(x, dtype=np.float16) + ) + return arr.tobytes() + + if isinstance(x, np.ndarray): # accepts numpy array + if is_bfloat and x.dtype != "bfloat16": + msg = 'numpy.ndarray\'s dtype must be "bfloat16" for BFLOAT16_VECTOR type field' + raise MilvusException(message=msg) + if (not is_bfloat) and (not issubclass(x.dtype.type, np.float16)): + msg = 'numpy.ndarray\'s dtype must be "float16" for FLOAT16_VECTOR type field' + raise MilvusException(message=msg) + + if len(x.shape) != 1: + raise MilvusException(message="numpy.ndarray's shape must not be one dimension") + + if x.shape[0] != dim: + raise MilvusException( + message="numpy.ndarray's length must be equal to vector dimension" + ) + + return x.tobytes() + + raise MilvusException( + message="only accept numpy.ndarray or list[float] for FLOAT16_VECTOR/BFLOAT16_VECTOR type field" + ) + + +def int8_vector_validator(x: object, dim: int): + if isinstance(x, list): # accepts list of int + if len(x) != dim: + raise MilvusException(message="array's length must be equal to vector dimension") + + for k in x: + if not isinstance(k, int): + raise MilvusException(message="array's element must be int value") + return x + + if isinstance(x, np.ndarray): # accepts numpy array of int + if not issubclass(x.dtype.type, np.int8): + msg = 'numpy.ndarray\'s dtype must be "int8" for INT8_VECTOR type field' + raise MilvusException(message=msg) + + if len(x.shape) != 1: + raise MilvusException(message="numpy.ndarray's shape must not be one dimension") + + if x.shape[0] != dim: + raise MilvusException( + message="numpy.ndarray's length must be equal to vector dimension" + ) + + return x.tolist() + + raise MilvusException( + message="only accept numpy.ndarray or list[int8] for INT8_VECTOR type field" + ) + + +def sparse_vector_validator(x: object): + if not isinstance(x, dict): + raise MilvusException(message="only accept dict for SPARSE_FLOAT_VECTOR type field") + + def check_pair(k: object, v: object): + if not isinstance(k, int): + raise MilvusException(message="sparse vector's index must be integer value") + if not isinstance(v, float): + raise MilvusException(message="sparse vector's value must be float value") + + # only accepts dict like {2: 13.23, 45: 0.54} or {"indices": [1, 2], "values": [0.1, 0.2]} + if "indices" in x and "values" in x: + indices = x["indices"] + values = x["values"] + if not isinstance(indices, list): + raise MilvusException(message="indices of sparse vector must be a list of int") + if not isinstance(values, list): + raise MilvusException(message="values of sparse vector must be a list of int") + if len(indices) != len(values): + raise MilvusException( + message="length of indices and values of sparse vector must be equal" + ) + if len(indices) == 0: + raise MilvusException(message="empty sparse vector is not allowed") + for i in range(len(indices)): + check_pair(indices[i], values[i]) + else: + if len(x) == 0: + raise MilvusException(message="empty sparse vector is not allowed") + for key, value in x.items(): + check_pair(key, value) + + return x + + +def struct_validator(x: object, max_cap: int): + if not isinstance(x, list): + raise MilvusException(message="only accept list of dict for STRUCT type field") + if len(x) > max_cap: + raise MilvusException(message="array's length must be less or equal than max_capacity") + for k in x: + if not isinstance(k, dict): + raise MilvusException(message="only accept list of dict for STRUCT type field") + return x diff --git a/pymilvus/client/__init__.py b/pymilvus/client/__init__.py index 33fabaf7d..1214a554e 100644 --- a/pymilvus/client/__init__.py +++ b/pymilvus/client/__init__.py @@ -1,22 +1,24 @@ -from pkg_resources import get_distribution, DistributionNotFound -import subprocess +import logging import re +import subprocess +from contextlib import suppress +from importlib.metadata import PackageNotFoundError, version + +log = logging.getLogger(__name__) + + +__version__ = "0.0.0.dev" -__version__ = '0.0.0.dev' -try: - __version__ = get_distribution('pymilvus').version -except DistributionNotFound: - # package is not installed - pass +with suppress(PackageNotFoundError): + __version__ = version("pymilvus") -def get_commit(version="", short=True) -> str: - """get commit return the commit for a specific version like `xxxxxx.dev12` """ +def get_commit(version: str = "", short: bool = True) -> str: + """get commit return the commit for a specific version like `xxxxxx.dev12`""" - version_info = r'((\d+)\.(\d+)\.(\d+))((rc)(\d+))?(\.dev(\d+))?' + version_info = r"((\d+)\.(\d+)\.(\d+))((rc)(\d+))?(\.dev(\d+))?" # 2.0.0rc9.dev12 - # ('2.0.0', '2', '0', '0', 'rc9', 'rc', '9', '.dev12', '12') p = re.compile(version_info) target_v = __version__ if version == "" else version @@ -27,23 +29,23 @@ def get_commit(version="", short=True) -> str: if match_version[7] is not None: if match_version[4] is not None: v = str(int(match_version[6]) - 1) - target_tag = 'v' + match_version[0] + match_version[5] + v + target_tag = "v" + match_version[0] + match_version[5] + v else: - target_tag = 'v' + ".".join(str(int("".join(match_version[1:4])) - 1).split("")) + target_tag = "v" + ".".join(str(int("".join(match_version[1:4])) - 1).split("")) target_num = int(match_version[-1]) elif match_version[4] is not None: - target_tag = 'v' + match_version[0] + match_version[4] + target_tag = "v" + match_version[0] + match_version[4] target_num = 0 else: - target_tag = 'v' + match_version[0] + target_tag = "v" + match_version[0] target_num = 0 else: return f"Version: {target_v} isn't the right form" try: - cmd = ['git', 'rev-list', '--reverse', '--ancestry-path', f'{target_tag}^..HEAD'] - print(f"git cmd: {' '.join(cmd)}") - result = subprocess.check_output(cmd).decode('ascii').strip().split('\n') + cmd = ["git", "rev-list", "--reverse", "--ancestry-path", f"{target_tag}^..HEAD"] + log.info(f"git cmd: {' '.join(cmd)}") + result = subprocess.check_output(cmd).decode("ascii").strip().split("\n") length = 7 if short else 40 return result[target_num][:length] diff --git a/pymilvus/client/abstract.py b/pymilvus/client/abstract.py index 01537e1b5..bf60385be 100644 --- a/pymilvus/client/abstract.py +++ b/pymilvus/client/abstract.py @@ -1,319 +1,339 @@ import abc +import logging +from typing import Any, Dict, List, Optional, Union -from .types import DataType -from .constants import DEFAULT_CONSISTENCY_LEVEL -from ..grpc_gen import schema_pb2 +import orjson +from pymilvus.exceptions import DataTypeNotMatchException, ExceptionsMessage +from pymilvus.settings import Config -class LoopBase(object): - def __init__(self): - self.__index = 0 - - def __iter__(self): - return self - - def __getitem__(self, item): - if isinstance(item, slice): - _start = item.start or 0 - _end = min(item.stop, self.__len__()) if item.stop else self.__len__() - _step = item.step or 1 - - elements = [self.get__item(i) for i in range(_start, _end, _step)] - return elements - - if item >= self.__len__(): - raise IndexError("Index out of range") +from . import utils +from .constants import DEFAULT_CONSISTENCY_LEVEL, RANKER_TYPE_RRF, RANKER_TYPE_WEIGHTED - return self.get__item(item) +# ruff: noqa: F401 +# TODO: This is a patch for older version +from .search_result import Hit, Hits, SearchResult +from .types import DataType, FunctionType - def __next__(self): - while self.__index < self.__len__(): - self.__index += 1 - return self.__getitem__(self.__index - 1) - - # iterate stop, raise Exception - self.__index = 0 - raise StopIteration() - - def __str__(self): - return str(list(map(str, self.__getitem__(slice(0, 10))))) - - @abc.abstractmethod - def get__item(self, item): - raise NotImplementedError() - - -class LoopCache(object): - def __init__(self): - self._array = [] - - def fill(self, index, obj): - if len(self._array) + 1 < index: - pass +logger = logging.getLogger(__name__) class FieldSchema: - def __init__(self, raw): + def __init__(self, raw: Any): self._raw = raw - # self.field_id = 0 self.name = None self.is_primary = False self.description = None self.auto_id = False self.type = DataType.UNKNOWN - self.indexes = list() - self.params = dict() - - ## + self.indexes = [] + self.params = {} + self.is_partition_key = False + self.is_dynamic = False + self.nullable = False + self.default_value = None + self.is_function_output = False + # For array field + self.element_type = None + self.is_clustering_key = False self.__pack(self._raw) - def __pack(self, raw): + def __pack(self, raw: Any): self.field_id = raw.fieldID self.name = raw.name self.is_primary = raw.is_primary_key self.description = raw.description self.auto_id = raw.autoID - self.type = raw.data_type - # self.type = DataType(int(raw.type)) + self.type = DataType(raw.data_type) + self.is_partition_key = raw.is_partition_key + self.element_type = DataType(raw.element_type) + self.is_clustering_key = raw.is_clustering_key + self.default_value = raw.default_value + if raw.default_value is not None and raw.default_value.WhichOneof("data") is None: + self.default_value = None + self.is_dynamic = raw.is_dynamic + self.nullable = raw.nullable + self.is_function_output = raw.is_function_output for type_param in raw.type_params: if type_param.key == "params": - import json - self.params[type_param.key] = json.loads(type_param.value) + try: + self.params[type_param.key] = orjson.loads(type_param.value) + except Exception as e: + logger.error( + f"FieldSchema::__pack::65::Failed to load JSON type_param.value: {e}, original data: {type_param.value}" + ) + raise else: + if type_param.key in ["mmap.enabled"]: + self.params["mmap_enabled"] = ( + bool(type_param.value) if type_param.value.lower() != "false" else False + ) + continue self.params[type_param.key] = type_param.value - if "dim" == type_param.key: + if type_param.key in ["dim"]: + self.params[type_param.key] = int(type_param.value) + if type_param.key in [Config.MaxVarCharLengthKey] and raw.data_type in ( + DataType.VARCHAR, + DataType.ARRAY, + ): self.params[type_param.key] = int(type_param.value) - index_dict = dict() + # TO-DO: use constants defined in orm + if type_param.key in ["max_capacity"] and raw.data_type in ( + DataType.ARRAY, + DataType._ARRAY_OF_VECTOR, + ): + self.params[type_param.key] = int(type_param.value) + + index_dict = {} for index_param in raw.index_params: if index_param.key == "params": - import json - index_dict[index_param.key] = json.loads(index_param.value) + try: + index_dict[index_param.key] = orjson.loads(index_param.value) + except Exception as e: + logger.error( + f"FieldSchema::__pack::92::Failed to load JSON index_param.value: {e}, original data: {index_param.value}" + ) + raise else: index_dict[index_param.key] = index_param.value self.indexes.extend([index_dict]) def dict(self): - _dict = dict() - _dict["field_id"] = self.field_id - _dict["name"] = self.name - _dict["description"] = self.description - _dict["type"] = self.type - _dict["params"] = self.params or dict() - _dict["is_primary"] = self.is_primary - _dict["auto_id"] = self.auto_id + _dict = { + "field_id": self.field_id, + "name": self.name, + "description": self.description, + "type": self.type, + "params": self.params or {}, + } + if self.default_value is not None: + # default_value is nil match this situation + if self.default_value.WhichOneof("data") is None: + self.default_value = None + else: + _dict["default_value"] = self.default_value + + if self.element_type: + _dict["element_type"] = self.element_type + + if self.is_partition_key: + _dict["is_partition_key"] = True + if self.is_dynamic: + _dict["is_dynamic"] = True + if self.auto_id: + _dict["auto_id"] = True + if self.nullable: + _dict["nullable"] = True + if self.is_primary: + _dict["is_primary"] = self.is_primary + if self.is_clustering_key: + _dict["is_clustering_key"] = True + if self.is_function_output: + _dict["is_function_output"] = True return _dict +class StructArrayFieldSchema: + def __init__(self, raw: Any): + self._raw = raw + + self.name = None + self.fields = [] + self.description = None + self.params = {} + + self.__pack(self._raw) + + def __pack(self, raw: Any): + self.name = raw.name + self.field_id = raw.fieldID + self.description = raw.description + self.fields = [FieldSchema(f) for f in raw.fields] + + self.params = {} + for kv in raw.type_params: + key = kv.key if kv.key != "mmap.enabled" else "mmap_enabled" + try: + value = orjson.loads(kv.value) + except (orjson.JSONDecodeError, ValueError): + value = kv.value + self.params[key] = value + + def dict(self): + result = { + "field_id": self.field_id, + "name": self.name, + "description": self.description, + "type": DataType._ARRAY_OF_STRUCT, + "fields": [f.dict() for f in self.fields], + } + if self.params: + result["params"] = self.params + return result + + +class FunctionSchema: + def __init__(self, raw: Any): + self._raw = raw + + self.name = None + self.description = None + self.type = None + self.params = {} + self.input_field_names = [] + self.input_field_ids = [] + self.output_field_names = [] + self.output_field_ids = [] + self.id = 0 + + self.__pack(self._raw) + + def __pack(self, raw: Any): + self.name = raw.name + self.description = raw.description + self.id = raw.id + self.type = FunctionType(raw.type) + self.params = {} + for param in raw.params: + self.params[param.key] = param.value + self.input_field_names = raw.input_field_names + self.input_field_ids = raw.input_field_ids + self.output_field_names = raw.output_field_names + self.output_field_ids = raw.output_field_ids + + def dict(self): + return { + "name": self.name, + "id": self.id, + "description": self.description, + "type": self.type, + "params": self.params, + "input_field_names": self.input_field_names, + "input_field_ids": self.input_field_ids, + "output_field_names": self.output_field_names, + "output_field_ids": self.output_field_ids, + } + + class CollectionSchema: - def __init__(self, raw): + def __init__(self, raw: Any): self._raw = raw - # self.collection_name = None self.description = None - self.params = dict() - self.fields = list() - self.statistics = dict() + self.params = {} + self.fields = [] + self.struct_array_fields = [] + self.functions = [] + self.statistics = {} self.auto_id = False # auto_id is not in collection level any more later self.aliases = [] self.collection_id = 0 self.consistency_level = DEFAULT_CONSISTENCY_LEVEL # by default - - # + self.properties = {} + self.num_shards = 0 + self.num_partitions = 0 + self.enable_dynamic_field = False + self.created_timestamp = 0 + self.update_timestamp = 0 if self._raw: self.__pack(self._raw) - def __pack(self, raw): + def __pack(self, raw: Any): self.collection_name = raw.schema.name self.description = raw.schema.description - self.aliases = raw.aliases + self.aliases = list(raw.aliases) self.collection_id = raw.collectionID - + self.num_shards = raw.shards_num + self.num_partitions = raw.num_partitions + self.created_timestamp = raw.created_timestamp + self.update_timestamp = raw.update_timestamp # keep compatible with older Milvus try: self.consistency_level = raw.consistency_level except Exception: self.consistency_level = DEFAULT_CONSISTENCY_LEVEL - # self.params = dict() + try: + self.enable_dynamic_field = raw.schema.enable_dynamic_field + except Exception: + self.enable_dynamic_field = False + # TODO: extra_params here # for kv in raw.extra_params: - # par = ujson.loads(kv.value) - # self.params.update(par) - # # self.params[kv.key] = kv.value self.fields = [FieldSchema(f) for f in raw.schema.fields] - + self.struct_array_fields = [ + StructArrayFieldSchema(f) for f in raw.schema.struct_array_fields + ] + self.functions = [FunctionSchema(f) for f in raw.schema.functions] + function_output_field_names = [f for fn in self.functions for f in fn.output_field_names] + for field in self.fields: + if field.name in function_output_field_names: + field.is_function_output = True # for s in raw.statistics: - # self.statistics[s.key] = s.value + + for p in raw.properties: + self.properties[p.key] = p.value + + @classmethod + def _rewrite_schema_dict(cls, schema_dict: Dict): + fields = schema_dict.get("fields", []) + if not fields: + return + + for field_dict in fields: + if field_dict.get("auto_id", None) is not None: + schema_dict["auto_id"] = field_dict["auto_id"] + return def dict(self): if not self._raw: - return dict() - _dict = dict() - _dict["collection_name"] = self.collection_name - _dict["auto_id"] = self.auto_id - _dict["description"] = self.description - _dict["fields"] = [f.dict() for f in self.fields] - _dict["aliases"] = self.aliases - _dict["collection_id"] = self.collection_id - _dict["consistency_level"] = self.consistency_level - # for k, v in self.params.items(): - # if isinstance(v, DataType): - # _dict[k] = v.value - # else: - # _dict[k] = v - + return {} + _dict = { + "collection_name": self.collection_name, + "auto_id": self.auto_id, + "num_shards": self.num_shards, + "description": self.description, + "fields": [f.dict() for f in self.fields], + "struct_array_fields": [f.dict() for f in self.struct_array_fields], + "functions": [f.dict() for f in self.functions], + "aliases": self.aliases, + "collection_id": self.collection_id, + "consistency_level": self.consistency_level, + "properties": self.properties, + "num_partitions": self.num_partitions, + "enable_dynamic_field": self.enable_dynamic_field, + } + + if self.created_timestamp != 0: + _dict["created_timestamp"] = self.created_timestamp + if self.update_timestamp != 0: + _dict["update_timestamp"] = self.update_timestamp + self._rewrite_schema_dict(_dict) return _dict def __str__(self): return self.dict().__str__() -class Entity: - def __init__(self, entity_id, entity_row_data, entity_score): - self._id = entity_id - self._row_data = entity_row_data - self._score = entity_score - self._distance = entity_score - - def __str__(self): - str_ = 'id: {}, distance: {}, entity: {},'.format(self._id, self._distance, self._row_data) - return str_ - - def __getattr__(self, item): - return self.value_of_field(item) - - @property - def id(self): - return self._id - - @property - def fields(self): - fields = [k for k, v in self._row_data.items()] - return fields - - def get(self, field): - return self.value_of_field(field) - - def value_of_field(self, field): - if field in self._row_data: - return self._row_data[field] - else: - raise BaseException(0, "Field {} is not in return entity".format(field)) - - def type_of_field(self, field): - raise NotImplementedError('TODO: support field in Hits') - - -class Hit: - def __init__(self, entity_id, entity_row_data, entity_score): - self._id = entity_id - self._row_data = entity_row_data - self._score = entity_score - self._distance = entity_score - - def __str__(self): - return "(distance: {}, score: {}, id: {})".format(self._distance, self._score, self._id) - - @property - def entity(self): - return Entity(self._id, self._row_data, self._score) - - @property - def id(self): - return self._id - - @property - def distance(self): - return self._distance - - @property - def score(self): - return self._score - - -class Hits(LoopBase): - def __init__(self, raw, auto_id, round_decimal=-1): - super().__init__() - self._raw = raw - self._auto_id = auto_id - if round_decimal != -1: - self._distances = [round(x, round_decimal) for x in self._raw.scores] - else: - self._distances = self._raw.scores - self._entities = [] - self._pack(self._raw) - - def _pack(self, raw): - self._entities = [item for item in self] - - def __len__(self): - return len(self._raw.ids.int_id.data) - - def get__item(self, item): - entity_id = self._raw.ids.int_id.data[item] - entity_row_data = dict() - if self._raw.fields_data: - for field_data in self._raw.fields_data: - if field_data.type == DataType.BOOL: - raise BaseException(0, "Not support bool yet") - # result[field_data.name] = field_data.field.scalars.data.bool_data[index] - elif field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32): - if len(field_data.scalars.int_data.data) >= item: - entity_row_data[field_data.field_name] = field_data.scalars.int_data.data[item] - elif field_data.type == DataType.INT64: - if len(field_data.scalars.long_data.data) >= item: - entity_row_data[field_data.field_name] = field_data.scalars.long_data.data[item] - elif field_data.type == DataType.FLOAT: - if len(field_data.scalars.float_data.data) >= item: - entity_row_data[field_data.field_name] = round(field_data.scalars.float_data.data[item], 6) - elif field_data.type == DataType.DOUBLE: - if len(field_data.scalars.double_data.data) >= item: - entity_row_data[field_data.field_name] = field_data.scalars.double_data.data[item] - elif field_data.type == DataType.STRING: - raise BaseException(0, "Not support string yet") - # result[field_data.field_name] = field_data.scalars.string_data.data[index] - elif field_data.type == DataType.FLOAT_VECTOR: - dim = field_data.vectors.dim - if len(field_data.vectors.float_vector.data) >= item * dim: - start_pos = item * dim - end_pos = item * dim + dim - entity_row_data[field_data.field_name] = [round(x, 6) for x in - field_data.vectors.float_vector.data[ - start_pos:end_pos]] - elif field_data.type == DataType.BINARY_VECTOR: - dim = field_data.vectors.dim - if len(field_data.vectors.binary_vector.data) >= item * (dim / 8): - start_pos = item * (dim / 8) - end_pos = (item + 1) * (dim / 8) - entity_row_data[field_data.field_name] = [ - field_data.vectors.binary_vector.data[start_pos:end_pos]] - entity_score = self._distances[item] - return Hit(entity_id, entity_row_data, entity_score) - - @property - def ids(self): - return self._raw.ids.int_id.data - - @property - def distances(self): - return self._distances - - class MutationResult: - def __init__(self, raw): + def __init__(self, raw: Any): self._raw = raw - self._primary_keys = list() + self._primary_keys = [] self._insert_cnt = 0 self._delete_cnt = 0 self._upsert_cnt = 0 self._timestamp = 0 + self._succ_index = [] + self._err_index = [] + self._cost = 0 + self._pack(raw) @property @@ -336,6 +356,41 @@ def upsert_count(self): def timestamp(self): return self._timestamp + @property + def succ_count(self): + return len(self._succ_index) + + @property + def err_count(self): + return len(self._err_index) + + @property + def succ_index(self): + return self._succ_index + + @property + def err_index(self): + return self._err_index + + # The unit of this cost is vcu, similar to token + @property + def cost(self): + return self._cost + + def __str__(self): + if self.cost: + return ( + f"(insert count: {self._insert_cnt}, delete count: {self._delete_cnt}, upsert count: {self._upsert_cnt}, " + f"timestamp: {self._timestamp}, success count: {self.succ_count}, err count: {self.err_count}, " + f"cost: {self._cost})" + ) + return ( + f"(insert count: {self._insert_cnt}, delete count: {self._delete_cnt}, upsert count: {self._upsert_cnt}, " + f"timestamp: {self._timestamp}, success count: {self.succ_count}, err count: {self.err_count}" + ) + + __repr__ = __str__ + # TODO # def error_code(self): # pass @@ -343,8 +398,7 @@ def timestamp(self): # def error_reason(self): # pass - def _pack(self, raw): - # self._primary_keys = getattr(raw.IDs, raw.IDs.WhichOneof('id_field')).value.data + def _pack(self, raw: Any): which = raw.IDs.WhichOneof("id_field") if which == "int_id": self._primary_keys = raw.IDs.int_id.data @@ -355,482 +409,152 @@ def _pack(self, raw): self._delete_cnt = raw.delete_cnt self._upsert_cnt = raw.upsert_cnt self._timestamp = raw.timestamp + self._succ_index = raw.succ_index + self._err_index = raw.err_index + self._cost = int( + raw.status.extra_info["report_value"] if raw.status and raw.status.extra_info else "0" + ) -class QueryResult(LoopBase): - def __init__(self, raw, auto_id=True): - super().__init__() - self._raw = raw - self._auto_id = auto_id - self._pack(raw.hits) - - def __len__(self): - return self._nq - - def __len(self): - return self._nq - - def _pack(self, raw): - self._nq = raw.results.num_queries - self._topk = raw.results.top_k - self._hits = [] - offset = 0 - for i in range(self._nq): - hit = schema_pb2.SearchResultData() - start_pos = offset - end_pos = offset + raw.results.topks[i] - hit.scores.append(raw.results.scores[start_pos: end_pos]) - hit.ids.append(raw.results.ids.int_id.data[start_pos: end_pos]) - for field_data in raw.result.fields_data: - field = schema_pb2.FieldData() - field.type = field_data.type - field.field_name = field_data.field_name - if field_data.type == DataType.BOOL: - raise BaseException(0, "Not support bool yet") - # result[field_data.name] = field_data.field.scalars.data.bool_data[index] - elif field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32): - field.scalars.int_data.data.extend(field_data.scalars.int_data.data[start_pos: end_pos]) - elif field_data.type == DataType.INT64: - field.scalars.long_data.data.extend(field_data.scalars.long_data.data[start_pos: end_pos]) - elif field_data.type == DataType.FLOAT: - field.scalars.float_data.data.extend(field_data.scalars.float_data.data[start_pos: end_pos]) - elif field_data.type == DataType.DOUBLE: - field.scalars.double_data.data.extend(field_data.scalars.double_data.data[start_pos: end_pos]) - elif field_data.type == DataType.STRING: - raise BaseException(0, "Not support string yet") - # result[field_data.field_name] = field_data.scalars.string_data.data[index] - elif field_data.type == DataType.FLOAT_VECTOR: - dim = field.vectors.dim - field.vectors.dim = dim - field.vectors.float_vector.data.extend( - field_data.vectors.float_data.data[start_pos * dim: end_pos * dim]) - elif field_data.type == DataType.BINARY_VECTOR: - dim = field_data.vectors.dim - field.vectors.dim = dim - field.vectors.binary_vector.data.extend(field_data.vectors.binary_vector.data[ - start_pos * (dim / 8): end_pos * (dim / 8)]) - hit.fields_data.append(field) - self._hits.append(hit) - offset += raw.results.topks[i] - - def get__item(self, item): - return Hits(self._hits[item], self._auto_id) - - -class ChunkedQueryResult(LoopBase): - def __init__(self, raw_list, auto_id=True, round_decimal=-1): - super().__init__() - self._raw_list = raw_list - self._auto_id = auto_id - self._nq = 0 - self.round_decimal = round_decimal - - self._pack(self._raw_list) - - def __len__(self): - return self._nq - - def __len(self): - return self._nq - - def _pack(self, raw_list): - self._hits = [] - for raw in raw_list: - nq = raw.results.num_queries - self._nq += nq - self._topk = raw.results.top_k - offset = 0 - for i in range(nq): - hit = schema_pb2.SearchResultData() - start_pos = offset - end_pos = offset + raw.results.topks[i] - hit.scores.extend(raw.results.scores[start_pos: end_pos]) - hit.ids.int_id.data.extend(raw.results.ids.int_id.data[start_pos: end_pos]) - for field_data in raw.results.fields_data: - field = schema_pb2.FieldData() - field.type = field_data.type - field.field_name = field_data.field_name - if field_data.type == DataType.BOOL: - raise BaseException(0, "Not support bool yet") - # result[field_data.name] = field_data.field.scalars.data.bool_data[index] - elif field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32): - field.scalars.int_data.data.extend(field_data.scalars.int_data.data[start_pos: end_pos]) - elif field_data.type == DataType.INT64: - field.scalars.long_data.data.extend(field_data.scalars.long_data.data[start_pos: end_pos]) - elif field_data.type == DataType.FLOAT: - field.scalars.float_data.data.extend(field_data.scalars.float_data.data[start_pos: end_pos]) - elif field_data.type == DataType.DOUBLE: - field.scalars.double_data.data.extend(field_data.scalars.double_data.data[start_pos: end_pos]) - elif field_data.type == DataType.STRING: - raise BaseException(0, "Not support string yet") - # result[field_data.field_name] = field_data.scalars.string_data.data[index] - elif field_data.type == DataType.FLOAT_VECTOR: - dim = field_data.vectors.dim - field.vectors.dim = dim - field.vectors.float_vector.data.extend(field_data.vectors.float_vector.data[ - start_pos * dim: end_pos * dim]) - elif field_data.type == DataType.BINARY_VECTOR: - dim = field_data.vectors.dim - field.vectors.dim = dim - field.vectors.binary_vector.data.extend(field_data.vectors.binary_vector.data[ - start_pos * (dim / 8): end_pos * (dim / 8)]) - hit.fields_data.append(field) - self._hits.append(hit) - offset += raw.results.topks[i] - - def get__item(self, item): - return Hits(self._hits[item], self._auto_id, self.round_decimal) - - -def _abstract(): - raise NotImplementedError('You need to override this function') - - -class ConnectIntf: - """SDK client abstract class - - Connection is a abstract class - - """ - - def connect(self, host, port, uri, timeout): - """ - Connect method should be called before any operations - Server will be connected after connect return OK - Should be implemented - - :type host: str - :param host: host - - :type port: str - :param port: port - - :type uri: str - :param uri: (Optional) uri - - :type timeout: int - :param timeout: - - :return: Status, indicate if connect is successful - """ - _abstract() - - def connected(self): - """ - connected, connection status - Should be implemented - - :return: Status, indicate if connect is successful - """ - _abstract() - - def disconnect(self): - """ - Disconnect, server will be disconnected after disconnect return SUCCESS - Should be implemented - - :return: Status, indicate if connect is successful - """ - _abstract() - - def create_table(self, param, timeout): - """ - Create table - Should be implemented - - :type param: TableSchema - :param param: provide table information to be created - - :type timeout: int - :param timeout: - - :return: Status, indicate if connect is successful - """ - _abstract() - - def has_table(self, table_name, timeout): - """ - - This method is used to test table existence. - Should be implemented - - :type table_name: str - :param table_name: table name is going to be tested. - - :type timeout: int - :param timeout: - - :return: - has_table: bool, if given table_name exists - - """ - _abstract() - - def delete_table(self, table_name, timeout): - """ - Delete table - Should be implemented - - :type table_name: str - :param table_name: table_name of the deleting table - - :type timeout: int - :param timeout: - - :return: Status, indicate if connect is successful - """ - _abstract() - - def add_vectors(self, table_name, records, ids, timeout, **kwargs): - """ - Add vectors to table - Should be implemented - - :type table_name: str - :param table_name: table name been inserted - - :type records: list[RowRecord] - :param records: list of vectors been inserted - - :type ids: list[int] - :param ids: list of ids - - :type timeout: int - :param timeout: - - :returns: - Status : indicate if vectors inserted successfully - ids :list of id, after inserted every vector is given a id - """ - _abstract() - - def search_vectors(self, table_name, top_k, nprobe, query_records, query_ranges, **kwargs): - """ - Query vectors in a table - Should be implemented - - :type table_name: str - :param table_name: table name been queried - - :type query_records: list[RowRecord] - :param query_records: all vectors going to be queried - - :type query_ranges: list[Range] - :param query_ranges: Optional ranges for conditional search. - If not specified, search whole table - - :type top_k: int - :param top_k: how many similar vectors will be searched - - :returns: - Status: indicate if query is successful - query_results: list[TopKQueryResult] - """ - _abstract() - - def search_vectors_in_files(self, table_name, file_ids, query_records, - top_k, nprobe, query_ranges, **kwargs): - """ - Query vectors in a table, query vector in specified files - Should be implemented - - :type table_name: str - :param table_name: table name been queried - - :type file_ids: list[str] - :param file_ids: Specified files id array - - :type query_records: list[RowRecord] - :param query_records: all vectors going to be queried - - :type query_ranges: list[Range] - :param query_ranges: Optional ranges for conditional search. - If not specified, search whole table - - :type top_k: int - :param top_k: how many similar vectors will be searched - - :returns: - Status: indicate if query is successful - query_results: list[TopKQueryResult] - """ - _abstract() - - def describe_table(self, table_name, timeout): - """ - Show table information - Should be implemented - - :type table_name: str - :param table_name: which table to be shown - - :type timeout: int - :param timeout: - - :returns: - Status: indicate if query is successful - table_schema: TableSchema, given when operation is successful - """ - _abstract() - - def get_table_row_count(self, table_name, timeout): - """ - Get table row count - Should be implemented - - :type table_name, str - :param table_name, target table name. - - :type timeout: int - :param timeout: how many similar vectors will be searched - - :returns: - Status: indicate if operation is successful - count: int, table row count - """ - _abstract() +class BaseRanker: + def __int__(self): + return - def show_tables(self, timeout): - """ - Show all tables in database - should be implemented - - :type timeout: int - :param timeout: how many similar vectors will be searched - - :return: - Status: indicate if this operation is successful - tables: list[str], list of table names - """ - _abstract() - - def create_index(self, table_name, index, timeout): - """ - Create specified index in a table - should be implemented - - :type table_name: str - :param table_name: table name - - :type index: dict - :param index: index information dict - - example: index = { - "index_type": IndexType.FLAT, - "nlist": 18384 - } - - :type timeout: int - :param timeout: how many similar vectors will be searched - - :return: - Status: indicate if this operation is successful - - :rtype: Status - """ - _abstract() - - def server_version(self, timeout): - """ - Provide server version - should be implemented - - :type timeout: int - :param timeout: how many similar vectors will be searched - - :return: - Status: indicate if operation is successful - - str : Server version - - :rtype: (Status, str) - """ - _abstract() - - def server_status(self, timeout): - """ - Provide server status. When cmd !='version', provide 'OK' - should be implemented - - :type timeout: int - :param timeout: how many similar vectors will be searched - - :return: - Status: indicate if operation is successful - - str : Server version - - :rtype: (Status, str) - """ - _abstract() + def dict(self): + return {} - def preload_table(self, table_name, timeout): - """ - load table to memory cache in advance - should be implemented + def __str__(self): + return self.dict().__str__() - :param table_name: target table name. - :type table_name: str - :type timeout: int - :param timeout: how many similar vectors will be searched +class RRFRanker(BaseRanker): + def __init__( + self, + k: int = 60, + ): + self._strategy = RANKER_TYPE_RRF + self._k = k - :return: - Status: indicate if operation is successful + def dict(self): + params = { + "k": self._k, + } + return { + "strategy": self._strategy, + "params": params, + } + + +class WeightedRanker(BaseRanker): + def __init__(self, *nums, norm_score: bool = True): + self._strategy = RANKER_TYPE_WEIGHTED + weights = [] + for num in nums: + # isinstance(True, int) is True, thus we need to check bool first + if isinstance(num, bool) or not isinstance(num, (int, float)): + error_msg = f"Weight must be a number, got {type(num)}" + raise TypeError(error_msg) + weights.append(num) + self._weights = weights + self._norm_score = norm_score - ::rtype: Status - """ + def dict(self): + params = { + "weights": self._weights, + "norm_score": self._norm_score, + } + return { + "strategy": self._strategy, + "params": params, + } + + +class AnnSearchRequest: + def __init__( + self, + data: Union[List, utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + limit: int, + expr: Optional[str] = None, + expr_params: Optional[dict] = None, + ): + self._data = data + self._anns_field = anns_field + self._param = param + self._limit = limit + + if expr is not None and not isinstance(expr, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(expr)) + self._expr = expr + self._expr_params = expr_params - _abstract() + @property + def data(self): + return self._data - def describe_index(self, table_name, timeout): - """ - Show index information - should be implemented + @property + def anns_field(self): + return self._anns_field - :param table_name: target table name. - :type table_name: str + @property + def param(self): + return self._param - :type timeout: int - :param timeout: how many similar vectors will be searched + @property + def limit(self): + return self._limit - :return: - Status: indicate if operation is successful + @property + def expr(self): + return self._expr - TableSchema: table detail information + @property + def expr_params(self): + return self._expr_params - :rtype: (Status, TableSchema) - """ + def __str__(self): + return { + "anns_field": self.anns_field, + "param": self.param, + "limit": self.limit, + "expr": self.expr, + }.__str__() - _abstract() - def drop_index(self, table_name, timeout): - """ - Show index information - should be implemented +class LoopBase: + def __init__(self): + self.__index = 0 - :param table_name: target table name. - :type table_name: str + def __iter__(self): + return self - :type timeout: int - :param timeout: how many similar vectors will be searched + def __getitem__(self, item: Any): + if isinstance(item, slice): + _start = item.start or 0 + _end = min(item.stop, self.__len__()) if item.stop else self.__len__() + _step = item.step or 1 - :return: - Status: indicate if operation is successful + return [self.get__item(i) for i in range(_start, _end, _step)] - ::rtype: Status - """ + if item >= self.__len__(): + msg = "Index out of range" + raise IndexError(msg) - _abstract() + return self.get__item(item) - def load_collection(self, collection_name, timeout): - _abstract() + def __next__(self): + while self.__index < self.__len__(): + self.__index += 1 + return self.__getitem__(self.__index - 1) - def release_collection(self, collection_name, timeout): - _abstract() + # iterate stop, raise Exception + self.__index = 0 + raise StopIteration - def load_partitions(self, collection_name, timeout): - _abstract() + def __str__(self): + return str(list(map(str, self.__getitem__(slice(0, 10))))) - def release_partitions(self, collection_name, timeout): - _abstract() + @abc.abstractmethod + def get__item(self, item: Any): + raise NotImplementedError diff --git a/pymilvus/client/async_grpc_handler.py b/pymilvus/client/async_grpc_handler.py new file mode 100644 index 000000000..c933dfcd2 --- /dev/null +++ b/pymilvus/client/async_grpc_handler.py @@ -0,0 +1,2032 @@ +import asyncio +import base64 +import copy +import json +import socket +import time +from pathlib import Path +from typing import Dict, List, Optional, Tuple, Union +from urllib import parse + +import grpc +from grpc._cython import cygrpc + +from pymilvus.client.types import GrantInfo, ResourceGroupConfig +from pymilvus.decorators import ignore_unimplemented, retry_on_rpc_failure +from pymilvus.exceptions import ( + AmbiguousIndexName, + DataNotMatchException, + DescribeCollectionException, + ErrorCode, + ExceptionsMessage, + MilvusException, + ParamError, +) +from pymilvus.grpc_gen import common_pb2, milvus_pb2_grpc +from pymilvus.grpc_gen import milvus_pb2 as milvus_types +from pymilvus.orm.schema import Function +from pymilvus.settings import Config + +from . import entity_helper, ts_utils, utils +from .abstract import AnnSearchRequest, BaseRanker, CollectionSchema, FieldSchema, MutationResult +from .async_interceptor import async_header_adder_interceptor +from .check import ( + check_pass_param, + is_legal_host, + is_legal_port, +) +from .constants import ITERATOR_SESSION_TS_FIELD +from .interceptor import _api_level_md +from .prepare import Prepare +from .search_result import SearchResult +from .types import ( + AnalyzeResult, + CompactionState, + DatabaseInfo, + DataType, + HybridExtraList, + IndexState, + LoadState, + ReplicaInfo, + Shard, + State, + Status, + get_extra_info, +) +from .utils import ( + check_invalid_binary_vector, + check_status, + get_server_type, + is_successful, + len_of, +) + + +class AsyncGrpcHandler: + def __init__( + self, + uri: str = Config.GRPC_URI, + host: str = "", + port: str = "", + channel: Optional[grpc.aio.Channel] = None, + **kwargs, + ) -> None: + self._async_stub = None + self._async_channel = channel + self.schema_cache: Dict[str, dict] = {} + + addr = kwargs.get("address") + self._address = addr if addr is not None else self.__get_address(uri, host, port) + self._log_level = None + self._user = kwargs.get("user") + self._set_authorization(**kwargs) + self._setup_db_name(kwargs.get("db_name")) + self._setup_grpc_channel(**kwargs) + self._is_channel_ready = False + self.callbacks = [] # Do nothing + + def __get_address(self, uri: str, host: str, port: str) -> str: + if host != "" and port != "" and is_legal_host(host) and is_legal_port(port): + return f"{host}:{port}" + + try: + parsed_uri = parse.urlparse(uri) + except Exception as e: + raise ParamError(message=f"Illegal uri: [{uri}], {e}") from e + return parsed_uri.netloc + + def _set_authorization(self, **kwargs): + secure = kwargs.get("secure", False) + if not isinstance(secure, bool): + raise ParamError(message="secure must be bool type") + self._secure = secure + self._client_pem_path = kwargs.get("client_pem_path", "") + self._client_key_path = kwargs.get("client_key_path", "") + self._ca_pem_path = kwargs.get("ca_pem_path", "") + self._server_pem_path = kwargs.get("server_pem_path", "") + self._server_name = kwargs.get("server_name", "") + + self._async_authorization_interceptor = None + + def __enter__(self): + return self + + def __exit__(self: object, exc_type: object, exc_val: object, exc_tb: object): + pass + + async def close(self): + await self._async_channel.close() + self._async_channel = None + + def _setup_authorization_interceptor(self, user: str, password: str, token: str): + keys = [] + values = [] + if token: + authorization = base64.b64encode(f"{token}".encode()) + keys.append("authorization") + values.append(authorization) + elif user and password: + authorization = base64.b64encode(f"{user}:{password}".encode()) + keys.append("authorization") + values.append(authorization) + if len(keys) > 0 and len(values) > 0: + self._async_authorization_interceptor = async_header_adder_interceptor(keys, values) + self._final_channel._unary_unary_interceptors.append( + self._async_authorization_interceptor + ) + + def _setup_db_name(self, db_name: str): + if db_name is None: + new_db = None + else: + check_pass_param(db_name=db_name) + new_db = db_name + + if getattr(self, "_db_name", None) != new_db: + self.schema_cache.clear() + + self._db_name = new_db + + def _setup_grpc_channel(self, **kwargs): + if self._async_channel is None: + opts = [ + (cygrpc.ChannelArgKey.max_send_message_length, -1), + (cygrpc.ChannelArgKey.max_receive_message_length, -1), + ("grpc.enable_retries", 1), + ("grpc.keepalive_time_ms", 55000), + ] + if not self._secure: + self._async_channel = grpc.aio.insecure_channel( + self._address, + options=opts, + ) + else: + if self._server_name != "": + opts.append(("grpc.ssl_target_name_override", self._server_name)) + + root_cert, private_k, cert_chain = None, None, None + if self._server_pem_path != "": + with Path(self._server_pem_path).open("rb") as f: + root_cert = f.read() + elif ( + self._client_pem_path != "" + and self._client_key_path != "" + and self._ca_pem_path != "" + ): + with Path(self._ca_pem_path).open("rb") as f: + root_cert = f.read() + with Path(self._client_key_path).open("rb") as f: + private_k = f.read() + with Path(self._client_pem_path).open("rb") as f: + cert_chain = f.read() + + creds = grpc.ssl_channel_credentials( + root_certificates=root_cert, + private_key=private_k, + certificate_chain=cert_chain, + ) + self._async_channel = grpc.aio.secure_channel( + self._address, + creds, + options=opts, + ) + + # avoid to add duplicate headers. + self._final_channel = self._async_channel + + if self._async_authorization_interceptor: + self._final_channel._unary_unary_interceptors.append( + self._async_authorization_interceptor + ) + else: + self._setup_authorization_interceptor( + kwargs.get("user"), + kwargs.get("password"), + kwargs.get("token"), + ) + if self._db_name: + async_db_interceptor = async_header_adder_interceptor(["dbname"], [self._db_name]) + self._final_channel._unary_unary_interceptors.append(async_db_interceptor) + if self._log_level: + async_log_level_interceptor = async_header_adder_interceptor( + ["log-level"], [self._log_level] + ) + self._final_channel._unary_unary_interceptors.append(async_log_level_interceptor) + self._log_level = None + self._async_stub = milvus_pb2_grpc.MilvusServiceStub(self._final_channel) + + @property + def server_address(self): + return self._address + + def get_server_type(self): + return get_server_type(self.server_address.split(":")[0]) + + async def ensure_channel_ready(self): + try: + if not self._is_channel_ready: + # wait for channel ready + await self._async_channel.channel_ready() + # set identifier interceptor + host = socket.gethostname() + req = Prepare.register_request(self._user, host) + response = await self._async_stub.Connect(request=req) + check_status(response.status) + _async_identifier_interceptor = async_header_adder_interceptor( + ["identifier"], [str(response.identifier)] + ) + self._async_channel._unary_unary_interceptors.append(_async_identifier_interceptor) + self._async_stub = milvus_pb2_grpc.MilvusServiceStub(self._async_channel) + + self._is_channel_ready = True + except grpc.FutureTimeoutError as e: + raise MilvusException( + code=Status.CONNECT_FAILED, + message=f"Fail connecting to server on {self._address}, illegal connection params or server unavailable", + ) from e + except Exception as e: + raise e from e + + @retry_on_rpc_failure() + async def create_collection( + self, collection_name: str, fields: List, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.create_collection_request(collection_name, fields, **kwargs) + response = await self._async_stub.CreateCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def drop_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.drop_collection_request(collection_name) + response = await self._async_stub.DropCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def load_collection( + self, + collection_name: str, + replica_number: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + + check_pass_param(timeout=timeout) + request = Prepare.load_collection(collection_name, replica_number, **kwargs) + response = await self._async_stub.LoadCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + await self.wait_for_loading_collection( + collection_name=collection_name, + is_refresh=request.refresh, + timeout=timeout, + **kwargs, + ) + + @retry_on_rpc_failure() + async def wait_for_loading_collection( + self, + collection_name: str, + timeout: Optional[float] = None, + is_refresh: bool = False, + **kwargs, + ): + start = time.time() + + def can_loop(t: int) -> bool: + return True if timeout is None else t <= (start + timeout) + + while can_loop(time.time()): + progress = await self.get_loading_progress( + collection_name=collection_name, + is_refresh=is_refresh, + timeout=timeout, + **kwargs, + ) + if progress >= 100: + return + await asyncio.sleep(Config.WaitTimeDurationWhenLoad) + raise MilvusException( + message=f"wait for loading collection timeout, collection: {collection_name}" + ) + + @retry_on_rpc_failure() + async def get_loading_progress( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + is_refresh: bool = False, + **kwargs, + ): + request = Prepare.get_loading_progress(collection_name, partition_names) + response = await self._async_stub.GetLoadingProgress( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + if is_refresh: + return response.refresh_progress + return response.progress + + @retry_on_rpc_failure() + async def describe_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.describe_collection_request(collection_name) + response = await self._async_stub.DescribeCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + + if is_successful(status): + return CollectionSchema(raw=response).dict() + + raise DescribeCollectionException(status.code, status.reason, status.error_code) + + @retry_on_rpc_failure() + async def has_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> bool: + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.describe_collection_request(collection_name) + reply = await self._async_stub.DescribeCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + + if ( + reply.status.error_code == common_pb2.UnexpectedError + and "can't find collection" in reply.status.reason + ): + return False + + if reply.status.error_code == common_pb2.CollectionNotExists: + return False + + if is_successful(reply.status): + return True + + if reply.status.code == ErrorCode.COLLECTION_NOT_FOUND: + return False + + raise MilvusException(reply.status.code, reply.status.reason, reply.status.error_code) + + @retry_on_rpc_failure() + async def list_collections(self, timeout: Optional[float] = None, **kwargs) -> List[str]: + await self.ensure_channel_ready() + request = Prepare.show_collections_request() + response = await self._async_stub.ShowCollections( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + check_status(status) + return list(response.collection_names) + + @retry_on_rpc_failure() + async def get_collection_stats( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + index_param = Prepare.get_collection_stats_request(collection_name) + response = await self._async_stub.GetCollectionStatistics( + index_param, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + check_status(status) + return response.stats + + @retry_on_rpc_failure() + async def get_partition_stats( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + req = Prepare.get_partition_stats_request(collection_name, partition_name) + response = await self._async_stub.GetPartitionStatistics( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + check_status(status) + return response.stats + + @retry_on_rpc_failure() + async def get_load_state( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + request = Prepare.get_load_state(collection_name, partition_names) + response = await self._async_stub.GetLoadState( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return LoadState(response.state) + + @retry_on_rpc_failure() + async def refresh_load( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + request = Prepare.get_loading_progress(collection_name, partition_names) + response = await self._async_stub.GetLoadingProgress( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.refresh_progress + + @retry_on_rpc_failure() + async def get_server_version(self, timeout: Optional[float] = None, **kwargs) -> str: + await self.ensure_channel_ready() + req = Prepare.get_server_version() + resp = await self._async_stub.GetVersion( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp.version + + @retry_on_rpc_failure() + async def describe_replica( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[ReplicaInfo]: + await self.ensure_channel_ready() + collection_id = (await self.describe_collection(collection_name, timeout, **kwargs))[ + "collection_id" + ] + + req = Prepare.get_replicas(collection_id) + response = await self._async_stub.GetReplicas( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + + groups = [] + for replica in response.replicas: + shards = [ + Shard(s.dm_channel_name, s.node_ids, s.leaderID) for s in replica.shard_replicas + ] + groups.append( + ReplicaInfo( + replica.replicaID, + shards, + replica.node_ids, + replica.resource_group_name, + replica.num_outbound_node, + ) + ) + + return groups + + @retry_on_rpc_failure() + async def rename_collection( + self, + old_name: str, + new_name: str, + new_db_name: str = "", + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=new_name, timeout=timeout) + check_pass_param(collection_name=old_name) + if new_db_name: + check_pass_param(db_name=new_db_name) + request = Prepare.rename_collections_request(old_name, new_name, new_db_name) + status = await self._async_stub.RenameCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + async def _get_info(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + schema = kwargs.get("schema") + schema, schema_timestamp = await self._get_schema_from_cache_or_remote( + collection_name, schema=schema, timeout=timeout, **kwargs + ) + fields_info = schema.get("fields") + struct_fields_info = schema.get("struct_array_fields", []) + enable_dynamic = schema.get("enable_dynamic_field", False) + + return fields_info, struct_fields_info, enable_dynamic, schema_timestamp + + async def update_schema( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> dict: + self.schema_cache.pop(collection_name, None) + schema = await self.describe_collection(collection_name, timeout=timeout, **kwargs) + schema_timestamp = schema.get("update_timestamp", 0) + self.schema_cache[collection_name] = { + "schema": schema, + "schema_timestamp": schema_timestamp, + } + return schema + + async def _get_schema_from_cache_or_remote( + self, + collection_name: str, + schema: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> Tuple[dict, int]: + if collection_name in self.schema_cache: + cached = self.schema_cache[collection_name] + return cached["schema"], cached["schema_timestamp"] + + if not isinstance(schema, dict): + schema = await self.describe_collection(collection_name, timeout=timeout, **kwargs) + schema_timestamp = schema.get("update_timestamp", 0) + self.schema_cache[collection_name] = { + "schema": schema, + "schema_timestamp": schema_timestamp, + } + return schema, schema_timestamp + + @retry_on_rpc_failure() + async def release_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.release_collection("", collection_name) + response = await self._async_stub.ReleaseCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def insert_rows( + self, + collection_name: str, + entities: Union[Dict, List[Dict]], + partition_name: Optional[str] = None, + schema: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + try: + request = await self._prepare_row_insert_request( + collection_name, entities, partition_name, schema, timeout, **kwargs + ) + except DataNotMatchException: + schema = await self.update_schema(collection_name, timeout, **kwargs) + request = await self._prepare_row_insert_request( + collection_name, entities, partition_name, schema, timeout, **kwargs + ) + resp = await self._async_stub.Insert( + request=request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + if resp.status.error_code == common_pb2.SchemaMismatch: + schema = await self.update_schema(collection_name, timeout, **kwargs) + request = await self._prepare_row_insert_request( + collection_name, entities, partition_name, schema, timeout, **kwargs + ) + resp = await self._async_stub.Insert( + request=request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + ts_utils.update_collection_ts(collection_name, resp.timestamp) + return MutationResult(resp) + + async def _prepare_row_insert_request( + self, + collection_name: str, + entity_rows: Union[List[Dict], Dict], + partition_name: Optional[str] = None, + schema: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(entity_rows, dict): + entity_rows = [entity_rows] + + schema, schema_timestamp = await self._get_schema_from_cache_or_remote( + collection_name, schema=schema, timeout=timeout, **kwargs + ) + fields_info = schema.get("fields") + struct_fields_info = schema.get("struct_array_fields", []) # Default to empty list + enable_dynamic = schema.get("enable_dynamic_field", False) + + return Prepare.row_insert_param( + collection_name, + entity_rows, + partition_name, + fields_info, + struct_fields_info, + enable_dynamic=enable_dynamic, + schema_timestamp=schema_timestamp, + ) + + @retry_on_rpc_failure() + async def delete( + self, + collection_name: str, + expression: str, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + try: + req = Prepare.delete_request( + collection_name=collection_name, + filter=expression, + partition_name=partition_name, + consistency_level=kwargs.pop("consistency_level", 0), + **kwargs, + ) + + response = await self._async_stub.Delete( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) + except Exception as err: + raise err from err + else: + return m + + async def _prepare_batch_upsert_request( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + param = kwargs.get("upsert_param") + if param and not isinstance(param, milvus_types.UpsertRequest): + raise ParamError(message="The value of key 'upsert_param' is invalid") + if not isinstance(entities, list): + raise ParamError(message="'entities' must be a list, please provide valid entity data.") + + # Extract partial_update parameter from kwargs + partial_update = kwargs.get("partial_update", False) + + schema = kwargs.get("schema") + schema, _ = await self._get_schema_from_cache_or_remote( + collection_name, schema=schema, timeout=timeout, **kwargs + ) + + fields_info = schema["fields"] + + return ( + param + if param + else Prepare.batch_upsert_param( + collection_name, + entities, + partition_name, + fields_info, + partial_update=partial_update, + ) + ) + + @retry_on_rpc_failure() + async def upsert( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + if not check_invalid_binary_vector(entities): + raise ParamError(message="Invalid binary vector data exists") + + request = await self._prepare_batch_upsert_request( + collection_name, entities, partition_name, timeout, **kwargs + ) + response = await self._async_stub.Upsert( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) + return m + + async def _prepare_row_upsert_request( + self, + collection_name: str, + rows: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if not isinstance(rows, list): + raise ParamError(message="'rows' must be a list, please provide valid row data.") + + partial_update = kwargs.get("partial_update", False) + + fields_info, struct_fields_info, enable_dynamic, schema_timestamp = await self._get_info( + collection_name, timeout, **kwargs + ) + return Prepare.row_upsert_param( + collection_name, + rows, + partition_name, + fields_info, + struct_fields_info, + enable_dynamic=enable_dynamic, + partial_update=partial_update, + schema_timestamp=schema_timestamp, + ) + + @retry_on_rpc_failure() + async def upsert_rows( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + if isinstance(entities, dict): + entities = [entities] + try: + request = await self._prepare_row_upsert_request( + collection_name, entities, partition_name, timeout, **kwargs + ) + except DataNotMatchException: + schema = await self.update_schema(collection_name, timeout, **kwargs) + request = await self._prepare_row_upsert_request( + collection_name, entities, partition_name, timeout, schema=schema, **kwargs + ) + response = await self._async_stub.Upsert( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + if response.status.error_code == common_pb2.SchemaMismatch: + schema = await self.update_schema(collection_name, timeout, **kwargs) + request = await self._prepare_row_upsert_request( + collection_name, entities, partition_name, timeout, schema=schema, **kwargs + ) + response = await self._async_stub.Upsert( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) + return m + + async def _execute_search( + self, request: milvus_types.SearchRequest, timeout: Optional[float] = None, **kwargs + ): + response = await self._async_stub.Search( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + round_decimal = kwargs.get("round_decimal", -1) + return SearchResult( + response.results, + round_decimal, + status=response.status, + session_ts=response.session_ts, + ) + + async def _execute_hybrid_search( + self, request: milvus_types.HybridSearchRequest, timeout: Optional[float] = None, **kwargs + ): + response = await self._async_stub.HybridSearch( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + round_decimal = kwargs.get("round_decimal", -1) + return SearchResult(response.results, round_decimal, status=response.status) + + @retry_on_rpc_failure() + async def search( + self, + collection_name: str, + data: Union[List[List[float]], utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + limit: int, + expression: Optional[str] = None, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + round_decimal: int = -1, + timeout: Optional[float] = None, + ranker: Optional[Function] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param( + limit=limit, + round_decimal=round_decimal, + anns_field=anns_field, + search_data=data, + partition_name_array=partition_names, + output_fields=output_fields, + guarantee_timestamp=kwargs.get("guarantee_timestamp"), + timeout=timeout, + ) + request = Prepare.search_requests_with_expr( + collection_name, + data, + anns_field, + param, + limit, + expression, + partition_names, + output_fields, + round_decimal, + ranker=ranker, + **kwargs, + ) + return await self._execute_search(request, timeout, round_decimal=round_decimal, **kwargs) + + @retry_on_rpc_failure() + async def hybrid_search( + self, + collection_name: str, + reqs: List[AnnSearchRequest], + rerank: Union[BaseRanker, Function], + limit: int, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + round_decimal: int = -1, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param( + limit=limit, + round_decimal=round_decimal, + partition_name_array=partition_names, + output_fields=output_fields, + guarantee_timestamp=kwargs.get("guarantee_timestamp"), + timeout=timeout, + ) + + requests = [] + for req in reqs: + search_request = Prepare.search_requests_with_expr( + collection_name, + req.data, + req.anns_field, + req.param, + req.limit, + req.expr, + partition_names=partition_names, + round_decimal=round_decimal, + expr_params=req.expr_params, + **kwargs, + ) + requests.append(search_request) + + hybrid_search_request = Prepare.hybrid_search_request_with_ranker( + collection_name, + requests, + rerank, + limit, + partition_names, + output_fields, + round_decimal, + **kwargs, + ) + return await self._execute_hybrid_search( + hybrid_search_request, timeout, round_decimal=round_decimal, **kwargs + ) + + @retry_on_rpc_failure() + async def create_index( + self, + collection_name: str, + field_name: str, + params: Dict, + timeout: Optional[float] = None, + **kwargs, + ): + index_name = kwargs.pop("index_name", Config.IndexName) + copy_kwargs = copy.deepcopy(kwargs) + + collection_desc = await self.describe_collection( + collection_name, timeout=timeout, **copy_kwargs + ) + await self.ensure_channel_ready() + valid_field = False + for fields in collection_desc["fields"]: + if field_name != fields["name"]: + continue + valid_field = True + if fields["type"] not in { + DataType.FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.SPARSE_FLOAT_VECTOR, + DataType.INT8_VECTOR, + }: + break + + if not valid_field: + raise MilvusException(message=f"cannot create index on non-existed field: {field_name}") + + index_param = Prepare.create_index_request( + collection_name, field_name, params, index_name=index_name + ) + + status = await self._async_stub.CreateIndex( + index_param, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + index_success, fail_reason = await self.wait_for_creating_index( + collection_name=collection_name, + index_name=index_name, + timeout=timeout, + field_name=field_name, + **kwargs, + ) + + if not index_success: + raise MilvusException(message=fail_reason) + + return Status(status.code, status.reason) + + @retry_on_rpc_failure() + async def wait_for_creating_index( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ): + timestamp = await self.alloc_timestamp() + start = time.time() + while True: + await asyncio.sleep(0.5) + state, fail_reason = await self.get_index_state( + collection_name, index_name, timeout=timeout, timestamp=timestamp, **kwargs + ) + if state == IndexState.Finished: + return True, fail_reason + if state == IndexState.Failed: + return False, fail_reason + end = time.time() + if isinstance(timeout, int) and end - start > timeout: + msg = ( + f"collection {collection_name} create index {index_name} " + f"timeout in {timeout}s" + ) + raise MilvusException(message=msg) + + @retry_on_rpc_failure() + async def get_index_state( + self, + collection_name: str, + index_name: str, + timeout: Optional[float] = None, + timestamp: Optional[int] = None, + **kwargs, + ): + request = Prepare.describe_index_request(collection_name, index_name, timestamp) + response = await self._async_stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + check_status(status) + + if len(response.index_descriptions) == 1: + index_desc = response.index_descriptions[0] + return index_desc.state, index_desc.index_state_fail_reason + field_name = kwargs.pop("field_name", "") + if field_name != "": + for index_desc in response.index_descriptions: + if index_desc.field_name == field_name: + return index_desc.state, index_desc.index_state_fail_reason + + raise AmbiguousIndexName(message=ExceptionsMessage.AmbiguousIndexName) + + @retry_on_rpc_failure() + async def drop_index( + self, + collection_name: str, + field_name: str, + index_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.drop_index_request(collection_name, field_name, index_name) + response = await self._async_stub.DropIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def create_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param( + collection_name=collection_name, partition_name=partition_name, timeout=timeout + ) + request = Prepare.create_partition_request(collection_name, partition_name) + response = await self._async_stub.CreatePartition( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def drop_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param( + collection_name=collection_name, partition_name=partition_name, timeout=timeout + ) + request = Prepare.drop_partition_request(collection_name, partition_name) + + response = await self._async_stub.DropPartition( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def load_partitions( + self, + collection_name: str, + partition_names: List[str], + replica_number: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(timeout=timeout) + + request = Prepare.load_partitions( + collection_name=collection_name, + partition_names=partition_names, + replica_number=replica_number, + **kwargs, + ) + response = await self._async_stub.LoadPartitions( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + await self.wait_for_loading_partitions( + collection_name=collection_name, + partition_names=partition_names, + is_refresh=request.refresh, + timeout=timeout, + **kwargs, + ) + + @retry_on_rpc_failure() + async def wait_for_loading_partitions( + self, + collection_name: str, + partition_names: List[str], + timeout: Optional[float] = None, + is_refresh: bool = False, + **kwargs, + ): + start = time.time() + + def can_loop(t: int) -> bool: + return True if timeout is None else t <= (start + timeout) + + while can_loop(time.time()): + progress = await self.get_loading_progress( + collection_name, partition_names, timeout=timeout, is_refresh=is_refresh, **kwargs + ) + if progress >= 100: + return + await asyncio.sleep(Config.WaitTimeDurationWhenLoad) + raise MilvusException( + message=f"wait for loading partition timeout, collection: {collection_name}, partitions: {partition_names}" + ) + + @retry_on_rpc_failure() + async def release_partitions( + self, + collection_name: str, + partition_names: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param( + collection_name=collection_name, partition_name_array=partition_names, timeout=timeout + ) + request = Prepare.release_partitions("", collection_name, partition_names) + response = await self._async_stub.ReleasePartitions( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def has_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ) -> bool: + await self.ensure_channel_ready() + check_pass_param( + collection_name=collection_name, partition_name=partition_name, timeout=timeout + ) + request = Prepare.has_partition_request(collection_name, partition_name) + response = await self._async_stub.HasPartition( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.value + + @retry_on_rpc_failure() + async def list_partitions( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[str]: + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.show_partitions_request(collection_name) + response = await self._async_stub.ShowPartitions( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return list(response.partition_names) + + @retry_on_rpc_failure() + async def get( + self, + collection_name: str, + ids: List[int], + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + # TODO: some check + await self.ensure_channel_ready() + request = Prepare.retrieve_request(collection_name, ids, output_fields, partition_names) + return await self._async_stub.Retrieve.get( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + + @retry_on_rpc_failure() + async def query( + self, + collection_name: str, + expr: str, + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + strict_float32: bool = False, + **kwargs, + ): + await self.ensure_channel_ready() + if output_fields is not None and not isinstance(output_fields, (list,)): + raise ParamError(message="Invalid query format. 'output_fields' must be a list") + request = Prepare.query_request( + collection_name, expr, output_fields, partition_names, **kwargs + ) + response = await self._async_stub.Query( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + + num_fields = len(response.fields_data) + # check has fields + if num_fields == 0: + raise MilvusException(message="No fields returned") + + # check if all lists are of the same length + it = iter(response.fields_data) + num_entities = len_of(next(it)) + if not all(len_of(field_data) == num_entities for field_data in it): + raise MilvusException(message="The length of fields data is inconsistent") + + _, dynamic_fields = entity_helper.extract_dynamic_field_from_result(response) + keys = [field_data.field_name for field_data in response.fields_data] + filtered_keys = [k for k in keys if k != "$meta"] + results = [dict.fromkeys(filtered_keys) for _ in range(num_entities)] + lazy_field_data = [] + for field_data in response.fields_data: + lazy_extracted = entity_helper.extract_row_data_from_fields_data_v2(field_data, results) + if lazy_extracted: + lazy_field_data.append(field_data) + + extra_dict = get_extra_info(response.status) + extra_dict[ITERATOR_SESSION_TS_FIELD] = response.session_ts + return HybridExtraList( + lazy_field_data, + results, + extra=extra_dict, + dynamic_fields=dynamic_fields, + strict_float32=strict_float32, + ) + + @retry_on_rpc_failure() + @ignore_unimplemented(0) + async def alloc_timestamp(self, timeout: Optional[float] = None, **kwargs) -> int: + await self.ensure_channel_ready() + request = milvus_types.AllocTimestampRequest() + response = await self._async_stub.AllocTimestamp( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.timestamp + + @retry_on_rpc_failure() + async def alter_collection_properties( + self, collection_name: str, properties: dict, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, properties=properties, timeout=timeout) + request = Prepare.alter_collection_request(collection_name, properties=properties) + status = await self._async_stub.AlterCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def drop_collection_properties( + self, + collection_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.alter_collection_request(collection_name, delete_keys=property_keys) + status = await self._async_stub.AlterCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def alter_collection_field( + self, + collection_name: str, + field_name: str, + field_params: dict, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, properties=field_params, timeout=timeout) + request = Prepare.alter_collection_field_request( + collection_name=collection_name, field_name=field_name, field_param=field_params + ) + status = await self._async_stub.AlterCollectionField( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def add_collection_field( + self, + collection_name: str, + field_schema: FieldSchema, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.add_collection_field_request(collection_name, field_schema) + status = await self._async_stub.AddCollectionField( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def list_indexes(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.describe_index_request(collection_name, "") + + response = await self._async_stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + if is_successful(status): + return response.index_descriptions + if status.code == ErrorCode.INDEX_NOT_FOUND or status.error_code == Status.INDEX_NOT_EXIST: + return [] + raise MilvusException(status.code, status.reason, status.error_code) + + @retry_on_rpc_failure() + async def describe_index( + self, + collection_name: str, + index_name: str, + timeout: Optional[float] = None, + timestamp: Optional[int] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout) + request = Prepare.describe_index_request(collection_name, index_name, timestamp=timestamp) + + response = await self._async_stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + if status.code == ErrorCode.INDEX_NOT_FOUND or status.error_code == Status.INDEX_NOT_EXIST: + return None + check_status(status) + if len(response.index_descriptions) == 1: + info_dict = {kv.key: kv.value for kv in response.index_descriptions[0].params} + info_dict["field_name"] = response.index_descriptions[0].field_name + info_dict["index_name"] = response.index_descriptions[0].index_name + if info_dict.get("params"): + info_dict["params"] = json.loads(info_dict["params"]) + info_dict["total_rows"] = response.index_descriptions[0].total_rows + info_dict["indexed_rows"] = response.index_descriptions[0].indexed_rows + info_dict["pending_index_rows"] = response.index_descriptions[0].pending_index_rows + info_dict["state"] = common_pb2.IndexState.Name(response.index_descriptions[0].state) + return info_dict + + raise AmbiguousIndexName(message=ExceptionsMessage.AmbiguousIndexName) + + @retry_on_rpc_failure() + async def alter_index_properties( + self, + collection_name: str, + index_name: str, + properties: dict, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout) + if properties is None: + raise ParamError(message="properties should not be None") + + request = Prepare.alter_index_properties_request(collection_name, index_name, properties) + response = await self._async_stub.AlterIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def drop_index_properties( + self, + collection_name: str, + index_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout) + request = Prepare.drop_index_properties_request( + collection_name, index_name, delete_keys=property_keys + ) + response = await self._async_stub.AlterIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def create_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.create_alias_request(collection_name, alias) + response = await self._async_stub.CreateAlias( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def drop_alias(self, alias: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + request = Prepare.drop_alias_request(alias) + response = await self._async_stub.DropAlias( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def alter_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.alter_alias_request(collection_name, alias) + response = await self._async_stub.AlterAlias( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + async def describe_alias(self, alias: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + check_pass_param(alias=alias, timeout=timeout) + request = Prepare.describe_alias_request(alias) + response = await self._async_stub.DescribeAlias( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + ret = { + "alias": alias, + } + if response.collection: + ret["collection_name"] = response.collection + if response.db_name: + ret["db_name"] = response.db_name + return ret + + @retry_on_rpc_failure() + async def list_aliases(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.list_aliases_request(collection_name) + response = await self._async_stub.ListAliases( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.aliases + + def reset_db_name(self, db_name: str): + self._setup_db_name(db_name) + self._setup_grpc_channel() + + @retry_on_rpc_failure() + async def create_database( + self, + db_name: str, + properties: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + check_pass_param(db_name=db_name, timeout=timeout) + request = Prepare.create_database_req(db_name, properties=properties) + status = await self._async_stub.CreateDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def drop_database(self, db_name: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + request = Prepare.drop_database_req(db_name) + status = await self._async_stub.DropDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def list_database(self, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + check_pass_param(timeout=timeout) + request = Prepare.list_database_req() + response = await self._async_stub.ListDatabases( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return list(response.db_names) + + @retry_on_rpc_failure() + async def alter_database( + self, db_name: str, properties: dict, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + request = Prepare.alter_database_properties_req(db_name, properties) + status = await self._async_stub.AlterDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def drop_database_properties( + self, db_name: str, property_keys: List[str], timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + request = Prepare.drop_database_properties_req(db_name, property_keys) + status = await self._async_stub.AlterDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + async def describe_database(self, db_name: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + request = Prepare.describe_database_req(db_name=db_name) + resp = await self._async_stub.DescribeDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return DatabaseInfo(resp).to_dict() + + @retry_on_rpc_failure() + async def create_privilege_group( + self, privilege_group: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.create_privilege_group_req(privilege_group) + resp = await self._async_stub.CreatePrivilegeGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def drop_privilege_group( + self, privilege_group: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.drop_privilege_group_req(privilege_group) + resp = await self._async_stub.DropPrivilegeGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def list_privilege_groups(self, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + req = Prepare.list_privilege_groups_req() + resp = await self._async_stub.ListPrivilegeGroups( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp.privilege_groups + + @retry_on_rpc_failure() + async def add_privileges_to_group( + self, privilege_group: str, privileges: List[str], timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.operate_privilege_group_req( + privilege_group, privileges, milvus_types.OperatePrivilegeGroupType.AddPrivilegesToGroup + ) + resp = await self._async_stub.OperatePrivilegeGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def remove_privileges_from_group( + self, privilege_group: str, privileges: List[str], timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.operate_privilege_group_req( + privilege_group, + privileges, + milvus_types.OperatePrivilegeGroupType.RemovePrivilegesFromGroup, + ) + resp = await self._async_stub.OperatePrivilegeGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def create_user( + self, user: str, password: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param(user=user, password=password, timeout=timeout) + req = Prepare.create_user_request(user, password) + resp = await self._async_stub.CreateCredential( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def drop_user(self, user: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.delete_user_request(user) + resp = await self._async_stub.DeleteCredential( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def update_password( + self, + user: str, + old_password: str, + new_password: str, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.update_password_request(user, old_password, new_password) + resp = await self._async_stub.UpdateCredential( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def list_users(self, timeout: Optional[float] = None, **kwargs): + req = Prepare.list_usernames_request() + resp = await self._async_stub.ListCredUsers( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp.usernames + + @retry_on_rpc_failure() + async def describe_user( + self, username: str, include_role_info: bool, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.select_user_request(username, include_role_info) + resp = await self._async_stub.SelectUser( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp + + @retry_on_rpc_failure() + async def create_role(self, role_name: str, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + req = Prepare.create_role_request(role_name) + resp = await self._async_stub.CreateRole( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def drop_role( + self, role_name: str, force_drop: bool = False, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.drop_role_request(role_name, force_drop=force_drop) + resp = await self._async_stub.DropRole( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def grant_role( + self, username: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.operate_user_role_request( + username, role_name, milvus_types.OperateUserRoleType.AddUserToRole + ) + resp = await self._async_stub.OperateUserRole( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def revoke_role( + self, username: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.operate_user_role_request( + username, role_name, milvus_types.OperateUserRoleType.RemoveUserFromRole + ) + resp = await self._async_stub.OperateUserRole( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def describe_role( + self, role_name: str, include_user_info: bool, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.select_role_request(role_name, include_user_info) + resp = await self._async_stub.SelectRole( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp.results + + @retry_on_rpc_failure() + async def list_roles(self, include_user_info: bool, timeout: Optional[float] = None, **kwargs): + await self.ensure_channel_ready() + req = Prepare.select_role_request(None, include_user_info) + resp = await self._async_stub.SelectRole( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp.results + + @retry_on_rpc_failure() + async def select_grant_for_one_role( + self, role_name: str, db_name: str, timeout: Optional[float] = None, **kwargs + ): + await self.ensure_channel_ready() + req = Prepare.select_grant_request(role_name, None, None, db_name) + resp = await self._async_stub.SelectGrant( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + + return GrantInfo(resp.entities) + + @retry_on_rpc_failure() + async def grant_privilege( + self, + role_name: str, + object: str, + object_name: str, + privilege: str, + db_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + req = Prepare.operate_privilege_request( + role_name, + object, + object_name, + privilege, + db_name, + milvus_types.OperatePrivilegeType.Grant, + ) + resp = await self._async_stub.OperatePrivilege( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def revoke_privilege( + self, + role_name: str, + object: str, + object_name: str, + privilege: str, + db_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + req = Prepare.operate_privilege_request( + role_name, + object, + object_name, + privilege, + db_name, + milvus_types.OperatePrivilegeType.Revoke, + ) + resp = await self._async_stub.OperatePrivilege( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def grant_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + req = Prepare.operate_privilege_v2_request( + role_name, + privilege, + milvus_types.OperatePrivilegeType.Grant, + db_name, + collection_name, + ) + resp = await self._async_stub.OperatePrivilegeV2( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def revoke_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + await self.ensure_channel_ready() + req = Prepare.operate_privilege_v2_request( + role_name, + privilege, + milvus_types.OperatePrivilegeType.Revoke, + db_name, + collection_name, + ) + resp = await self._async_stub.OperatePrivilegeV2( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def create_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.create_resource_group(name, **kwargs) + resp = await self._async_stub.CreateResourceGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def drop_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.drop_resource_group(name) + resp = await self._async_stub.DropResourceGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def update_resource_groups( + self, configs: Dict[str, ResourceGroupConfig], timeout: Optional[float] = None, **kwargs + ): + req = Prepare.update_resource_groups(configs) + resp = await self._async_stub.UpdateResourceGroups( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def describe_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.describe_resource_group(name) + resp = await self._async_stub.DescribeResourceGroup( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return resp.resource_group + + @retry_on_rpc_failure() + async def list_resource_groups(self, timeout: Optional[float] = None, **kwargs): + req = Prepare.list_resource_groups() + resp = await self._async_stub.ListResourceGroups( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return list(resp.resource_groups) + + @retry_on_rpc_failure() + async def transfer_replica( + self, + source: str, + target: str, + collection_name: str, + num_replica: int, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.transfer_replica(source, target, collection_name, num_replica) + resp = await self._async_stub.TransferReplica( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + async def get_flush_state( + self, + segment_ids: List[int], + collection_name: str, + flush_ts: int, + timeout: Optional[float] = None, + **kwargs, + ) -> bool: + """Get the flush state for given segments.""" + await self.ensure_channel_ready() + req = Prepare.get_flush_state_request(segment_ids, collection_name, flush_ts) + response = await self._async_stub.GetFlushState( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.flushed + + async def _wait_for_flushed( + self, + segment_ids: List[int], + collection_name: str, + flush_ts: int, + timeout: Optional[float] = None, + **kwargs, + ): + """Wait for segments to be flushed.""" + flush_ret = False + start = time.time() + while not flush_ret: + flush_ret = await self.get_flush_state( + segment_ids, collection_name, flush_ts, timeout, **kwargs + ) + end = time.time() + if timeout is not None and end - start > timeout: + raise MilvusException( + message=f"wait for flush timeout, collection: {collection_name}, flusht_ts: {flush_ts}" + ) + + if not flush_ret: + await asyncio.sleep(0.5) + + @retry_on_rpc_failure() + async def flush(self, collection_names: List[str], timeout: Optional[float] = None, **kwargs): + if collection_names in (None, []) or not isinstance(collection_names, list): + raise ParamError(message="Collection name list can not be None or empty") + + check_pass_param(timeout=timeout) + for name in collection_names: + check_pass_param(collection_name=name) + + req = Prepare.flush_param(collection_names) + response = await self._async_stub.Flush( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + + # Wait for all segments to be flushed in parallel + if collection_names: + await asyncio.gather( + *( + self._wait_for_flushed( + response.coll_segIDs[collection_name].data, + collection_name, + response.coll_flush_ts[collection_name], + timeout=timeout, + ) + for collection_name in collection_names + ) + ) + + return response + + @retry_on_rpc_failure() + async def compact( + self, + collection_name: str, + is_clustering: Optional[bool] = False, + is_l0: Optional[bool] = False, + target_size: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> int: + meta = _api_level_md(**kwargs) + request = Prepare.describe_collection_request(collection_name) + response = await self._async_stub.DescribeCollection( + request, timeout=timeout, metadata=meta + ) + check_status(response.status) + + req = Prepare.manual_compaction( + collection_name, is_clustering, is_l0, response.collectionID, target_size + ) + response = await self._async_stub.ManualCompaction(req, timeout=timeout, metadata=meta) + check_status(response.status) + + return response.compactionID + + @retry_on_rpc_failure() + async def get_compaction_state( + self, compaction_id: int, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.get_compaction_state(compaction_id) + response = await self._async_stub.GetCompactionState( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + + return CompactionState( + compaction_id, + State.new(response.state), + response.executingPlanNo, + response.timeoutPlanNo, + response.completedPlanNo, + ) + + @retry_on_rpc_failure() + async def run_analyzer( + self, + texts: Union[str, List[str]], + analyzer_params: Optional[Union[str, Dict]] = None, + with_hash: bool = False, + with_detail: bool = False, + collection_name: Optional[str] = None, + field_name: Optional[str] = None, + analyzer_names: Optional[Union[str, List[str]]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.run_analyzer( + texts, + analyzer_params=analyzer_params, + with_hash=with_hash, + with_detail=with_detail, + collection_name=collection_name, + field_name=field_name, + analyzer_names=analyzer_names, + ) + resp = await self._async_stub.RunAnalyzer( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + + if isinstance(texts, str): + return AnalyzeResult(resp.results[0], with_hash, with_detail) + return [AnalyzeResult(result, with_hash, with_detail) for result in resp.results] diff --git a/pymilvus/client/async_interceptor.py b/pymilvus/client/async_interceptor.py new file mode 100644 index 000000000..db96b416f --- /dev/null +++ b/pymilvus/client/async_interceptor.py @@ -0,0 +1,94 @@ +from typing import ( + Any, + Callable, + List, + Union, +) + +from grpc.aio import ( + ClientCallDetails, + StreamStreamClientInterceptor, + StreamUnaryClientInterceptor, + UnaryStreamClientInterceptor, + UnaryUnaryClientInterceptor, +) +from grpc.aio._call import ( + StreamStreamCall, + StreamUnaryCall, + UnaryStreamCall, + UnaryUnaryCall, +) +from grpc.aio._typing import ( + RequestIterableType, + RequestType, + ResponseIterableType, + ResponseType, +) + + +class _GenericAsyncClientInterceptor( + UnaryUnaryClientInterceptor, + UnaryStreamClientInterceptor, + StreamUnaryClientInterceptor, + StreamStreamClientInterceptor, +): + def __init__(self, interceptor_function: Callable): + self._fn = interceptor_function + + async def intercept_unary_unary( + self, + continuation: Callable[[ClientCallDetails, RequestType], UnaryUnaryCall], + client_call_details: ClientCallDetails, + request: RequestType, + ) -> Union[UnaryUnaryCall, ResponseType]: + new_details, new_request = self._fn(client_call_details, request) + return await continuation(new_details, new_request) + + async def intercept_unary_stream( + self, + continuation: Callable[[ClientCallDetails, RequestType], UnaryStreamCall], + client_call_details: ClientCallDetails, + request: RequestType, + ) -> Union[ResponseIterableType, UnaryStreamCall]: + new_details, new_request = self._fn(client_call_details, request) + return await continuation(new_details, new_request) + + async def intercept_stream_unary( + self, + continuation: Callable[[ClientCallDetails, RequestType], StreamUnaryCall], + client_call_details: ClientCallDetails, + request_iterator: RequestIterableType, + ) -> StreamUnaryCall: + new_details, new_request_iterator = self._fn(client_call_details, request_iterator) + return await continuation(new_details, new_request_iterator) + + async def intercept_stream_stream( + self, + continuation: Callable[[ClientCallDetails, RequestType], StreamStreamCall], + client_call_details: ClientCallDetails, + request_iterator: RequestIterableType, + ) -> Union[ResponseIterableType, StreamStreamCall]: + new_details, new_request_iterator = self._fn(client_call_details, request_iterator) + return await continuation(new_details, new_request_iterator) + + +def async_header_adder_interceptor(headers: List[str], values: Union[List[str], List[bytes]]): + def intercept_call(client_call_details: ClientCallDetails, request: Any): + metadata = [] + if client_call_details.metadata: + metadata = list(client_call_details.metadata) + + for header, value in zip(headers, values): + metadata.append((header, value)) + + new_details = ClientCallDetails( + method=client_call_details.method, + timeout=client_call_details.timeout, + metadata=metadata, + credentials=client_call_details.credentials, + wait_for_ready=client_call_details.wait_for_ready, + ) + + return new_details, request + + return _GenericAsyncClientInterceptor(intercept_call) diff --git a/pymilvus/client/asynch.py b/pymilvus/client/asynch.py index f60d4a993..70079d721 100644 --- a/pymilvus/client/asynch.py +++ b/pymilvus/client/asynch.py @@ -1,61 +1,69 @@ import abc +import inspect import threading +from typing import Any, Callable, Optional -from .abstract import QueryResult, ChunkedQueryResult, MutationResult -from .exceptions import BaseException +from pymilvus.exceptions import MilvusException +from pymilvus.grpc_gen import milvus_pb2 + +from .abstract import MutationResult +from .search_result import SearchResult from .types import Status +from .utils import check_status # TODO: remove this to a common util -def _parameter_is_empty(func): - import inspect +def _parameter_is_empty(func: Callable): sig = inspect.signature(func) - # params = sig.parameters # todo: add more check to parameter, such as `default parameter`, # `positional-only`, `positional-or-keyword`, `keyword-only`, `var-positional`, `var-keyword` # if len(params) == 0: - # return True # for param in params.values(): # if (param.kind == inspect.Parameter.POSITIONAL_ONLY or - # param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD) and \ # param.default == inspect._empty: - # return False return len(sig.parameters) == 0 class AbstractFuture: @abc.abstractmethod def result(self, **kwargs): - '''Return deserialized result. + """Return deserialized result. It's a synchronous interface. It will wait executing until server respond or timeout occur(if specified). This API is thread-safe. - ''' - raise NotImplementedError() + """ + raise NotImplementedError @abc.abstractmethod def cancel(self): - '''Cancle gRPC future. + """Cancle gRPC future. This API is thread-safe. - ''' - raise NotImplementedError() + """ + raise NotImplementedError @abc.abstractmethod def done(self): - '''Wait for request done. + """Wait for request done. This API is thread-safe. - ''' - raise NotImplementedError() + """ + raise NotImplementedError class Future(AbstractFuture): - def __init__(self, future, done_callback=None, pre_exception=None): + def __init__( + self, + future: Any, + done_callback: Optional[Callable] = None, + pre_exception: Optional[Callable] = None, + **kwargs, + ) -> None: self._future = future - self._done_cb = done_callback # keep compatible (such as Future(future, done_callback)), deprecated later + # keep compatible (such as Future(future, done_callback)), deprecated later + self._done_cb = done_callback self._done_cb_list = [] self.add_callback(done_callback) self._condition = threading.Condition() @@ -64,21 +72,21 @@ def __init__(self, future, done_callback=None, pre_exception=None): self._response = None self._results = None self._exception = pre_exception - self._callback_called = False # callback function should be called only once + self._callback_called = False # callback function should be called only once + self._kwargs = kwargs - def add_callback(self, func): + def add_callback(self, func: Callable): self._done_cb_list.append(func) - def __del__(self): + def __del__(self) -> None: self._future = None @abc.abstractmethod - def on_response(self, response): - ''' Parse response from gRPC server and return results. - ''' - raise NotImplementedError() + def on_response(self, response: Callable): + """Parse response from gRPC server and return results.""" + raise NotImplementedError - def _callback(self, **kwargs): + def _callback(self): if not self._callback_called: for cb in self._done_cb_list: if cb: @@ -90,16 +98,22 @@ def _callback(self, **kwargs): elif self._results is not None: cb(self._results) else: - raise BaseException(1, "callback function is not legal!") + raise MilvusException(message="callback function is not legal!") self._callback_called = True def result(self, **kwargs): self.exception() with self._condition: # future not finished. wait callback being called. - to = kwargs.get("timeout", None) + to = kwargs.get("timeout") + if to is None: + to = self._kwargs.get("timeout", None) + if self._future and self._results is None: - self._response = self._future.result(timeout=to) + try: + self._response = self._future.result(timeout=to) + except Exception as e: + raise MilvusException(message=str(e)) from e self._results = self.on_response(self._response) self._callback() @@ -115,8 +129,7 @@ def result(self, **kwargs): if self._results: return self._results - else: - return self.on_response(self._response) + return self.on_response(self._response) def cancel(self): with self._condition: @@ -128,13 +141,12 @@ def is_done(self): return self._done def done(self): - # self.exception() with self._condition: if self._future and self._results is None: try: self._response = self._future.result() self._results = self.on_response(self._response) - self._callback() # https://github.com/milvus-io/milvus/issues/6160 + self._callback() # https://github.com/milvus-io/milvus/issues/6160 except Exception as e: self._exception = e @@ -150,118 +162,30 @@ def exception(self): class SearchFuture(Future): - def __init__(self, future, done_callback=None, auto_id=True, pre_exception=None): - super().__init__(future, done_callback, pre_exception) - self._auto_id = auto_id - - def on_response(self, response): - if response.status.error_code == 0: - return QueryResult(response, self._auto_id) - - status = response.status - raise BaseException(status.error_code, status.reason) - - -# TODO: if ChunkedFuture is more common later, consider using ChunkedFuture as Base Class, -# then Future(future, done_cb, pre_exception) equal to ChunkedFuture([future], done_cb, pre_exception) -class ChunkedSearchFuture(Future): - def __init__(self, future_list, done_callback=None, auto_id=True, pre_exception=None): - super().__init__(None, done_callback, pre_exception) - self._auto_id = auto_id - self._future_list = future_list - self._response = [] - - def result(self, **kwargs): - self.exception() - with self._condition: - to = kwargs.get("timeout", None) - if self._results is None: - for future in self._future_list: - if future: - self._response.append(future.result(timeout=to)) - - if len(self._response) > 0 and not self._results: - self._results = self.on_response(self._response) - - self._callback() - - self._done = True - - self._condition.notify_all() - - self.exception() - if kwargs.get("raw", False) is True: - # just return response object received from gRPC - raise AttributeError("Not supported to return response object received from gRPC") - - if self._results: - return self._results - else: - return self.on_response(self._response) - - def cancel(self): - with self._condition: - for future in self._future_list: - if future: - future.cancel() - self._condition.notify_all() - - def is_done(self): - return self._done - - def done(self): - # self.exception() - with self._condition: - if self._results is None: - try: - for future in self._future_list: - if future: - self._response.append(future.result(timeout=None)) - - if len(self._response) > 0 and not self._results: - self._results = self.on_response(self._response) - self._callback() # https://github.com/milvus-io/milvus/issues/6160 - - except Exception as e: - self._exception = e - - self._condition.notify_all() - - def exception(self): - if self._exception: - raise self._exception - for future in self._future_list: - if future: - future.exception() - - def on_response(self, response): - for raw in response: - if raw.status.error_code != 0: - raise BaseException(raw.status.error_code, raw.status.reason) - - return ChunkedQueryResult(response, self._auto_id) + def on_response(self, response: milvus_pb2.SearchResults): + check_status(response.status) + return SearchResult(response.results, status=response.status) class MutationFuture(Future): - def on_response(self, response): - status = response.status - if status.error_code == 0: - return MutationResult(response) - - status = response.status - raise BaseException(status.error_code, status.reason) + def on_response(self, response: Any): + check_status(response.status) + return MutationResult(response) class CreateIndexFuture(Future): - def on_response(self, response): - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - return Status(response.error_code, response.reason) + def on_response(self, response: Any): + check_status(response) + return Status(response.code, response.reason) class CreateFlatIndexFuture(AbstractFuture): - def __init__(self, res, done_callback=None, pre_exception=None): + def __init__( + self, + res: Any, + done_callback: Optional[Callable] = None, + pre_exception: Optional[Callable] = None, + ) -> None: self._results = res self._done_cb = done_callback self._done_cb_list = [] @@ -269,16 +193,16 @@ def __init__(self, res, done_callback=None, pre_exception=None): self._condition = threading.Condition() self._exception = pre_exception - def add_callback(self, func): + def add_callback(self, func: Callable): self._done_cb_list.append(func) - def __del__(self): + def __del__(self) -> None: self._results = None - def on_response(self, response): + def on_response(self, response: Any): pass - def result(self, **kwargs): + def result(self): self.exception() with self._condition: for cb in self._done_cb_list: @@ -291,7 +215,7 @@ def result(self, **kwargs): elif self._results is not None: cb(self._results) else: - raise BaseException(1, "callback function is not legal!") + raise MilvusException(message="callback function is not legal!") return self._results def cancel(self): @@ -311,18 +235,15 @@ def exception(self): class FlushFuture(Future): - def on_response(self, response): - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) + def on_response(self, response: Any): + check_status(response.status) class LoadCollectionFuture(Future): - def on_response(self, response): - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) + def on_response(self, response: Any): + check_status(response.status) class LoadPartitionsFuture(Future): - def on_response(self, response): - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) + def on_response(self, response: Any): + check_status(response.status) diff --git a/pymilvus/client/blob.py b/pymilvus/client/blob.py index 184682aa0..80faa0798 100644 --- a/pymilvus/client/blob.py +++ b/pymilvus/client/blob.py @@ -1,39 +1,8 @@ import struct +from typing import List -# reference: https://docs.python.org/3/library/struct.html#struct.pack - -def boolToBytes(b): - return struct.pack("?", b) - -def int8ToBytes(i): - return struct.pack("b", i) - -def int16ToBytes(i): - return struct.pack("h", i) - -def int32ToBytes(i): - return struct.pack("i", i) - -def int64ToBytes(i): - return struct.pack("q", i) -def floatToBytes(f): - return struct.pack("f", f) - -def doubleToBytes(d): - return struct.pack("d", d) - -def stringToBytes(s): - return bytes(s, encoding='utf8') - -def vectorBinaryToBytes(v): - return bytes(v) - -def vectorFloatToBytes(v): - bs = bytes() - for f in v: - bs += floatToBytes(f) - return bs - -def bytesToInt64(v): - return struct.unpack("q", v)[0] +# reference: https://docs.python.org/3/library/struct.html#struct.pack +def vector_float_to_bytes(v: List[float]): + # pack len(v) number of float + return struct.pack(f"{len(v)}f", *v) diff --git a/pymilvus/client/check.py b/pymilvus/client/check.py index 098058624..075939da5 100644 --- a/pymilvus/client/check.py +++ b/pymilvus/client/check.py @@ -1,81 +1,61 @@ -import sys import datetime -from typing import Any, Union -from .exceptions import ParamError +import sys +from typing import Any, Callable, Union +import numpy as np -def is_legal_host(host: Any) -> bool: - return isinstance(host, str) +from pymilvus.exceptions import ParamError +from pymilvus.grpc_gen import milvus_pb2 as milvus_types +from . import entity_helper +from .singleton_utils import Singleton -def is_legal_port(port: Any) -> bool: - if isinstance(port, str): - try: - _port = int(port) - except ValueError: - return False - else: - return 0 <= _port < 65535 - return False +def validate_strs(**kwargs): + """validate if all values are legal non-emtpy str""" + invalid_pair = {k: v for k, v in kwargs.items() if not validate_str(v)} + if invalid_pair: + msg = f"Illegal str variables: {invalid_pair}, expect non-empty str" + raise ParamError(message=msg) -def is_legal_vector(array: Any) -> bool: - if not array or \ - not isinstance(array, list) or \ - len(array) == 0: - return False +def validate_nullable_strs(**kwargs): + """validate if all values are either None or legal non-empty str""" + invalid_pair = {k: v for k, v in kwargs.items() if v is not None and not validate_str(v)} + if invalid_pair: + msg = f"Illegal nullable str variables: {invalid_pair}, expect None or non-empty str" + raise ParamError(message=msg) - # for v in array: - # if not isinstance(v, float): - # return False - return True +def validate_str(var: Any) -> bool: + """check if a variable is legal non-empty str""" + return var and isinstance(var, str) -def is_legal_bin_vector(array: Any) -> bool: - if not array or \ - not isinstance(array, bytes) or \ - len(array) == 0: +def is_legal_address(addr: Any) -> bool: + if not isinstance(addr, str): return False - return True + a = addr.split(":") + if len(a) != 2: + return False + + return is_legal_host(a[0]) and is_legal_port(a[1]) -def is_legal_numpy_array(array: Any) -> bool: - return not (array is None or array.size == 0) - - -# def is_legal_records(value): -# param_error = ParamError( -# 'A vector must be a non-empty, 2-dimensional array and ' -# 'must contain only elements with the float data type or the bytes data type.' -# ) -# -# if isinstance(value, np.ndarray): -# if not is_legal_numpy_array(value): -# raise param_error -# -# return True -# -# if not isinstance(value, list) or len(value) == 0: -# raise param_error -# -# if isinstance(value[0], bytes): -# check_func = is_legal_bin_vector -# elif isinstance(value[0], list): -# check_func = is_legal_vector -# else: -# raise param_error -# -# _dim = len(value[0]) -# for record in value: -# if not check_func(record): -# raise param_error -# if _dim != len(record): -# raise ParamError('Whole vectors must have the same dimension') -# -# return True +def is_legal_host(host: Any) -> bool: + return isinstance(host, str) and len(host) > 0 and (":" not in host) + + +def is_legal_port(port: Any) -> bool: + if isinstance(port, (str, int)): + try: + int(port) + except ValueError: + return False + else: + return True + return False def int_or_str(item: Union[int, str]) -> str: @@ -87,7 +67,7 @@ def int_or_str(item: Union[int, str]) -> str: def is_correct_date_str(param: str) -> bool: try: - datetime.datetime.strptime(param, '%Y-%m-%d') + datetime.datetime.strptime(param, "%Y-%m-%d") except ValueError: return False @@ -95,7 +75,12 @@ def is_correct_date_str(param: str) -> bool: def is_legal_dimension(dim: Any) -> bool: - return isinstance(dim, int) + try: + _ = int(dim) + except ValueError: + return False + + return True def is_legal_index_size(index_size: Any) -> bool: @@ -103,13 +88,26 @@ def is_legal_index_size(index_size: Any) -> bool: def is_legal_table_name(table_name: Any) -> bool: - return table_name and isinstance(table_name, str) + return validate_str(table_name) + + +def is_legal_db_name(db_name: Any) -> bool: + # you can connect to the default database "". + return isinstance(db_name, str) def is_legal_field_name(field_name: Any) -> bool: return field_name and isinstance(field_name, str) +def is_legal_index_name(index_name: Any) -> bool: + return index_name and isinstance(index_name, str) + + +def is_legal_timeout(timeout: Any) -> bool: + return timeout is None or isinstance(timeout, (int, float)) + + def is_legal_nlist(nlist: Any) -> bool: return not isinstance(nlist, bool) and isinstance(nlist, int) @@ -140,32 +138,55 @@ def is_legal_nprobe(nprobe: Any) -> bool: return isinstance(nprobe, int) +def is_legal_itopk_size(itopk_size: Any) -> bool: + return isinstance(itopk_size, int) + + +def is_legal_search_width(search_width: Any) -> bool: + return isinstance(search_width, int) + + +def is_legal_min_iterations(min_iterations: Any) -> bool: + return isinstance(min_iterations, int) + + +def is_legal_max_iterations(max_iterations: Any) -> bool: + return isinstance(max_iterations, int) + + +def is_legal_drop_ratio(drop_ratio: Any) -> bool: + return isinstance(drop_ratio, float) and 0 <= drop_ratio < 1 + + +def is_legal_team_size(team_size: Any) -> bool: + return isinstance(team_size, int) + + def is_legal_cmd(cmd: Any) -> bool: return cmd and isinstance(cmd, str) def parser_range_date(date: Union[str, datetime.date]) -> str: if isinstance(date, datetime.date): - return date.strftime('%Y-%m-%d') + return date.strftime("%Y-%m-%d") if isinstance(date, str): if not is_correct_date_str(date): - raise ParamError('Date string should be YY-MM-DD format!') + raise ParamError(message="Date string should be YY-MM-DD format!") return date raise ParamError( - 'Date should be YY-MM-DD format string or datetime.date, ' - 'or datetime.datetime object') + message="Date should be YY-MM-DD format string or datetime.date, " + "or datetime.datetime object" + ) def is_legal_date_range(start: str, end: str) -> bool: start_date = datetime.datetime.strptime(start, "%Y-%m-%d") end_date = datetime.datetime.strptime(end, "%Y-%m-%d") - if (end_date - start_date).days < 0: - return False - return True + return (end_date - start_date).days >= 0 def is_legal_partition_name(tag: Any) -> bool: @@ -177,21 +198,17 @@ def is_legal_limit(limit: Any) -> bool: def is_legal_anns_field(field: Any) -> bool: - return field and isinstance(field, str) + return field is None or isinstance(field, str) def is_legal_search_data(data: Any) -> bool: - import numpy as np + if entity_helper.entity_is_sparse_matrix(data): + return True + if not isinstance(data, (list, np.ndarray)): return False - for vector in data: - # list -> float vector - # bytes -> byte vector - if not isinstance(vector, (list, bytes, np.ndarray)): - return False - - return True + return all(isinstance(vector, (list, bytes, np.ndarray, str)) for vector in data) def is_legal_output_fields(output_fields: Any) -> bool: @@ -201,11 +218,7 @@ def is_legal_output_fields(output_fields: Any) -> bool: if not isinstance(output_fields, list): return False - for field in output_fields: - if not is_legal_field_name(field): - return False - - return True + return all(is_legal_field_name(field) for field in output_fields) def is_legal_partition_name_array(tag_array: Any) -> bool: @@ -215,120 +228,158 @@ def is_legal_partition_name_array(tag_array: Any) -> bool: if not isinstance(tag_array, list): return False - for tag in tag_array: - if not is_legal_partition_name(tag): - return False - - return True - - -# https://milvus.io/cn/docs/v1.0.0/metric.md#floating -def is_legal_index_metric_type(index_type: str, metric_type: str) -> bool: - if index_type not in ("FLAT", - "IVF_FLAT", - "IVF_SQ8", - # "IVF_SQ8_HYBRID", - "IVF_PQ", - "HNSW", - # "NSG", - "ANNOY", - "RHNSW_FLAT", - "RHNSW_PQ", - "RHNSW_SQ"): - return False - if metric_type not in ("L2", "IP"): - return False - return True + return all(is_legal_partition_name(tag) for tag in tag_array) -# https://milvus.io/cn/docs/v1.0.0/metric.md#binary -def is_legal_binary_index_metric_type(index_type: str, metric_type: str) -> bool: - if index_type == "BIN_FLAT": - if metric_type in ("JACCARD", "TANIMOTO", "HAMMING", "SUBSTRUCTURE", "SUPERSTRUCTURE"): - return True - elif index_type == "BIN_IVF_FLAT": - if metric_type in ("JACCARD", "TANIMOTO", "HAMMING"): - return True - return False +def is_legal_replica_number(replica_number: int) -> bool: + return isinstance(replica_number, int) def _raise_param_error(param_name: str, param_value: Any) -> None: - raise ParamError(f"`{param_name}` value {param_value} is illegal") + raise ParamError(message=f"`{param_name}` value {param_value} is illegal") def is_legal_round_decimal(round_decimal: Any) -> bool: return isinstance(round_decimal, int) and -2 < round_decimal < 7 -def is_legal_travel_timestamp(ts: Any) -> bool: - return isinstance(ts, int) and ts >= 0 +def is_legal_guarantee_timestamp(ts: Any) -> bool: + return (ts is None) or (isinstance(ts, int) and ts >= 0) -def is_legal_guarantee_timestamp(ts: Any) -> bool: - return isinstance(ts, int) and ts >= 0 +def is_legal_user(user: Any) -> bool: + return isinstance(user, str) -def check_pass_param(*_args: Any, **kwargs: Any) -> None: # pylint: disable=too-many-statements - if kwargs is None: - raise ParamError("Param should not be None") +def is_legal_password(password: Any) -> bool: + return isinstance(password, str) - for key, value in kwargs.items(): - if key in ("collection_name",): - if not is_legal_table_name(value): - _raise_param_error(key, value) - elif key == "field_name": - if not is_legal_field_name(value): - _raise_param_error(key, value) - elif key == "dimension": - if not is_legal_dimension(value): - _raise_param_error(key, value) - elif key == "index_file_size": - if not is_legal_index_size(value): - _raise_param_error(key, value) - elif key in ("topk", "top_k"): - if not is_legal_topk(value): - _raise_param_error(key, value) - elif key in ("ids",): - if not is_legal_ids(value): - _raise_param_error(key, value) - elif key in ("nprobe",): - if not is_legal_nprobe(value): - _raise_param_error(key, value) - elif key in ("nlist",): - if not is_legal_nlist(value): - _raise_param_error(key, value) - elif key in ("cmd",): - if not is_legal_cmd(value): - _raise_param_error(key, value) - elif key in ("partition_name",): - if not is_legal_partition_name(value): - _raise_param_error(key, value) - elif key in ("partition_name_array",): - if not is_legal_partition_name_array(value): - _raise_param_error(key, value) - elif key in ("limit",): - if not is_legal_limit(value): - _raise_param_error(key, value) - elif key in ("anns_field",): - if not is_legal_anns_field(value): - _raise_param_error(key, value) - elif key in ("search_data",): - if not is_legal_search_data(value): - _raise_param_error(key, value) - elif key in ("output_fields",): - if not is_legal_output_fields(value): - _raise_param_error(key, value) - elif key in ("round_decimal",): - if not is_legal_round_decimal(value): - _raise_param_error(key, value) - elif key in ("travel_timestamp",): - if not is_legal_travel_timestamp(value): - _raise_param_error(key, value) - elif key in ("guarantee_timestamp",): - if not is_legal_guarantee_timestamp(value): + +def is_legal_role_name(role_name: Any) -> bool: + return role_name and isinstance(role_name, str) + + +def is_legal_operate_user_role_type(operate_user_role_type: Any) -> bool: + return operate_user_role_type in ( + milvus_types.OperateUserRoleType.AddUserToRole, + milvus_types.OperateUserRoleType.RemoveUserFromRole, + ) + + +def is_legal_include_user_info(include_user_info: Any) -> bool: + return isinstance(include_user_info, bool) + + +def is_legal_include_role_info(include_role_info: Any) -> bool: + return isinstance(include_role_info, bool) + + +def is_legal_object(object: Any) -> bool: + return object and isinstance(object, str) + + +def is_legal_object_name(object_name: Any) -> bool: + return object_name and isinstance(object_name, str) + + +def is_legal_privilege(privilege: Any) -> bool: + return privilege and isinstance(privilege, str) + + +def is_legal_collection_properties(properties: Any) -> bool: + return properties and isinstance(properties, dict) + + +def is_legal_operate_privilege_type(operate_privilege_type: Any) -> bool: + return operate_privilege_type in ( + milvus_types.OperatePrivilegeType.Grant, + milvus_types.OperatePrivilegeType.Revoke, + ) + + +def is_legal_privilege_group(privilege_group: Any) -> bool: + return privilege_group and isinstance(privilege_group, str) + + +def is_legal_privileges(privileges: Any) -> bool: + return ( + privileges + and isinstance(privileges, list) + and all(is_legal_privilege(p) for p in privileges) + ) + + +def is_legal_operate_privilege_group_type(operate_privilege_group_type: Any) -> bool: + return operate_privilege_group_type in ( + milvus_types.OperatePrivilegeGroupType.AddPrivilegesToGroup, + milvus_types.OperatePrivilegeGroupType.RemovePrivilegesFromGroup, + ) + + +class ParamChecker(metaclass=Singleton): + def __init__(self) -> None: + self.check_dict = { + "db_name": is_legal_db_name, + "collection_name": is_legal_table_name, + "alias": is_legal_table_name, + "field_name": is_legal_field_name, + "dimension": is_legal_dimension, + "index_file_size": is_legal_index_size, + "topk": is_legal_topk, + "ids": is_legal_ids, + "nprobe": is_legal_nprobe, + "nlist": is_legal_nlist, + "cmd": is_legal_cmd, + "partition_name": is_legal_partition_name, + "partition_name_array": is_legal_partition_name_array, + "limit": is_legal_limit, + "anns_field": is_legal_anns_field, + "search_data": is_legal_search_data, + "output_fields": is_legal_output_fields, + "round_decimal": is_legal_round_decimal, + "guarantee_timestamp": is_legal_guarantee_timestamp, + "user": is_legal_user, + "password": is_legal_password, + "role_name": is_legal_role_name, + "operate_user_role_type": is_legal_operate_user_role_type, + "include_user_info": is_legal_include_user_info, + "include_role_info": is_legal_include_role_info, + "object": is_legal_object, + "object_name": is_legal_object_name, + "privilege": is_legal_privilege, + "operate_privilege_type": is_legal_operate_privilege_type, + "properties": is_legal_collection_properties, + "replica_number": is_legal_replica_number, + "resource_group_name": is_legal_table_name, + "itopk_size": is_legal_itopk_size, + "search_width": is_legal_search_width, + "min_iterations": is_legal_min_iterations, + "max_iterations": is_legal_max_iterations, + "team_size": is_legal_team_size, + "index_name": is_legal_index_name, + "timeout": is_legal_timeout, + "drop_ratio_build": is_legal_drop_ratio, + "drop_ratio_search": is_legal_drop_ratio, + "privilege_group": is_legal_privilege_group, + "privileges": is_legal_privileges, + "operate_privilege_group_type": is_legal_operate_privilege_group_type, + } + + def check(self, key: str, value: Callable): + if key in self.check_dict: + if not self.check_dict[key](value): _raise_param_error(key, value) - # elif key in ("records",): - # if not is_legal_records(value): - # _raise_param_error(key, value) else: - raise ParamError(f"unknown param `{key}`") + raise ParamError(message=f"unknown param `{key}`") + + +def _get_param_checker(): + return ParamChecker() + + +def check_pass_param(*_args: Any, **kwargs: Any) -> None: # pylint: disable=too-many-statements + if kwargs is None: + raise ParamError(message="Param should not be None") + checker = _get_param_checker() + for key, value in kwargs.items(): + checker.check(key, value) diff --git a/pymilvus/client/configs.py b/pymilvus/client/configs.py deleted file mode 100644 index 6b1af6ad2..000000000 --- a/pymilvus/client/configs.py +++ /dev/null @@ -1,4 +0,0 @@ -# TODO(dragondriver): add more default configs to here -class DefaultConfigs: - MaxSearchResultSize = 100 * 1024 * 1024 - WaitTimeDurationWhenLoad = 0.5 # in seconds diff --git a/pymilvus/client/constants.py b/pymilvus/client/constants.py index 117f2aa55..615e0e4ab 100644 --- a/pymilvus/client/constants.py +++ b/pymilvus/client/constants.py @@ -1,7 +1,35 @@ -from ..grpc_gen.common_pb2 import ConsistencyLevel +from pymilvus.grpc_gen import common_pb2 + +ConsistencyLevel = common_pb2.ConsistencyLevel LOGICAL_BITS = 18 LOGICAL_BITS_MASK = (1 << LOGICAL_BITS) - 1 -DEFAULT_GRACEFUL_TIME = 5000 # in ms EVENTUALLY_TS = 1 +BOUNDED_TS = 2 DEFAULT_CONSISTENCY_LEVEL = ConsistencyLevel.Bounded +DEFAULT_RESOURCE_GROUP = "__default_resource_group" +DYNAMIC_FIELD_NAME = "$meta" +REDUCE_STOP_FOR_BEST = "reduce_stop_for_best" +COLLECTION_ID = "collection_id" +GROUP_BY_FIELD = "group_by_field" +GROUP_SIZE = "group_size" +RANK_GROUP_SCORER = "rank_group_scorer" +STRICT_GROUP_SIZE = "strict_group_size" +JSON_PATH = "json_path" +JSON_TYPE = "json_type" +STRICT_CAST = "strict_cast" +ITERATOR_FIELD = "iterator" +ITERATOR_SESSION_TS_FIELD = "iterator_session_ts" +ITER_SEARCH_V2_KEY = "search_iter_v2" +ITER_SEARCH_BATCH_SIZE_KEY = "search_iter_batch_size" +ITER_SEARCH_LAST_BOUND_KEY = "search_iter_last_bound" +ITER_SEARCH_ID_KEY = "search_iter_id" +PAGE_RETAIN_ORDER_FIELD = "page_retain_order" +HINTS = "hints" + +RANKER_TYPE_RRF = "rrf" +RANKER_TYPE_WEIGHTED = "weighted" + +GUARANTEE_TIMESTAMP = "guarantee_timestamp" + +IS_EMBEDDING_LIST = "is_embedding_list" diff --git a/pymilvus/client/embedding_list.py b/pymilvus/client/embedding_list.py new file mode 100644 index 000000000..e694043d1 --- /dev/null +++ b/pymilvus/client/embedding_list.py @@ -0,0 +1,315 @@ +"""EmbeddingList: A container for multiple embeddings for array-of-vector searches.""" + +from typing import Any, List, Optional, Union + +import numpy as np + +from pymilvus.client.types import DataType +from pymilvus.exceptions import ParamError + + +class EmbeddingList: + """ + A container for multiple embeddings that can be used directly in Milvus searches. + Represents a single query containing multiple vectors for array-of-vector fields. + + This is particularly useful for searching struct array fields that contain vectors, + enabling array-of-vector to array-of-vector searches. + + Examples: + >>> # Create empty and add vectors + >>> query1 = EmbeddingList() + >>> query1.add(embedding1) + >>> query1.add(embedding2) + >>> + >>> # Create from list of vectors + >>> vectors = [vec1, vec2, vec3] + >>> query2 = EmbeddingList(vectors) + >>> + >>> # Use in search + >>> results = client.search( + >>> collection_name="my_collection", + >>> data=[query1, query2], # List of EmbeddingList + >>> ... + >>> ) + """ + + def __init__( + self, + embeddings: Optional[Union[List[np.ndarray], np.ndarray]] = None, + dim: Optional[int] = None, + dtype: Optional[Union[np.dtype, str, DataType]] = None, + ): + """ + Initialize an EmbeddingList. + + Args: + embeddings: Initial embeddings. Can be: + - None: Creates an empty list + - np.ndarray with shape (n, dim): Batch of n embeddings + - np.ndarray with shape (dim,): Single embedding + - List[np.ndarray]: List of embedding arrays + dim: Expected dimension for validation (optional). + If provided, all added embeddings will be validated against this dimension. + dtype: Data type of the embeddings (optional). Can be: + - numpy dtype (e.g., np.float32, np.float16, np.uint8) + - string (e.g., 'float32', 'float16', 'uint8') + - DataType enum (e.g., DataType.FLOAT_VECTOR, DataType.BINARY_VECTOR) + If not specified, will infer from the first embedding added. + """ + self._embeddings: List[np.ndarray] = [] + self._dim = dim + self._dtype = self._parse_dtype(dtype) if dtype is not None else None + + if embeddings is not None: + if isinstance(embeddings, np.ndarray): + if embeddings.ndim == 1: + # Single vector + self.add(embeddings) + elif embeddings.ndim == 2: + # Multiple vectors + for i in range(len(embeddings)): + self.add(embeddings[i]) + else: + msg = "Embeddings array must be 1D or 2D" + raise ValueError(msg) + elif isinstance(embeddings, list): + for emb in embeddings: + self.add(emb) + else: + msg = "Embeddings must be numpy array or list" + raise TypeError(msg) + + def _parse_dtype(self, dtype: Union[np.dtype, str, DataType]) -> np.dtype: + """Parse and validate data type.""" + if isinstance(dtype, np.dtype): + return dtype + if isinstance(dtype, str): + return np.dtype(dtype) + if isinstance(dtype, DataType): + # Map DataType enum to numpy dtype + dtype_map = { + DataType.FLOAT_VECTOR: np.float32, + DataType.FLOAT16_VECTOR: np.float16, + DataType.BFLOAT16_VECTOR: np.float16, # Use float16 as approximation + DataType.BINARY_VECTOR: np.uint8, + DataType.INT8_VECTOR: np.int8, + } + if dtype in dtype_map: + return np.dtype(dtype_map[dtype]) + msg = f"Unsupported DataType: {dtype}" + raise ParamError(message=msg) + msg = f"dtype must be numpy dtype, string, or DataType, got {type(dtype)}" + raise TypeError(msg) + + def _infer_dtype(self, array: np.ndarray) -> np.dtype: + """Infer dtype from array, with smart defaults.""" + if array.dtype == np.float64: + # Default double precision to single precision for efficiency + return np.dtype(np.float32) + return array.dtype + + def add(self, embedding: Union[np.ndarray, List[Any]]) -> "EmbeddingList": + """ + Add a single embedding vector to the list. + + Args: + embedding: A single embedding vector (1D array or list) + + Returns: + Self for method chaining + + Raises: + ValueError: If embedding dimension doesn't match existing embeddings + """ + embedding = np.asarray(embedding) + + if embedding.ndim != 1: + msg = f"Embedding must be 1D, got shape {embedding.shape}" + raise ValueError(msg) + + # Validate dimension + if self._embeddings: + if len(embedding) != self.dim: + msg = f"Embedding dimension {len(embedding)} doesn't match existing {self.dim}" + raise ValueError(msg) + elif self._dim is not None and len(embedding) != self._dim: + msg = f"Embedding dimension {len(embedding)} doesn't match expected {self._dim}" + raise ValueError(msg) + + # Handle dtype + if self._dtype is None: + # Infer dtype from first embedding + self._dtype = self._infer_dtype(embedding) + + # Convert to the established dtype + if embedding.dtype != self._dtype: + embedding = embedding.astype(self._dtype) + + self._embeddings.append(embedding) + return self + + def add_batch(self, embeddings: Union[List[np.ndarray], np.ndarray]) -> "EmbeddingList": + """ + Add multiple embeddings at once. + + Args: + embeddings: Batch of embeddings (2D array or list of 1D arrays) + + Returns: + Self for method chaining + + Raises: + ValueError: If embeddings have inconsistent dimensions + """ + if isinstance(embeddings, np.ndarray): + if embeddings.ndim != 2: + msg = f"Batch embeddings must be 2D, got {embeddings.ndim}D" + raise ValueError(msg) + for i in range(len(embeddings)): + self.add(embeddings[i]) + else: + for emb in embeddings: + self.add(emb) + return self + + @classmethod + def _from_random_test( + cls, + num_vectors: int, + dim: int, + dtype: Optional[Union[np.dtype, str, DataType]] = None, + seed: Optional[int] = None, + ) -> "EmbeddingList": + """ + Create an EmbeddingList with random vectors for testing purposes. + + WARNING: This method is intended for testing and demonstration only. + Do not use in production code. + + Args: + num_vectors: Number of random vectors to generate + dim: Dimension of each vector + dtype: Data type of the vectors (default: np.float32) + seed: Random seed for reproducibility + + Returns: + New EmbeddingList with random test vectors + """ + rng = np.random.default_rng(seed) + + # Default dtype to float32 if None + if dtype is None: + dtype = np.dtype(np.float32) + + # Parse dtype if needed + if not isinstance(dtype, np.dtype): + dtype = cls(None, dim=dim, dtype=dtype)._dtype + + # Generate random data based on dtype + if dtype == np.uint8: + # For binary vectors, generate random bits + embeddings = rng.integers(0, 256, size=(num_vectors, dim), dtype=np.uint8) + elif dtype == np.int8: + # For int8 vectors + embeddings = rng.integers(-128, 128, size=(num_vectors, dim), dtype=np.int8) + elif dtype in [np.float16, np.float32, np.float64]: + # For float vectors + embeddings = rng.random((num_vectors, dim)).astype(dtype) + else: + msg = f"Unsupported dtype for random generation: {dtype}" + raise ValueError(msg) + + return cls(embeddings, dim=dim, dtype=dtype) + + def to_flat_array(self) -> np.ndarray: + """ + Convert to flat array format required by Milvus for array-of-vector fields. + + Returns: + Flattened numpy array containing all embeddings concatenated + + Raises: + ValueError: If the list is empty + """ + if not self._embeddings: + msg = "EmbeddingList is empty" + raise ValueError(msg) + # Preserve the dtype of the embeddings + return np.concatenate(self._embeddings) + + def to_numpy(self) -> np.ndarray: + """ + Convert to 2D numpy array. + + Returns: + 2D numpy array with shape (num_embeddings, dim) + + Raises: + ValueError: If the list is empty + """ + if not self._embeddings: + msg = "EmbeddingList is empty" + raise ValueError(msg) + return np.stack(self._embeddings) + + def clear(self) -> "EmbeddingList": + """Clear all embeddings from the list.""" + self._embeddings.clear() + return self + + def __len__(self) -> int: + """Return the number of embeddings in the list.""" + return len(self._embeddings) + + def __getitem__(self, index: int) -> np.ndarray: + """Get embedding at specific index.""" + return self._embeddings[index] + + def __iter__(self): + """Iterate over embeddings.""" + return iter(self._embeddings) + + @property + def dim(self) -> int: + """Dimension of each embedding.""" + if self._embeddings: + return len(self._embeddings[0]) + return self._dim or 0 + + @property + def dtype(self) -> Optional[np.dtype]: + """Data type of the embeddings.""" + return self._dtype + + @property + def shape(self) -> tuple: + """Shape as (num_embeddings, dim).""" + return (len(self), self.dim) + + @property + def total_dim(self) -> int: + """Total dimension of all embeddings combined.""" + return len(self) * self.dim + + @property + def is_empty(self) -> bool: + """Check if the list is empty.""" + return len(self._embeddings) == 0 + + @property + def nbytes(self) -> int: + """Total number of bytes used by all embeddings.""" + if self.is_empty: + return 0 + return sum(emb.nbytes for emb in self._embeddings) + + def __repr__(self) -> str: + dtype_str = f", dtype={self.dtype}" if self.dtype else "" + return f"EmbeddingList(count={len(self)}, dim={self.dim}{dtype_str})" + + def __str__(self) -> str: + if self.is_empty: + return "EmbeddingList(empty)" + dtype_str = f" ({self.dtype})" if self.dtype else "" + return f"EmbeddingList with {len(self)} embeddings of dimension {self.dim}{dtype_str}" diff --git a/pymilvus/client/entity_helper.py b/pymilvus/client/entity_helper.py new file mode 100644 index 000000000..6e0bc7110 --- /dev/null +++ b/pymilvus/client/entity_helper.py @@ -0,0 +1,1267 @@ +import logging +import math +import struct +from typing import Any, Dict, Iterable, List, Optional + +import numpy as np +import orjson + +from pymilvus.exceptions import ( + DataNotMatchException, + ExceptionsMessage, + MilvusException, + ParamError, +) +from pymilvus.grpc_gen import schema_pb2 as schema_types +from pymilvus.settings import Config + +from .types import DataType +from .utils import ( + SciPyHelper, + SparseMatrixInputType, + SparseRowOutputType, + sparse_parse_single_row, +) + +logger = logging.getLogger(__name__) + +CHECK_STR_ARRAY = True + + +def entity_is_sparse_matrix(entity: Any): + if SciPyHelper.is_scipy_sparse(entity): + return True + try: + + def is_type_in_str(v: Any, t: Any): + if not isinstance(v, str): + return False + try: + t(v) + except ValueError: + return False + return True + + def is_int_type(v: Any): + return isinstance(v, (int, np.integer)) or is_type_in_str(v, int) + + def is_float_type(v: Any): + return isinstance(v, (float, np.floating)) or is_type_in_str(v, float) + + # must be of multiple rows + if len(entity) == 0: + return False + for item in entity: + if SciPyHelper.is_scipy_sparse(item): + return item.shape[0] == 1 + if not isinstance(item, dict) and not isinstance(item, list): + return False + pairs = item.items() if isinstance(item, dict) else item + # each row must be a list of Tuple[int, float]. we allow empty sparse row + for pair in pairs: + if len(pair) != 2 or not is_int_type(pair[0]) or not is_float_type(pair[1]): + return False + except Exception: + return False + return True + + +# converts supported sparse matrix to schemapb.SparseFloatArray proto +def sparse_rows_to_proto(data: SparseMatrixInputType) -> schema_types.SparseFloatArray: + # converts a sparse float vector to plain bytes. the format is the same as how + # milvus interprets/persists the data. + def sparse_float_row_to_bytes(indices: Iterable[int], values: Iterable[float]): + if len(indices) != len(values): + raise ParamError( + message=f"length of indices and values must be the same, got {len(indices)} and {len(values)}" + ) + data = b"" + for i, v in sorted(zip(indices, values), key=lambda x: x[0]): + if not (0 <= i < 2**32 - 1): + raise ParamError( + message=f"sparse vector index must be positive and less than 2^32-1: {i}" + ) + if math.isnan(v): + raise ParamError(message="sparse vector value must not be NaN") + data += struct.pack("I", i) + data += struct.pack("f", v) + return data + + if not entity_is_sparse_matrix(data): + raise ParamError(message="input must be a sparse matrix in supported format") + + result = schema_types.SparseFloatArray() + + if SciPyHelper.is_scipy_sparse(data): + csr = data.tocsr() + result.dim = csr.shape[1] + for start, end in zip(csr.indptr[:-1], csr.indptr[1:]): + result.contents.append( + sparse_float_row_to_bytes(csr.indices[start:end], csr.data[start:end]) + ) + else: + dim = 0 + for _, row_data in enumerate(data): + if SciPyHelper.is_scipy_sparse(row_data): + if row_data.shape[0] != 1: + raise ParamError(message="invalid input for sparse float vector: expect 1 row") + dim = max(dim, row_data.shape[1]) + result.contents.append(sparse_float_row_to_bytes(row_data.indices, row_data.data)) + else: + indices = [] + values = [] + row = row_data.items() if isinstance(row_data, dict) else row_data + for index, value in row: + indices.append(int(index)) + values.append(float(value)) + result.contents.append(sparse_float_row_to_bytes(indices, values)) + row_dim = 0 + if len(indices) > 0: + row_dim = indices[-1] + 1 + dim = max(dim, row_dim) + result.dim = dim + return result + + +# converts schema_types.SparseFloatArray proto to Iterable[SparseRowOutputType] +def sparse_proto_to_rows( + sfv: schema_types.SparseFloatArray, start: Optional[int] = None, end: Optional[int] = None +) -> Iterable[SparseRowOutputType]: + if not isinstance(sfv, schema_types.SparseFloatArray): + raise ParamError(message="Vector must be a sparse float vector") + start = start or 0 + end = end or len(sfv.contents) + return [sparse_parse_single_row(row_bytes) for row_bytes in sfv.contents[start:end]] + + +def get_input_num_rows(entity: Any) -> int: + if SciPyHelper.is_scipy_sparse(entity): + return entity.shape[0] + return len(entity) + + +def entity_type_to_dtype(entity_type: Any): + if isinstance(entity_type, int): + return entity_type + if isinstance(entity_type, str): + # case sensitive + return schema_types.DataType.Value(entity_type) + raise ParamError(message=f"invalid entity type: {entity_type}") + + +def get_max_len_of_var_char(field_info: Dict) -> int: + k = Config.MaxVarCharLengthKey + v = Config.MaxVarCharLength + return field_info.get("params", {}).get(k, v) + + +def convert_to_str_array(orig_str_arr: Any, field_info: Dict, check: bool = True): + arr = [] + if Config.EncodeProtocol.lower() != "utf-8".lower(): + for s in orig_str_arr: + arr.append(s.encode(Config.EncodeProtocol)) + else: + arr = orig_str_arr + max_len = int(get_max_len_of_var_char(field_info)) + if check: + for s in arr: + if not isinstance(s, str): + raise ParamError( + message=f"field ({field_info['name']}) expects string input, got: {type(s)}" + ) + if len(s) > max_len: + raise ParamError( + message=f"invalid input of field ({field_info['name']}), " + f"length of string exceeds max length. length: {len(s)}, max length: {max_len}" + ) + return arr + + +def entity_to_str_arr(entity_values: Any, field_info: Any, check: bool = True): + return convert_to_str_array(entity_values, field_info, check=check) + + +def convert_to_json(obj: object): + def preprocess_numpy_types(obj: Any): + if isinstance(obj, dict): + return {k: preprocess_numpy_types(v) for k, v in obj.items()} + if isinstance(obj, list): + return [preprocess_numpy_types(item) for item in obj] + if isinstance(obj, np.ndarray): + return obj.tolist() + if isinstance(obj, np.integer): + return int(obj) + if isinstance(obj, np.floating): + return float(obj) + if isinstance(obj, np.bool_): + return bool(obj) + return obj + + # Handle JSON string input + if isinstance(obj, str): + try: + # Validate JSON string by parsing it + parsed_obj = orjson.loads(obj) + # If it's a valid JSON string, validate dict keys if it's a dict + if isinstance(parsed_obj, dict): + for k in parsed_obj: + if not isinstance(k, str): + raise DataNotMatchException(message=ExceptionsMessage.JSONKeyMustBeStr) + # Return the original string encoded as bytes (since it's already valid JSON) + return obj.encode(Config.EncodeProtocol) + except Exception as e: + # Truncate the string if it's too long for better readability + max_len = 200 + json_str_display = obj if len(obj) <= max_len else obj[:max_len] + "..." + raise DataNotMatchException( + message=f"Invalid JSON string: {e!s}. Input string: {json_str_display!r}" + ) from e + + # Handle dict input + if isinstance(obj, dict): + for k in obj: + if not isinstance(k, str): + raise DataNotMatchException(message=ExceptionsMessage.JSONKeyMustBeStr) + + processed_obj = preprocess_numpy_types(obj) + + return orjson.dumps(processed_obj) + + +def convert_to_json_arr(objs: List[object], field_info: Any): + arr = [] + for obj in objs: + if obj is None: + raise ParamError(message=f"field ({field_info['name']}) expects a non-None input") + arr.append(convert_to_json(obj)) + return arr + + +def entity_to_json_arr(entity_values: Dict, field_info: Any): + return convert_to_json_arr(entity_values, field_info) + + +def convert_to_array_arr(objs: List[Any], field_info: Any): + return [convert_to_array(obj, field_info) for obj in objs] + + +def convert_to_array(obj: List[Any], field_info: Any): + # Convert numpy ndarray to list if needed + if isinstance(obj, np.ndarray): + obj = obj.tolist() + + field_data = schema_types.ScalarField() + element_type = field_info.get("element_type", None) + if element_type == DataType.BOOL: + field_data.bool_data.data.extend(obj) + return field_data + if element_type in (DataType.INT8, DataType.INT16, DataType.INT32): + field_data.int_data.data.extend(obj) + return field_data + if element_type == DataType.INT64: + field_data.long_data.data.extend(obj) + return field_data + if element_type == DataType.FLOAT: + field_data.float_data.data.extend(obj) + return field_data + if element_type == DataType.DOUBLE: + field_data.double_data.data.extend(obj) + return field_data + if element_type in (DataType.VARCHAR, DataType.STRING): + field_data.string_data.data.extend(obj) + return field_data + raise ParamError( + message=f"Unsupported element type: {element_type} for Array field: {field_info.get('name')}" + ) + + +def convert_to_array_of_vector(obj: List[Any], field_info: Any): + # Create a single VectorField that contains all vectors flattened + field_data = schema_types.VectorField() + element_type = field_info.get("element_type", None) + + dim_value = field_info.get("params", {}).get("dim", 0) + if isinstance(dim_value, str): + dim_value = int(dim_value) + field_data.dim = dim_value + + if element_type == DataType.FLOAT_VECTOR: + if not obj: + field_data.float_vector.data.extend([]) + for field_value in obj: + f_value = field_value + if isinstance(field_value, np.ndarray): + if field_value.dtype not in ("float32", "float64"): + raise ParamError( + message="invalid input for float32 vector. Expected an np.ndarray with dtype=float32" + ) + f_value = field_value.tolist() + field_data.float_vector.data.extend(f_value) + + else: + # todo(SpadeA): other types are now not supported. When it's supported, make sure empty + # array is handled correctly. + raise ParamError( + message=f"Unsupported element type: {element_type} for Array of Vector field: {field_info.get('name')}" + ) + return field_data + + +def entity_to_array_arr(entity_values: List[Any], field_info: Any): + return convert_to_array_arr(entity_values, field_info) + + +def pack_field_value_to_field_data( + field_value: Any, field_data: schema_types.FieldData, field_info: Any +): + field_type = field_data.type + field_name = field_info["name"] + if field_type == DataType.BOOL: + try: + if field_value is None: + field_data.scalars.bool_data.data.extend([]) + else: + field_data.scalars.bool_data.data.append(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "bool", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type in (DataType.INT8, DataType.INT16, DataType.INT32): + try: + # need to extend it, or cannot correctly identify field_data.scalars.int_data.data + if field_value is None: + field_data.scalars.int_data.data.extend([]) + else: + field_data.scalars.int_data.data.append(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "int", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.INT64: + try: + if field_value is None: + field_data.scalars.long_data.data.extend([]) + else: + field_data.scalars.long_data.data.append(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "int64", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.FLOAT: + try: + if field_value is None: + field_data.scalars.float_data.data.extend([]) + else: + field_data.scalars.float_data.data.append(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "float", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.DOUBLE: + try: + if field_value is None: + field_data.scalars.double_data.data.extend([]) + else: + field_data.scalars.double_data.data.append(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "double", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.TIMESTAMPTZ: + try: + if field_value is None: + field_data.scalars.string_data.data.extend([]) # Timestamptz is passed as String + else: + field_data.scalars.string_data.data.append(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "string", type(field_value)) + ) from e + elif field_type == DataType.FLOAT_VECTOR: + try: + f_value = field_value + if isinstance(field_value, np.ndarray): + if field_value.dtype not in ("float32", "float64"): + raise ParamError( + message="invalid input for float32 vector. Expected an np.ndarray with dtype=float32" + ) + f_value = field_value.tolist() + + field_data.vectors.dim = len(f_value) + field_data.vectors.float_vector.data.extend(f_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "float_vector", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.BINARY_VECTOR: + try: + field_data.vectors.dim = len(field_value) * 8 + field_data.vectors.binary_vector += bytes(field_value) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "binary_vector", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.FLOAT16_VECTOR: + try: + if isinstance(field_value, bytes): + v_bytes = field_value + elif isinstance(field_value, np.ndarray): + if field_value.dtype != "float16": + raise ParamError( + message="invalid input for float16 vector. Expected an np.ndarray with dtype=float16" + ) + v_bytes = field_value.view(np.uint8).tobytes() + else: + raise ParamError( + message="invalid input type for float16 vector. Expected an np.ndarray with dtype=float16" + ) + + field_data.vectors.dim = len(v_bytes) // 2 + field_data.vectors.float16_vector += v_bytes + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "float16_vector", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.BFLOAT16_VECTOR: + try: + if isinstance(field_value, bytes): + v_bytes = field_value + elif isinstance(field_value, np.ndarray): + if field_value.dtype != "bfloat16": + raise ParamError( + message="invalid input for bfloat16 vector. Expected an np.ndarray with dtype=bfloat16" + ) + v_bytes = field_value.view(np.uint8).tobytes() + else: + raise ParamError( + message="invalid input type for bfloat16 vector. Expected an np.ndarray with dtype=bfloat16" + ) + + field_data.vectors.dim = len(v_bytes) // 2 + field_data.vectors.bfloat16_vector += v_bytes + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "bfloat16_vector", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.SPARSE_FLOAT_VECTOR: + try: + if not SciPyHelper.is_scipy_sparse(field_value): + field_value = [field_value] + elif field_value.shape[0] != 1: + raise ParamError(message="invalid input for sparse float vector: expect 1 row") + if not entity_is_sparse_matrix(field_value): + raise ParamError(message="invalid input for sparse float vector") + field_data.vectors.sparse_float_vector.contents.append( + sparse_rows_to_proto(field_value).contents[0] + ) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "sparse_float_vector", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.INT8_VECTOR: + try: + if isinstance(field_value, np.ndarray): + if field_value.dtype != "int8": + raise ParamError( + message="invalid input for int8 vector. Expected an np.ndarray with dtype=int8" + ) + i_bytes = field_value.view(np.int8).tobytes() + else: + raise ParamError( + message="invalid input for int8 vector. Expected an np.ndarray with dtype=int8" + ) + + field_data.vectors.dim = len(i_bytes) + field_data.vectors.int8_vector += i_bytes + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "int8_vector", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.VARCHAR: + try: + if field_value is None: + field_data.scalars.string_data.data.extend([]) + else: + field_data.scalars.string_data.data.append( + convert_to_str_array(field_value, field_info, CHECK_STR_ARRAY) + ) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "varchar", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.GEOMETRY: + try: + if field_value is None: + field_data.scalars.geometry_wkt_data.data.extend([]) + else: + field_data.scalars.geometry_wkt_data.data.append( + convert_to_str_array(field_value, field_info, CHECK_STR_ARRAY) + ) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "geometry", type(field_value)) + ) from e + elif field_type == DataType.JSON: + try: + if field_value is None: + field_data.scalars.json_data.data.extend([]) + else: + field_data.scalars.json_data.data.append(convert_to_json(field_value)) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "json", type(field_value)) + + f" Detail: {e!s}" + ) from e + elif field_type == DataType.ARRAY: + try: + if field_value is None: + field_data.scalars.array_data.data.extend([]) + else: + field_data.scalars.array_data.data.append(convert_to_array(field_value, field_info)) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, "array", type(field_value)) + + f" Detail: {e!s}" + ) from e + else: + raise ParamError(message=f"Unsupported data type: {field_type}") + + +# Don't change entity inside. +def entity_to_field_data(entity: Dict, field_info: Any, num_rows: int) -> schema_types.FieldData: + entity_type = entity.get("type") + field_name = entity.get("name") + entity_values = entity.get("values") + field_data = schema_types.FieldData( + type=entity_type_to_dtype(entity_type), + field_name=field_name, + ) + + valid_data = [] + if field_info.get("nullable", False) or field_info.get("default_value", None): + if len(entity_values) == 0: + valid_data = [False] * num_rows + else: + valid_data = [value is not None for value in entity_values] + entity_values = [value for value in entity_values if value is not None] + + field_data.valid_data.extend(valid_data) + + try: + if entity_type == DataType.BOOL: + field_data.scalars.bool_data.data.extend(entity_values) + elif entity_type in (DataType.INT8, DataType.INT16, DataType.INT32): + field_data.scalars.int_data.data.extend(entity_values) + elif entity_type == DataType.INT64: + field_data.scalars.long_data.data.extend(entity_values) + elif entity_type == DataType.FLOAT: + field_data.scalars.float_data.data.extend(entity_values) + elif entity_type == DataType.DOUBLE: + field_data.scalars.double_data.data.extend(entity_values) + + elif entity_type == DataType.FLOAT_VECTOR: + # TODO: get dimension from field_info + field_data.vectors.dim = len(entity_values[0]) + all_floats = [f for vector in entity_values for f in vector] + field_data.vectors.float_vector.data.extend(all_floats) + elif entity_type == DataType.BINARY_VECTOR: + field_data.vectors.dim = len(entity_values[0]) * 8 + field_data.vectors.binary_vector = b"".join(entity_values) + elif entity_type == DataType.FLOAT16_VECTOR: + field_data.vectors.dim = len(entity_values[0]) // 2 + field_data.vectors.float16_vector = b"".join(entity_values) + elif entity_type == DataType.BFLOAT16_VECTOR: + field_data.vectors.dim = len(entity_values[0]) // 2 + field_data.vectors.bfloat16_vector = b"".join(entity_values) + elif entity_type == DataType.SPARSE_FLOAT_VECTOR: + field_data.vectors.sparse_float_vector.CopyFrom(sparse_rows_to_proto(entity_values)) + elif entity_type == DataType.INT8_VECTOR: + field_data.vectors.dim = len(entity_values[0]) + field_data.vectors.int8_vector = b"".join(entity_values) + + elif entity_type == DataType.VARCHAR: + field_data.scalars.string_data.data.extend( + entity_to_str_arr(entity_values, field_info, CHECK_STR_ARRAY) + ) + elif entity_type == DataType.JSON: + field_data.scalars.json_data.data.extend(entity_to_json_arr(entity_values, field_info)) + elif entity_type == DataType.ARRAY: + field_data.scalars.array_data.data.extend( + entity_to_array_arr(entity_values, field_info) + ) + elif entity_type == DataType.GEOMETRY: + field_data.scalars.geometry_wkt_data.data.extend( + entity_to_str_arr(entity_values, field_info, CHECK_STR_ARRAY) + ) + else: + raise ParamError(message=f"Unsupported data type: {entity_type}") + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=ExceptionsMessage.FieldDataInconsistent + % (field_name, entity_type.name, type(entity_values[0])) + + f" Detail: {e!s}" + ) from e + return field_data + + +def extract_dynamic_field_from_result(raw: Any): + dynamic_field_name = None + field_names = set() + if raw.fields_data: + for field_data in raw.fields_data: + field_names.add(field_data.field_name) + if field_data.is_dynamic: + dynamic_field_name = field_data.field_name + + dynamic_fields = set() + for name in raw.output_fields: + if name == dynamic_field_name: + dynamic_fields.clear() + break + if name not in field_names: + dynamic_fields.add(name) + return dynamic_field_name, dynamic_fields + + +def extract_array_row_data_with_validity(field_data: Any, entity_rows: List[Dict], row_count: int): + field_name = field_data.field_name + data = field_data.scalars.array_data.data + element_type = field_data.scalars.array_data.element_type + if element_type == DataType.INT64: + [ + entity_rows[i].__setitem__( + field_name, data[i].long_data.data if field_data.valid_data[i] else None + ) + for i in range(row_count) + ] + elif element_type == DataType.BOOL: + [ + entity_rows[i].__setitem__( + field_name, data[i].bool_data.data if field_data.valid_data[i] else None + ) + for i in range(row_count) + ] + elif element_type in ( + DataType.INT8, + DataType.INT16, + DataType.INT32, + ): + [ + entity_rows[i].__setitem__( + field_name, data[i].int_data.data if field_data.valid_data[i] else None + ) + for i in range(row_count) + ] + elif element_type == DataType.FLOAT: + [ + entity_rows[i].__setitem__( + field_name, data[i].float_data.data if field_data.valid_data[i] else None + ) + for i in range(row_count) + ] + elif element_type == DataType.DOUBLE: + [ + entity_rows[i].__setitem__( + field_name, data[i].double_data.data if field_data.valid_data[i] else None + ) + for i in range(row_count) + ] + elif element_type in ( + DataType.STRING, + DataType.VARCHAR, + ): + [ + entity_rows[i].__setitem__( + field_name, data[i].string_data.data if field_data.valid_data[i] else None + ) + for i in range(row_count) + ] + else: + raise MilvusException(message=f"Unsupported data type: {element_type}") + + +def extract_array_row_data_no_validity(field_data: Any, entity_rows: List[Dict], row_count: int): + field_name = field_data.field_name + data = field_data.scalars.array_data.data + element_type = field_data.scalars.array_data.element_type + if element_type == DataType.INT64: + [entity_rows[i].__setitem__(field_name, data[i].long_data.data) for i in range(row_count)] + elif element_type == DataType.BOOL: + [entity_rows[i].__setitem__(field_name, data[i].bool_data.data) for i in range(row_count)] + elif element_type in ( + DataType.INT8, + DataType.INT16, + DataType.INT32, + ): + [entity_rows[i].__setitem__(field_name, data[i].int_data.data) for i in range(row_count)] + elif element_type == DataType.FLOAT: + [entity_rows[i].__setitem__(field_name, data[i].float_data.data) for i in range(row_count)] + elif element_type == DataType.DOUBLE: + [entity_rows[i].__setitem__(field_name, data[i].double_data.data) for i in range(row_count)] + elif element_type in ( + DataType.STRING, + DataType.VARCHAR, + ): + [entity_rows[i].__setitem__(field_name, data[i].string_data.data) for i in range(row_count)] + else: + raise MilvusException(message=f"Unsupported data type: {element_type}") + + +def extract_array_row_data(field_data: Any, index: int): + array = field_data.scalars.array_data.data[index] + if field_data.scalars.array_data.element_type == DataType.INT64: + return array.long_data.data + if field_data.scalars.array_data.element_type == DataType.BOOL: + return array.bool_data.data + if field_data.scalars.array_data.element_type in ( + DataType.INT8, + DataType.INT16, + DataType.INT32, + ): + return array.int_data.data + if field_data.scalars.array_data.element_type == DataType.FLOAT: + return array.float_data.data + if field_data.scalars.array_data.element_type == DataType.DOUBLE: + return array.double_data.data + if field_data.scalars.array_data.element_type in ( + DataType.STRING, + DataType.VARCHAR, + ): + return array.string_data.data + return None + + +def extract_row_data_from_fields_data_v2( + field_data: Any, + entity_rows: List[Dict], +) -> bool: + row_count = len(entity_rows) + has_valid = len(field_data.valid_data) > 0 + field_name = field_data.field_name + valid_data = field_data.valid_data + + def assign_scalar(data: List[Any]) -> None: + if has_valid: + [ + entity_rows[i].__setitem__(field_name, None if not valid_data[i] else data[i]) + for i in range(row_count) + ] + else: + [entity_rows[i].__setitem__(field_name, data[i]) for i in range(row_count)] + + if field_data.type == DataType.BOOL: + data = field_data.scalars.bool_data.data + assign_scalar(data) + return False + + if field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32): + data = field_data.scalars.int_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.INT64: + data = field_data.scalars.long_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.FLOAT: + data = field_data.scalars.float_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.DOUBLE: + data = field_data.scalars.double_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.TIMESTAMPTZ: + data = field_data.scalars.string_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.VARCHAR: + data = field_data.scalars.string_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.GEOMETRY: + data = field_data.scalars.geometry_wkt_data.data + assign_scalar(data) + return False + + if field_data.type == DataType.JSON: + return True + + if field_data.type == DataType.ARRAY: + if has_valid: + extract_array_row_data_with_validity(field_data, entity_rows, row_count) + else: + extract_array_row_data_no_validity(field_data, entity_rows, row_count) + return False + if field_data.type in ( + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.BINARY_VECTOR, + DataType.SPARSE_FLOAT_VECTOR, + DataType.INT8_VECTOR, + ): + return True + if field_data.type == DataType._ARRAY_OF_STRUCT: + return True + if field_data.type == DataType._ARRAY_OF_VECTOR: + return True + if field_data.type == DataType.STRING: + raise MilvusException(message="Not support string yet") + return False + + +def extract_vector_array_row_data(field_data: Any, index: int): + array = field_data.vectors.vector_array.data[index] + element_type = field_data.vectors.vector_array.element_type + + if element_type == DataType.FLOAT_VECTOR: + return list(np.array(array.float_vector.data, dtype=np.float32)) + + if element_type == DataType.FLOAT16_VECTOR: + byte_data = array.float16_vector + return list(np.frombuffer(byte_data, dtype=np.float16)) + + if element_type == DataType.BFLOAT16_VECTOR: + byte_data = array.bfloat16_vector + return list( + np.frombuffer(byte_data, dtype="bfloat16" if hasattr(np, "bfloat16") else np.uint16) + ) + + if element_type == DataType.INT8_VECTOR: + byte_data = array.int8_vector + return list(np.frombuffer(byte_data, dtype=np.int8)) + + if element_type == DataType.BINARY_VECTOR: + return [array.binary_vector] + + raise ParamError(message=f"Unimplemented type: {element_type} for vector array extraction") + + +# pylint: disable=R1702 (too-many-nested-blocks) +# pylint: disable=R0915 (too-many-statements) +def extract_row_data_from_fields_data( + fields_data: Any, + index: Any, + dynamic_output_fields: Optional[List] = None, +): + if not fields_data: + return {} + + entity_row_data = {} + dynamic_fields = dynamic_output_fields or set() + + def check_append(field_data: Any, row_data: Dict): + if field_data.type == DataType.STRING: + raise MilvusException(message="Not support string yet") + + if field_data.type == DataType.BOOL and len(field_data.scalars.bool_data.data) >= index: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = field_data.scalars.bool_data.data[index] + return + + if ( + field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32) + and len(field_data.scalars.int_data.data) >= index + ): + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = field_data.scalars.int_data.data[index] + return + + if field_data.type == DataType.INT64 and len(field_data.scalars.long_data.data) >= index: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = field_data.scalars.long_data.data[index] + return + + if field_data.type == DataType.FLOAT and len(field_data.scalars.float_data.data) >= index: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = np.single(field_data.scalars.float_data.data[index]) + return + + if field_data.type == DataType.DOUBLE and len(field_data.scalars.double_data.data) >= index: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = field_data.scalars.double_data.data[index] + return + + if ( + field_data.type == DataType.VARCHAR + and len(field_data.scalars.string_data.data) >= index + ): + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = field_data.scalars.string_data.data[index] + return + + if ( + field_data.type == DataType.GEOMETRY + and len(field_data.scalars.geometry_wkt_data.data) >= index + ): + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + entity_row_data[field_data.field_name] = None + return + entity_row_data[field_data.field_name] = field_data.scalars.geometry_wkt_data.data[ + index + ] + return + + if field_data.type == DataType.JSON and len(field_data.scalars.json_data.data) >= index: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + try: + json_dict = orjson.loads(field_data.scalars.json_data.data[index]) + except Exception as e: + logger.error( + f"extract_row_data_from_fields_data::Failed to load JSON data: {e}, original data: {field_data.scalars.json_data.data[index]}" + ) + raise + + if not field_data.is_dynamic: + row_data[field_data.field_name] = json_dict + return + + if not dynamic_fields: + row_data.update(json_dict) + return + + row_data.update({k: v for k, v in json_dict.items() if k in dynamic_fields}) + return + if field_data.type == DataType.ARRAY and len(field_data.scalars.array_data.data) >= index: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + row_data[field_data.field_name] = extract_array_row_data(field_data, index) + + elif field_data.type == DataType.FLOAT_VECTOR: + dim = field_data.vectors.dim + if len(field_data.vectors.float_vector.data) >= index * dim: + start_pos, end_pos = index * dim, (index + 1) * dim + # Here we use numpy.array to convert the float64 values to numpy.float32 values, + # and return a list of numpy.float32 to users + # By using numpy.array, performance improved by 60% for topk=16384 dim=1536 case. + arr = np.array( + field_data.vectors.float_vector.data[start_pos:end_pos], dtype=np.float32 + ) + row_data[field_data.field_name] = list(arr) + elif field_data.type == DataType.BINARY_VECTOR: + dim = field_data.vectors.dim + if len(field_data.vectors.binary_vector) >= index * (dim // 8): + start_pos, end_pos = index * (dim // 8), (index + 1) * (dim // 8) + row_data[field_data.field_name] = [ + field_data.vectors.binary_vector[start_pos:end_pos] + ] + elif field_data.type == DataType.BFLOAT16_VECTOR: + dim = field_data.vectors.dim + if len(field_data.vectors.bfloat16_vector) >= index * (dim * 2): + start_pos, end_pos = index * (dim * 2), (index + 1) * (dim * 2) + row_data[field_data.field_name] = [ + field_data.vectors.bfloat16_vector[start_pos:end_pos] + ] + elif field_data.type == DataType.FLOAT16_VECTOR: + dim = field_data.vectors.dim + if len(field_data.vectors.float16_vector) >= index * (dim * 2): + start_pos, end_pos = index * (dim * 2), (index + 1) * (dim * 2) + row_data[field_data.field_name] = [ + field_data.vectors.float16_vector[start_pos:end_pos] + ] + elif field_data.type == DataType.SPARSE_FLOAT_VECTOR: + row_data[field_data.field_name] = sparse_parse_single_row( + field_data.vectors.sparse_float_vector.contents[index] + ) + elif field_data.type == DataType.INT8_VECTOR: + dim = field_data.vectors.dim + if len(field_data.vectors.int8_vector) >= index * dim: + start_pos, end_pos = index * dim, (index + 1) * dim + row_data[field_data.field_name] = [ + field_data.vectors.int8_vector[start_pos:end_pos] + ] + elif ( + field_data.type == DataType._ARRAY_OF_VECTOR + and len(field_data.vectors.vector_array.data) >= index + ): + row_data[field_data.field_name] = extract_vector_array_row_data(field_data, index) + elif field_data.type == DataType._ARRAY_OF_STRUCT: + row_data[field_data.field_name] = {} + for sub_field_data in field_data.struct_arrays.fields: + check_append(sub_field_data, row_data[field_data.field_name]) + + for field_data in fields_data: + check_append(field_data, entity_row_data) + + return entity_row_data + + +def get_array_length(array_item: Any) -> int: + """Get the length of an array field from its data.""" + if hasattr(array_item, "string_data") and hasattr(array_item.string_data, "data"): + length = len(array_item.string_data.data) + if length > 0: + return length + if hasattr(array_item, "int_data") and hasattr(array_item.int_data, "data"): + length = len(array_item.int_data.data) + if length > 0: + return length + if hasattr(array_item, "long_data") and hasattr(array_item.long_data, "data"): + length = len(array_item.long_data.data) + if length > 0: + return length + if hasattr(array_item, "float_data") and hasattr(array_item.float_data, "data"): + length = len(array_item.float_data.data) + if length > 0: + return length + if hasattr(array_item, "double_data") and hasattr(array_item.double_data, "data"): + length = len(array_item.double_data.data) + if length > 0: + return length + if hasattr(array_item, "bool_data") and hasattr(array_item.bool_data, "data"): + length = len(array_item.bool_data.data) + if length > 0: + return length + return 0 + + +def get_array_value_at_index(array_item: Any, idx: int) -> Any: + """Get the value at a specific index from an array field.""" + if ( + hasattr(array_item, "string_data") + and hasattr(array_item.string_data, "data") + and len(array_item.string_data.data) > idx + ): + return array_item.string_data.data[idx] + if ( + hasattr(array_item, "int_data") + and hasattr(array_item.int_data, "data") + and len(array_item.int_data.data) > idx + ): + return array_item.int_data.data[idx] + if ( + hasattr(array_item, "long_data") + and hasattr(array_item.long_data, "data") + and len(array_item.long_data.data) > idx + ): + return array_item.long_data.data[idx] + if ( + hasattr(array_item, "float_data") + and hasattr(array_item.float_data, "data") + and len(array_item.float_data.data) > idx + ): + return array_item.float_data.data[idx] + if ( + hasattr(array_item, "double_data") + and hasattr(array_item.double_data, "data") + and len(array_item.double_data.data) > idx + ): + return array_item.double_data.data[idx] + if ( + hasattr(array_item, "bool_data") + and hasattr(array_item.bool_data, "data") + and len(array_item.bool_data.data) > idx + ): + return array_item.bool_data.data[idx] + return None + + +def extract_struct_array_from_column_data(struct_arrays: Any, row_idx: int) -> List[Dict[str, Any]]: + """Convert column-format struct data back to array of structs format. + + Milvus stores struct arrays in column format where each field's data is stored separately. + This function converts it back to row format for user consumption. + + For example, if the original one row of array of struct data was: + [ + {"name": "Alice", "age": 30, "vector": [1.0, 2.0]}, + {"name": "Bob", "age": 25, "vector": [3.0, 4.0]} + ] + + Milvus stores it as: + - name field: ["Alice", "Bob"] + - age field: [30, 25] + - vector field: [[1.0, 2.0], [3.0, 4.0]] + + This function reconstructs the original array of struct format. + + Args: + struct_arrays: The struct_arrays field containing column-format data with sub-fields + row_idx: The row index to extract data for + + Returns: + List of dictionaries representing the struct array in row format + """ + if not struct_arrays or not hasattr(struct_arrays, "fields"): + return [] + + # Determine the number of struct elements by checking the first sub-field's data length + # All sub-fields should have the same number of elements + num_structs = 0 + for sub_field in struct_arrays.fields: + if sub_field.type == DataType.ARRAY and row_idx < len(sub_field.scalars.array_data.data): + array_item = sub_field.scalars.array_data.data[row_idx] + num_structs = get_array_length(array_item) + if num_structs > 0: + break + elif sub_field.type == DataType._ARRAY_OF_VECTOR: + if ( + hasattr(sub_field, "vectors") + and hasattr(sub_field.vectors, "vector_array") + and row_idx < len(sub_field.vectors.vector_array.data) + ): + vector_data = sub_field.vectors.vector_array.data[row_idx] + dim = vector_data.dim + element_type = sub_field.vectors.vector_array.element_type + + if element_type == DataType.FLOAT_VECTOR: + num_structs = len(vector_data.float_vector.data) // dim + elif element_type == DataType.FLOAT16_VECTOR: + num_structs = len(vector_data.float16_vector) // (dim * 2) + elif element_type == DataType.BFLOAT16_VECTOR: + num_structs = len(vector_data.bfloat16_vector) // (dim * 2) + elif element_type == DataType.INT8_VECTOR: + num_structs = len(vector_data.int8_vector) // dim + elif element_type == DataType.BINARY_VECTOR: + num_structs = len(vector_data.binary_vector) // (dim // 8) + else: + num_structs = 0 + + if num_structs > 0: + break + + # Build array of struct objects by extracting data at each struct index + struct_array = [] + for struct_idx in range(num_structs): + struct_obj = {} + + for sub_field in struct_arrays.fields: + sub_field_name = sub_field.field_name + + # Handle scalar array fields (VARCHAR, INT, FLOAT, etc.) + if sub_field.type == DataType.ARRAY: + if row_idx < len(sub_field.scalars.array_data.data): + array_item = sub_field.scalars.array_data.data[row_idx] + # Extract the value at struct_idx from the appropriate data type + struct_obj[sub_field_name] = get_array_value_at_index(array_item, struct_idx) + + elif sub_field.type == DataType._ARRAY_OF_VECTOR: + if hasattr(sub_field, "vectors") and hasattr(sub_field.vectors, "vector_array"): + vector_array = sub_field.vectors.vector_array + if row_idx < len(vector_array.data): + vector_data = vector_array.data[row_idx] + dim = vector_data.dim + element_type = vector_array.element_type + + if element_type == DataType.FLOAT_VECTOR: + float_data = vector_data.float_vector.data + vec_start = struct_idx * dim + vec_end = vec_start + dim + if vec_end <= len(float_data): + struct_obj[sub_field_name] = list(float_data[vec_start:vec_end]) + else: + struct_obj[sub_field_name] = None + + elif element_type == DataType.FLOAT16_VECTOR: + byte_data = vector_data.float16_vector + bytes_per_vec = dim * 2 + vec_start = struct_idx * bytes_per_vec + vec_end = vec_start + bytes_per_vec + if vec_end <= len(byte_data): + vec_bytes = byte_data[vec_start:vec_end] + struct_obj[sub_field_name] = list( + np.frombuffer(vec_bytes, dtype=np.float16) + ) + else: + struct_obj[sub_field_name] = None + + elif element_type == DataType.BFLOAT16_VECTOR: + byte_data = vector_data.bfloat16_vector + bytes_per_vec = dim * 2 + vec_start = struct_idx * bytes_per_vec + vec_end = vec_start + bytes_per_vec + if vec_end <= len(byte_data): + vec_bytes = byte_data[vec_start:vec_end] + dtype = "bfloat16" if hasattr(np, "bfloat16") else np.uint16 + struct_obj[sub_field_name] = list( + np.frombuffer(vec_bytes, dtype=dtype) + ) + else: + struct_obj[sub_field_name] = None + + elif element_type == DataType.INT8_VECTOR: + byte_data = vector_data.int8_vector + bytes_per_vec = dim + vec_start = struct_idx * bytes_per_vec + vec_end = vec_start + bytes_per_vec + if vec_end <= len(byte_data): + vec_bytes = byte_data[vec_start:vec_end] + struct_obj[sub_field_name] = list( + np.frombuffer(vec_bytes, dtype=np.int8) + ) + else: + struct_obj[sub_field_name] = None + + elif element_type == DataType.BINARY_VECTOR: + byte_data = vector_data.binary_vector + bytes_per_vec = dim // 8 + vec_start = struct_idx * bytes_per_vec + vec_end = vec_start + bytes_per_vec + if vec_end <= len(byte_data): + struct_obj[sub_field_name] = [byte_data[vec_start:vec_end]] + else: + struct_obj[sub_field_name] = None + else: + # Unsupported vector type, set to None + struct_obj[sub_field_name] = None + + # All struct sub-fields should be either ARRAY or ARRAY_OF_VECTOR + # Any other type indicates a bug in the data conversion logic + else: + raise ParamError( + message=f"Unexpected field type {sub_field.type} for struct sub-field {sub_field_name}. " + f"Struct fields must be ARRAY or ARRAY_OF_VECTOR internally." + ) + + struct_array.append(struct_obj) + + return struct_array diff --git a/pymilvus/client/exceptions.py b/pymilvus/client/exceptions.py deleted file mode 100644 index 1c71761a7..000000000 --- a/pymilvus/client/exceptions.py +++ /dev/null @@ -1,100 +0,0 @@ -class ParamError(ValueError): - """ - Param of interface is illegal - """ - - -class ConnectError(ValueError): - """ - Connect server failed - """ - - -class NotConnectError(ConnectError): - """ - Disconnect error - """ - - -class RepeatingConnectError(ConnectError): - """ - Try to connect repeatedly - """ - - -class ConnectionPoolError(ConnectError): - """ - Waiting timeout error - """ - - -class FutureTimeoutError(TimeoutError): - """ - Future timeout - """ - - -class DeprecatedError(AttributeError): - """ - Deprecated - """ - - -class VersionError(AttributeError): - """ - Version not match - """ - - -class BaseException(Exception): - - def __init__(self, code, message): - self._code = code - self._message = message - - @property - def code(self): - return self._code - - @property - def message(self): - return self._message - - def __str__(self): - return f"<{type(self).__name__}: (code={self._code}, message={self._message})>" - - -class CollectionExistException(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - - -class CollectionNotExistException(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - - -class InvalidDimensionException(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - - -class InvalidMetricTypeException(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - - -class IllegalCollectionNameException(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - - -class DescribeCollectionException(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - - -class InvalidConsistencyLevel(BaseException): - def __init__(self, code, message): - super().__init__(code, message) - diff --git a/pymilvus/client/grpc_handler.py b/pymilvus/client/grpc_handler.py index 69d2d9c88..47e3739b0 100644 --- a/pymilvus/client/grpc_handler.py +++ b/pymilvus/client/grpc_handler.py @@ -1,418 +1,1017 @@ -import time -import logging +import base64 import json -import copy -import math +import logging +import socket +import threading +import time +from pathlib import Path +from typing import Any, Callable, Dict, Iterable, List, Mapping, Optional, Union +from urllib import parse import grpc from grpc._cython import cygrpc -from ..grpc_gen import milvus_pb2_grpc -from ..grpc_gen import milvus_pb2 as milvus_types - -from .abstract import CollectionSchema, ChunkedQueryResult, MutationResult +from pymilvus.decorators import ignore_unimplemented, retry_on_rpc_failure, upgrade_reminder +from pymilvus.exceptions import ( + AmbiguousIndexName, + DataNotMatchException, + DescribeCollectionException, + ErrorCode, + ExceptionsMessage, + MilvusException, + ParamError, +) +from pymilvus.grpc_gen import common_pb2, milvus_pb2_grpc +from pymilvus.grpc_gen import milvus_pb2 as milvus_types +from pymilvus.orm.schema import Function, FunctionScore +from pymilvus.settings import Config + +from . import entity_helper, interceptor, ts_utils, utils +from .abstract import ( + AnnSearchRequest, + BaseRanker, + CollectionSchema, + FieldSchema, + MutationResult, +) +from .asynch import ( + CreateIndexFuture, + FlushFuture, + MutationFuture, + SearchFuture, +) from .check import ( + check_pass_param, is_legal_host, is_legal_port, - check_pass_param, - is_legal_index_metric_type, - is_legal_binary_index_metric_type, ) +from .constants import ITERATOR_SESSION_TS_FIELD +from .embedding_list import EmbeddingList +from .interceptor import _api_level_md from .prepare import Prepare +from .search_result import SearchResult from .types import ( - Status, - ErrorCode, - IndexState, - DataType, - CompactionState, - State, + AnalyzeResult, + BulkInsertState, CompactionPlans, + CompactionState, + DatabaseInfo, + GrantInfo, + Group, + HybridExtraList, + IndexState, + LoadState, Plan, + PrivilegeGroupInfo, + Replica, + ReplicaInfo, + ResourceGroupConfig, + ResourceGroupInfo, + RoleInfo, + Shard, + State, + Status, + UserInfo, + get_extra_info, ) - from .utils import ( - valid_index_types, - valid_binary_index_types, - valid_index_params_keys, check_invalid_binary_vector, - len_of + check_status, + get_server_type, + is_successful, + len_of, ) -from ..settings import DefaultConfig as config -from .configs import DefaultConfigs -from . import ts_utils +logger = logging.getLogger(__name__) + + +class ReconnectHandler: + def __init__(self, conns: object, connection_name: str, kwargs: object) -> None: + self.connection_name = connection_name + self.conns = conns + self._kwargs = kwargs + self.is_idle_state = False + self.reconnect_lock = threading.Lock() + + def reset_db_name(self, db_name: str): + self._kwargs["db_name"] = db_name + + def check_state_and_reconnect_later(self): + check_after_seconds = 3 + logger.debug(f"state is idle, schedule reconnect in {check_after_seconds} seconds") + time.sleep(check_after_seconds) + if not self.is_idle_state: + logger.debug("idle state changed, skip reconnect") + return + with self.reconnect_lock: + logger.info("reconnect on idle state") + self.is_idle_state = False + try: + logger.debug("try disconnecting old connection...") + self.conns.disconnect(self.connection_name) + except Exception: + logger.warning("disconnect failed: {e}") + finally: + reconnected = False + while not reconnected: + try: + logger.debug("try reconnecting...") + self.conns.connect(self.connection_name, **self._kwargs) + reconnected = True + except Exception as e: + logger.warning( + f"reconnect failed: {e}, try again after {check_after_seconds} seconds" + ) + time.sleep(check_after_seconds) + logger.info("reconnected") + + def reconnect_on_idle(self, state: object): + logger.debug(f"state change to: {state}") + with self.reconnect_lock: + if state.value[1] != "idle": + self.is_idle_state = False + return + self.is_idle_state = True + threading.Thread(target=self.check_state_and_reconnect_later).start() -from .asynch import ( - SearchFuture, - MutationFuture, - CreateIndexFuture, - CreateFlatIndexFuture, - FlushFuture, - LoadPartitionsFuture, - ChunkedSearchFuture -) -from .exceptions import ( - ParamError, - CollectionNotExistException, - DescribeCollectionException, - BaseException, -) +class GrpcHandler: + # pylint: disable=too-many-instance-attributes + + def __init__( + self, + uri: str = Config.GRPC_URI, + host: str = "", + port: str = "", + channel: Optional[grpc.Channel] = None, + **kwargs, + ) -> None: + self._stub = None + self._channel = channel -from ..decorators import retry_on_rpc_failure, error_handler, check_has_collection + addr = kwargs.get("address") + self._address = addr if addr is not None else self.__get_address(uri, host, port) + self._log_level = None + self._user = kwargs.get("user") + self._set_authorization(**kwargs) + self._setup_db_interceptor(kwargs.get("db_name")) + self._setup_grpc_channel() + self.callbacks = [] + self.schema_cache = {} + self._reconnect_handler = None -LOGGER = logging.getLogger(__name__) + def register_reconnect_handler(self, handler: ReconnectHandler): + if handler is not None: + self._reconnect_handler = handler + self.register_state_change_callback(handler.reconnect_on_idle) + def register_state_change_callback(self, callback: Callable): + self.callbacks.append(callback) + self._channel.subscribe(callback, try_to_connect=True) -class GrpcHandler: - def __init__(self, uri=config.GRPC_ADDRESS, host=None, port=None, channel=None, **kwargs): - self._stub = None - self._channel = channel + def deregister_state_change_callbacks(self): + for callback in self.callbacks: + self._channel.unsubscribe(callback) + self.callbacks = [] - if host is not None and port is not None \ - and is_legal_host(host) and is_legal_port(port): - self._uri = f"{host}:{port}" - else: - self._uri = uri - self._max_retry = kwargs.get("max_retry", 5) + def __get_address(self, uri: str, host: str, port: str) -> str: + if host != "" and port != "" and is_legal_host(host) and is_legal_port(port): + return f"{host}:{port}" - self._setup_grpc_channel() + try: + parsed_uri = parse.urlparse(uri) + except Exception as e: + raise ParamError(message=f"Illegal uri: [{uri}], {e}") from e + return parsed_uri.netloc + + def _set_authorization(self, **kwargs): + secure = kwargs.get("secure", False) + if not isinstance(secure, bool): + raise ParamError(message="secure must be bool type") + self._secure = secure + self._client_pem_path = kwargs.get("client_pem_path", "") + self._client_key_path = kwargs.get("client_key_path", "") + self._ca_pem_path = kwargs.get("ca_pem_path", "") + self._server_pem_path = kwargs.get("server_pem_path", "") + self._server_name = kwargs.get("server_name", "") + + self._authorization_interceptor = None + self._setup_authorization_interceptor( + kwargs.get("user"), + kwargs.get("password"), + kwargs.get("token"), + ) def __enter__(self): return self - def __exit__(self, exc_type, exc_val, exc_tb): + def __exit__(self: object, exc_type: object, exc_val: object, exc_tb: object): pass - def _wait_for_channel_ready(self): - if self._channel is not None: - try: - grpc.channel_ready_future(self._channel).result(timeout=3) - return - except grpc.FutureTimeoutError: - raise BaseException(Status.CONNECT_FAILED, f'Fail connecting to server on {self._uri}. Timeout') + def _wait_for_channel_ready(self, timeout: Union[float] = 10): + if self._channel is None: + raise MilvusException( + code=Status.CONNECT_FAILED, + message="No channel in handler, please setup grpc channel first", + ) - raise BaseException(Status.CONNECT_FAILED, 'No channel in handler, please setup grpc channel first') + try: + grpc.channel_ready_future(self._channel).result(timeout=timeout) + self._setup_identifier_interceptor(self._user, timeout=timeout) + except grpc.FutureTimeoutError as e: + self.close() + raise MilvusException( + code=Status.CONNECT_FAILED, + message=f"Fail connecting to server on {self._address}, illegal connection params or server unavailable", + ) from e + except Exception as e: + self.close() + raise e from e def close(self): - self._channel.close() + self.deregister_state_change_callbacks() + if self._channel: + self._channel.close() + self._channel = None + + def reset_db_name(self, db_name: str): + self.schema_cache.clear() + self._setup_db_interceptor(db_name) + self._setup_grpc_channel() + self._setup_identifier_interceptor(self._user) + if self._reconnect_handler is not None: + self._reconnect_handler.reset_db_name(db_name) + + def _setup_authorization_interceptor(self, user: str, password: str, token: str): + keys = [] + values = [] + if token: + authorization = base64.b64encode(f"{token}".encode()) + keys.append("authorization") + values.append(authorization) + elif user and password: + authorization = base64.b64encode(f"{user}:{password}".encode()) + keys.append("authorization") + values.append(authorization) + if len(keys) > 0 and len(values) > 0: + self._authorization_interceptor = interceptor.header_adder_interceptor(keys, values) + + def _setup_db_interceptor(self, db_name: str): + if db_name is None: + self._db_interceptor = None + else: + check_pass_param(db_name=db_name) + self._db_interceptor = interceptor.header_adder_interceptor(["dbname"], [db_name]) def _setup_grpc_channel(self): - """ Create a ddl grpc channel """ + """Create a ddl grpc channel""" if self._channel is None: - self._channel = grpc.insecure_channel( - self._uri, - options=[(cygrpc.ChannelArgKey.max_send_message_length, -1), - (cygrpc.ChannelArgKey.max_receive_message_length, -1), - ('grpc.enable_retries', 1), - ('grpc.keepalive_time_ms', 55000)] + opts = [ + (cygrpc.ChannelArgKey.max_send_message_length, -1), + (cygrpc.ChannelArgKey.max_receive_message_length, -1), + ("grpc.enable_retries", 1), + ("grpc.keepalive_time_ms", 55000), + ] + if not self._secure: + self._channel = grpc.insecure_channel( + self._address, + options=opts, + ) + else: + if self._server_name != "": + opts.append(("grpc.ssl_target_name_override", self._server_name)) + + root_cert, private_k, cert_chain = None, None, None + if self._server_pem_path != "": + with Path(self._server_pem_path).open("rb") as f: + root_cert = f.read() + elif ( + self._client_pem_path != "" + and self._client_key_path != "" + and self._ca_pem_path != "" + ): + with Path(self._ca_pem_path).open("rb") as f: + root_cert = f.read() + with Path(self._client_key_path).open("rb") as f: + private_k = f.read() + with Path(self._client_pem_path).open("rb") as f: + cert_chain = f.read() + + creds = grpc.ssl_channel_credentials( + root_certificates=root_cert, + private_key=private_k, + certificate_chain=cert_chain, + ) + self._channel = grpc.secure_channel( + self._address, + creds, + options=opts, + ) + + # avoid to add duplicate headers. + self._final_channel = self._channel + if self._authorization_interceptor: + self._final_channel = grpc.intercept_channel( + self._final_channel, self._authorization_interceptor ) - self._stub = milvus_pb2_grpc.MilvusServiceStub(self._channel) + if self._db_interceptor: + self._final_channel = grpc.intercept_channel(self._final_channel, self._db_interceptor) + if self._log_level: + log_level_interceptor = interceptor.header_adder_interceptor( + ["log_level"], [self._log_level] + ) + self._final_channel = grpc.intercept_channel(self._final_channel, log_level_interceptor) + self._log_level = None + self._stub = milvus_pb2_grpc.MilvusServiceStub(self._final_channel) - @property - def server_address(self): - """ Server network address """ - return self._uri + def set_onetime_loglevel(self, log_level: str): + self._log_level = log_level + self._setup_grpc_channel() - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def create_collection(self, collection_name, fields, shards_num=2, timeout=None, **kwargs): - request = Prepare.create_collection_request(collection_name, fields, shards_num=shards_num, **kwargs) + def _setup_identifier_interceptor(self, user: str, timeout: int = 10): + host = socket.gethostname() + self._identifier = self.__internal_register(user, host, timeout=timeout) + self._identifier_interceptor = interceptor.header_adder_interceptor( + ["identifier"], [str(self._identifier)] + ) + self._final_channel = grpc.intercept_channel( + self._final_channel, self._identifier_interceptor + ) + self._stub = milvus_pb2_grpc.MilvusServiceStub(self._final_channel) - # TODO(wxyu): In grpcio==1.37.1, `wait_for_ready` is an EXPERIMENTAL argument, while it's not supported in - # grpcio-testing==1.37.1 . So that we remove the argument in order to using grpc-testing in unittests. - # rf = self._stub.CreateCollection.future(request, wait_for_ready=True, timeout=timeout) + @property + def server_address(self): + return self._address + + def get_server_type(self): + return get_server_type(self.server_address.split(":")[0]) + + def reset_password( + self, + user: str, + old_password: str, + new_password: str, + timeout: Optional[float] = None, + **kwargs, + ): + """ + reset password and then setup the grpc channel. + """ + self.update_password(user, old_password, new_password, timeout=timeout, **kwargs) + self._setup_authorization_interceptor(user, new_password, None) + self._setup_grpc_channel() - rf = self._stub.CreateCollection.future(request, timeout=timeout) + @retry_on_rpc_failure() + def create_collection( + self, + collection_name: str, + fields: Union[CollectionSchema, Dict[str, Iterable]], + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.create_collection_request(collection_name, fields, **kwargs) + + rf = self._stub.CreateCollection.future( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) if kwargs.get("_async", False): return rf status = rf.result() - if status.error_code != 0: - LOGGER.error(status) - raise BaseException(status.error_code, status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1, retry_on_deadline=False) - @error_handler - def drop_collection(self, collection_name, timeout=None): - check_pass_param(collection_name=collection_name) + check_status(status) + return None + + @retry_on_rpc_failure() + def drop_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) request = Prepare.drop_collection_request(collection_name) - rf = self._stub.DropCollection.future(request, wait_for_ready=True, timeout=timeout) - status = rf.result() - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def has_collection(self, collection_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) - request = Prepare.has_collection_request(collection_name) - - rf = self._stub.HasCollection.future(request, wait_for_ready=True, timeout=timeout) - reply = rf.result() - if reply.status.error_code == 0: - return reply.value - - raise BaseException(reply.status.error_code, reply.status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def describe_collection(self, collection_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) + status = self._stub.DropCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + if collection_name in self.schema_cache: + self.schema_cache.pop(collection_name) + + @retry_on_rpc_failure() + def add_collection_field( + self, + collection_name: str, + field_schema: FieldSchema, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.add_collection_field_request(collection_name, field_schema) + status = self._stub.AddCollectionField( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + def alter_collection_properties( + self, collection_name: str, properties: List, timeout: Optional[float] = None, **kwargs + ): + check_pass_param(collection_name=collection_name, properties=properties, timeout=timeout) + request = Prepare.alter_collection_request(collection_name, properties=properties) + status = self._stub.AlterCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + def alter_collection_field_properties( + self, + collection_name: str, + field_name: str, + field_params: Dict[str, Any], + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, properties=field_params, timeout=timeout) + request = Prepare.alter_collection_field_request( + collection_name=collection_name, field_name=field_name, field_param=field_params + ) + status = self._stub.AlterCollectionField( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + def drop_collection_properties( + self, + collection_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.alter_collection_request(collection_name, delete_keys=property_keys) + status = self._stub.AlterCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + def has_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) request = Prepare.describe_collection_request(collection_name) - rf = self._stub.DescribeCollection.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + reply = self._stub.DescribeCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + + # For compatibility with Milvus less than 2.3.2, which does not support status.code. + if ( + reply.status.error_code == common_pb2.UnexpectedError + and "can't find collection" in reply.status.reason + ): + return False + + if reply.status.error_code == common_pb2.CollectionNotExists: + return False + + if is_successful(reply.status): + return True + + if reply.status.code == ErrorCode.COLLECTION_NOT_FOUND: + return False + + raise MilvusException(reply.status.code, reply.status.reason, reply.status.error_code) + + @retry_on_rpc_failure() + def describe_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.describe_collection_request(collection_name) + response = self._stub.DescribeCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: + if is_successful(status): return CollectionSchema(raw=response).dict() - raise DescribeCollectionException(status.error_code, status.reason) + raise DescribeCollectionException(status.code, status.reason, status.error_code) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def list_collections(self, timeout=None): + @retry_on_rpc_failure() + def list_collections(self, timeout: Optional[float] = None, **kwargs): request = Prepare.show_collections_request() - rf = self._stub.ShowCollections.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + response = self._stub.ShowCollections( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if response.status.error_code == 0: - return list(response.collection_names) - - raise BaseException(status.error_code, status.reason) + check_status(status) + return list(response.collection_names) + + @retry_on_rpc_failure() + def rename_collections( + self, + old_name: str, + new_name: str, + new_db_name: str = "", + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=new_name, timeout=timeout) + check_pass_param(collection_name=old_name) + if new_db_name: + check_pass_param(db_name=new_db_name) + request = Prepare.rename_collections_request(old_name, new_name, new_db_name) + status = self._stub.RenameCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def create_partition(self, collection_name, partition_name, timeout=None): - check_pass_param(collection_name=collection_name, partition_name=partition_name) + @retry_on_rpc_failure() + def create_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param( + collection_name=collection_name, partition_name=partition_name, timeout=timeout + ) request = Prepare.create_partition_request(collection_name, partition_name) - rf = self._stub.CreatePartition.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def drop_partition(self, collection_name, partition_name, timeout=None): - check_pass_param(collection_name=collection_name, partition_name=partition_name) - request = Prepare.drop_partition_request(collection_name, partition_name) + response = self._stub.CreatePartition( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) - rf = self._stub.DropPartition.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + @retry_on_rpc_failure() + def drop_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param( + collection_name=collection_name, partition_name=partition_name, timeout=timeout + ) + request = Prepare.drop_partition_request(collection_name, partition_name) - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) + response = self._stub.DropPartition( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def has_partition(self, collection_name, partition_name, timeout=None): - check_pass_param(collection_name=collection_name, partition_name=partition_name) + @retry_on_rpc_failure() + def has_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param( + collection_name=collection_name, partition_name=partition_name, timeout=timeout + ) request = Prepare.has_partition_request(collection_name, partition_name) - rf = self._stub.HasPartition.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - status = response.status - if status.error_code == 0: - return response.value - - raise BaseException(status.error_code, status.reason) - - # TODO: this is not inuse - @error_handler - def get_partition_info(self, collection_name, partition_name, timeout=None): - request = Prepare.partition_stats_request(collection_name, partition_name) - rf = self._stub.DescribePartition.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + response = self._stub.HasPartition( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: - statistics = response.statistics - info_dict = dict() - for kv in statistics: - info_dict[kv.key] = kv.value - return info_dict - raise BaseException(status.error_code, status.reason) + check_status(status) + return response.value - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def list_partitions(self, collection_name, timeout=None): - check_pass_param(collection_name=collection_name) + @retry_on_rpc_failure() + def list_partitions(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) request = Prepare.show_partitions_request(collection_name) - rf = self._stub.ShowPartitions.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + response = self._stub.ShowPartitions( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: - return list(response.partition_names) - - raise BaseException(status.error_code, status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def get_partition_stats(self, collection_name, partition_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) - index_param = Prepare.get_partition_stats_request(collection_name, partition_name) - future = self._stub.GetPartitionStatistics.future(index_param, wait_for_ready=True, timeout=timeout) - response = future.result() + check_status(status) + return list(response.partition_names) + + @retry_on_rpc_failure() + def get_partition_stats( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param(collection_name=collection_name, timeout=timeout) + req = Prepare.get_partition_stats_request(collection_name, partition_name) + response = self._stub.GetPartitionStatistics( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: - return response.stats - - raise BaseException(status.error_code, status.reason) - - def _prepare_bulk_insert_request(self, collection_name, entities, partition_name=None, timeout=None, **kwargs): - insert_param = kwargs.get('insert_param', None) + check_status(status) + return response.stats + + # Seems not inuse + def _get_info(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + schema = kwargs.get("schema") + if not schema: + schema = self.describe_collection(collection_name, timeout=timeout) + + fields_info = schema.get("fields") + enable_dynamic = schema.get("enable_dynamic_field", False) + + return fields_info, enable_dynamic + + @retry_on_rpc_failure() + def insert_rows( + self, + collection_name: str, + entities: Union[Dict, List[Dict]], + partition_name: Optional[str] = None, + schema: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + try: + request = self._prepare_row_insert_request( + collection_name, entities, partition_name, schema, timeout, **kwargs + ) + except DataNotMatchException: + # try to update schema and retry + schema = self.update_schema(collection_name, timeout, **kwargs) + request = self._prepare_row_insert_request( + collection_name, entities, partition_name, schema, timeout, **kwargs + ) + except Exception as ex: + raise ex from ex + + resp = self._stub.Insert(request=request, timeout=timeout, metadata=_api_level_md(**kwargs)) + if resp.status.error_code == common_pb2.SchemaMismatch: + schema = self.update_schema(collection_name, timeout, **kwargs) + # recursively calling `insert_rows` handling another schema change happens during retry + return self.insert_rows( + collection_name=collection_name, + entities=entities, + partition_name=partition_name, + schema=schema, + timeout=timeout, + **kwargs, + ) + check_status(resp.status) + ts_utils.update_collection_ts(collection_name, resp.timestamp) + return MutationResult(resp) + + def update_schema(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + self.schema_cache.pop(collection_name, None) + schema = self.describe_collection( + collection_name, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + schema_timestamp = schema.get("update_timestamp", 0) + + self.schema_cache[collection_name] = { + "schema": schema, + "schema_timestamp": schema_timestamp, + } + + return schema + + def _prepare_row_insert_request( + self, + collection_name: str, + entity_rows: Union[List[Dict], Dict], + partition_name: Optional[str] = None, + schema: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(entity_rows, dict): + entity_rows = [entity_rows] + + schema, schema_timestamp = self._get_schema_from_cache_or_remote( + collection_name, schema, timeout + ) + fields_info = schema.get("fields") + struct_fields_info = schema.get("struct_array_fields", []) # Default to empty list + enable_dynamic = schema.get("enable_dynamic_field", False) + + return Prepare.row_insert_param( + collection_name, + entity_rows, + partition_name, + fields_info, + struct_fields_info, + enable_dynamic=enable_dynamic, + schema_timestamp=schema_timestamp, + ) - if insert_param and not isinstance(insert_param, milvus_types.RowBatch): - raise ParamError("The value of key 'insert_param' is invalid") + def _get_schema_from_cache_or_remote( + self, collection_name: str, schema: Optional[dict] = None, timeout: Optional[float] = None + ): + """ + checks the cache for the schema. If not found, it fetches it remotely and updates the cache + """ + if collection_name in self.schema_cache: + # Use the cached schema and timestamp + schema = self.schema_cache[collection_name]["schema"] + schema_timestamp = self.schema_cache[collection_name]["schema_timestamp"] + else: + # Fetch the schema remotely if not in cache + if not isinstance(schema, dict): + schema = self.describe_collection(collection_name, timeout=timeout) + schema_timestamp = schema.get("update_timestamp", 0) + + # Cache the fetched schema and timestamp + self.schema_cache[collection_name] = { + "schema": schema, + "schema_timestamp": schema_timestamp, + } + + return schema, schema_timestamp + + def _prepare_batch_insert_request( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + param = kwargs.get("insert_param") + if param and not isinstance(param, milvus_types.InsertRequest): + raise ParamError(message="The value of key 'insert_param' is invalid") if not isinstance(entities, list): - raise ParamError("None entities, please provide valid entities.") - - collection_schema = self.describe_collection(collection_name, timeout=timeout, **kwargs) + raise ParamError(message="'entities' must be a list, please provide valid entity data.") - fields_info = collection_schema["fields"] + schema = kwargs.get("schema") + if not schema: + schema = self.describe_collection(collection_name, timeout=timeout, **kwargs) - request = insert_param if insert_param \ - else Prepare.bulk_insert_param(collection_name, entities, partition_name, fields_info) + fields_info = schema["fields"] - return request + return ( + param + if param + else Prepare.batch_insert_param(collection_name, entities, partition_name, fields_info) + ) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def bulk_insert(self, collection_name, entities, partition_name=None, timeout=None, **kwargs): + @retry_on_rpc_failure() + def batch_insert( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): if not check_invalid_binary_vector(entities): - raise ParamError("Invalid binary vector data exists") + raise ParamError(message="Invalid binary vector data exists") try: - collection_id = self.describe_collection(collection_name, timeout, **kwargs)["collection_id"] - - request = self._prepare_bulk_insert_request(collection_name, entities, partition_name, timeout, **kwargs) - rf = self._stub.Insert.future(request, wait_for_ready=True, timeout=timeout) - if kwargs.get("_async", False) is True: - cb = kwargs.get("_callback", None) - f = MutationFuture(rf, cb) - f.add_callback(ts_utils.update_ts_on_mutation(collection_id)) + request = self._prepare_batch_insert_request( + collection_name, entities, partition_name, timeout, **kwargs + ) + rf = self._stub.Insert.future( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + if kwargs.get("_async", False): + cb = kwargs.get("_callback") + f = MutationFuture(rf, cb, timeout=timeout, **kwargs) + f.add_callback(ts_utils.update_ts_on_mutation(collection_name)) return f response = rf.result() - if response.status.error_code == 0: - m = MutationResult(response) - ts_utils.update_collection_ts(collection_id, m.timestamp) - return m - - raise BaseException(response.status.error_code, response.status.reason) + check_status(response.status) + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) except Exception as err: if kwargs.get("_async", False): return MutationFuture(None, None, err) - raise err - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def delete(self, collection_name, expression, partition_name=None, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) + raise err from err + else: + return m + + @retry_on_rpc_failure() + def delete( + self, + collection_name: str, + expression: str, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, timeout=timeout) try: - collection_id = self.describe_collection(collection_name, timeout, **kwargs)["collection_id"] - - req = Prepare.delete_request(collection_name, partition_name, expression) - future = self._stub.Delete.future(req, wait_for_ready=True, timeout=timeout) + req = Prepare.delete_request( + collection_name=collection_name, + filter=expression, + partition_name=partition_name, + consistency_level=kwargs.pop("consistency_level", 0), + **kwargs, + ) + future = self._stub.Delete.future( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + if kwargs.get("_async", False): + cb = kwargs.pop("_callback", None) + f = MutationFuture(future, cb, timeout=timeout, **kwargs) + f.add_callback(ts_utils.update_ts_on_mutation(collection_name)) + return f response = future.result() - if response.status.error_code == 0: - m = MutationResult(response) - ts_utils.update_collection_ts(collection_id, m.timestamp) - return m - - raise BaseException(response.status.error_code, response.status.reason) + check_status(response.status) + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) except Exception as err: if kwargs.get("_async", False): return MutationFuture(None, None, err) - raise err - - def _prepare_search_request(self, collection_name, query_entities, partition_names=None, fields=None, timeout=None, - round_decimal=-1, **kwargs): - rf = self._stub.HasCollection.future(Prepare.has_collection_request(collection_name), wait_for_ready=True, - timeout=timeout) - reply = rf.result() - if reply.status.error_code != 0 or not reply.value: - raise CollectionNotExistException(reply.status.error_code, "collection not exists") - - collection_schema = self.describe_collection(collection_name, timeout) - auto_id = collection_schema["auto_id"] - request = Prepare.search_request(collection_name, query_entities, partition_names, fields, round_decimal, - schema=collection_schema) - - return request, auto_id - - def _divide_search_request(self, collection_name, query_entities, partition_names=None, fields=None, timeout=None, - round_decimal=-1, **kwargs): - rf = self._stub.HasCollection.future(Prepare.has_collection_request(collection_name), wait_for_ready=True, - timeout=timeout) - reply = rf.result() - if reply.status.error_code != 0 or not reply.value: - raise CollectionNotExistException(reply.status.error_code, "collection not exists") - - collection_schema = self.describe_collection(collection_name, timeout) - auto_id = collection_schema["auto_id"] - requests = Prepare.divide_search_request(collection_name, query_entities, partition_names, fields, - round_decimal, - schema=collection_schema) - - return requests, auto_id - - @error_handler - def _execute_search_requests(self, requests, timeout=None, **kwargs): - auto_id = kwargs.get("auto_id", True) + raise err from err + else: + return m + + def _prepare_batch_upsert_request( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + param = kwargs.get("upsert_param") + if param and not isinstance(param, milvus_types.UpsertRequest): + raise ParamError(message="The value of key 'upsert_param' is invalid") + if not isinstance(entities, list): + raise ParamError(message="'entities' must be a list, please provide valid entity data.") + + # Extract partial_update parameter from kwargs + partial_update = kwargs.get("partial_update", False) + + schema = kwargs.get("schema") + if not schema: + schema = self.describe_collection(collection_name, timeout=timeout, **kwargs) + + fields_info = schema["fields"] + + return ( + param + if param + else Prepare.batch_upsert_param( + collection_name, + entities, + partition_name, + fields_info, + partial_update=partial_update, + ) + ) - try: - raws = [] - futures = [] + @retry_on_rpc_failure() + def upsert( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if not check_invalid_binary_vector(entities): + raise ParamError(message="Invalid binary vector data exists") - # step 1: get future object - for request in requests: - ft = self._stub.Search.future(request, wait_for_ready=True, timeout=timeout) - futures.append(ft) + try: + request = self._prepare_batch_upsert_request( + collection_name, entities, partition_name, timeout, **kwargs + ) + rf = self._stub.Upsert.future( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + if kwargs.get("_async", False) is True: + cb = kwargs.get("_callback") + f = MutationFuture(rf, cb, timeout=timeout, **kwargs) + f.add_callback(ts_utils.update_ts_on_mutation(collection_name)) + return f + response = rf.result() + check_status(response.status) + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) + except Exception as err: if kwargs.get("_async", False): - func = kwargs.get("_callback", None) - return ChunkedSearchFuture(futures, func, auto_id) + return MutationFuture(None, None, err) + raise err from err + else: + return m + + def _prepare_row_upsert_request( + self, + collection_name: str, + rows: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if not isinstance(rows, list): + raise ParamError(message="'rows' must be a list, please provide valid row data.") + + # Extract partial_update parameter from kwargs + partial_update = kwargs.get("partial_update", False) + + schema, schema_timestamp = self._get_schema_from_cache_or_remote( + collection_name, timeout=timeout + ) + fields_info = schema.get("fields") + struct_fields_info = schema.get("struct_array_fields", []) # Default to empty list + enable_dynamic = schema.get("enable_dynamic_field", False) + return Prepare.row_upsert_param( + collection_name, + rows, + partition_name, + fields_info, + struct_fields_info, + enable_dynamic=enable_dynamic, + schema_timestamp=schema_timestamp, + partial_update=partial_update, + ) - # step2: get results - for ft in futures: - response = ft.result() + @retry_on_rpc_failure() + def upsert_rows( + self, + collection_name: str, + entities: List, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(entities, dict): + entities = [entities] - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) + try: + request = self._prepare_row_upsert_request( + collection_name, entities, partition_name, timeout, **kwargs + ) + except DataNotMatchException: + # try to update schema and retry + self.update_schema(collection_name, timeout, **kwargs) + request = self._prepare_row_upsert_request( + collection_name, entities, partition_name, timeout, **kwargs + ) + except Exception as ex: + raise ex from ex + + response = self._stub.Upsert(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + if response.status.error_code == common_pb2.SchemaMismatch: + self.update_schema(collection_name, timeout) + # recursively calling `upsert_rows` handling another schema change happens during retry + return self.upsert_rows( + collection_name=collection_name, + entities=entities, + partition_name=partition_name, + timeout=timeout, + **kwargs, + ) + check_status(response.status) + m = MutationResult(response) + ts_utils.update_collection_ts(collection_name, m.timestamp) + return m + + def _execute_search( + self, request: milvus_types.SearchRequest, timeout: Optional[float] = None, **kwargs + ): + try: + if kwargs.get("_async", False): + future = self._stub.Search.future( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + func = kwargs.get("_callback") + return SearchFuture(future, func) + + response = self._stub.Search(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response.status) + round_decimal = kwargs.get("round_decimal", -1) + return SearchResult( + response.results, + round_decimal, + status=response.status, + session_ts=response.session_ts, + ) + except Exception as e: + if kwargs.get("_async", False): + return SearchFuture(None, None, e) + raise e from e - raws.append(response) + def _execute_hybrid_search( + self, request: milvus_types.HybridSearchRequest, timeout: Optional[float] = None, **kwargs + ): + try: + if kwargs.get("_async", False): + future = self._stub.HybridSearch.future( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + func = kwargs.get("_callback") + return SearchFuture(future, func) + + response = self._stub.HybridSearch( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) round_decimal = kwargs.get("round_decimal", -1) - return ChunkedQueryResult(raws, auto_id, round_decimal) + return SearchResult(response.results, round_decimal, status=response.status) - except Exception as pre_err: + except Exception as e: if kwargs.get("_async", False): - return SearchFuture(None, None, True, pre_err) - raise pre_err - - def _batch_search(self, collection_name, query_entities, partition_names=None, fields=None, timeout=None, - round_decimal=-1, **kwargs): - requests, auto_id = self._divide_search_request(collection_name, query_entities, partition_names, - fields, timeout, round_decimal, **kwargs) - kwargs["auto_id"] = auto_id - kwargs["round_decimal"] = round_decimal - return self._execute_search_requests(requests, timeout, **kwargs) - - @error_handler - def _total_search(self, collection_name, query_entities, partition_names=None, fields=None, timeout=None, - round_decimal=-1, **kwargs): - request, auto_id = self._prepare_search_request(collection_name, query_entities, partition_names, - fields, timeout, round_decimal, **kwargs) - kwargs["auto_id"] = auto_id - kwargs["round_decimal"] = round_decimal - return self._execute_search_requests([request], timeout, **kwargs) - - @retry_on_rpc_failure(retry_times=10, wait=1, retry_on_deadline=False) - @error_handler - @check_has_collection - def search(self, collection_name, data, anns_field, param, limit, - expression=None, partition_names=None, output_fields=None, - timeout=None, round_decimal=-1, **kwargs): + return SearchFuture(None, None, e) + raise e from e + + @retry_on_rpc_failure() + def search( + self, + collection_name: str, + data: Union[List[List[float]], utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + limit: int, + expression: Optional[str] = None, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + round_decimal: int = -1, + timeout: Optional[float] = None, + ranker: Union[Function, FunctionScore] = None, + **kwargs, + ): check_pass_param( limit=limit, round_decimal=round_decimal, @@ -420,698 +1019,889 @@ def search(self, collection_name, data, anns_field, param, limit, search_data=data, partition_name_array=partition_names, output_fields=output_fields, - travel_timestamp=kwargs.get("travel_timestamp", 0), - guarantee_timestamp=kwargs.get("guarantee_timestamp", 0) + guarantee_timestamp=kwargs.get("guarantee_timestamp"), + timeout=timeout, ) - _kwargs = copy.deepcopy(kwargs) - collection_schema = self.describe_collection(collection_name, timeout) - collection_id = collection_schema["collection_id"] - auto_id = collection_schema["auto_id"] - consistency_level = collection_schema["consistency_level"] - # overwrite the consistency level defined when user created the collection - consistency_level = _kwargs.get("consistency_level", consistency_level) - _kwargs["schema"] = collection_schema - - ts_utils.construct_guarantee_ts(consistency_level, collection_id, _kwargs) - - requests = Prepare.search_requests_with_expr(collection_name, data, anns_field, param, limit, expression, - partition_names, output_fields, round_decimal, **_kwargs) - _kwargs.pop("schema") - _kwargs["auto_id"] = auto_id - _kwargs["round_decimal"] = round_decimal + request = Prepare.search_requests_with_expr( + collection_name, + data, + anns_field, + param, + limit, + expression, + partition_names, + output_fields, + round_decimal, + ranker=ranker, + **kwargs, + ) + return self._execute_search(request, timeout, round_decimal=round_decimal, **kwargs) + + @retry_on_rpc_failure() + def hybrid_search( + self, + collection_name: str, + reqs: List[AnnSearchRequest], + rerank: Union[BaseRanker, Function], + limit: int, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + round_decimal: int = -1, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param( + limit=limit, + round_decimal=round_decimal, + partition_name_array=partition_names, + output_fields=output_fields, + guarantee_timestamp=kwargs.get("guarantee_timestamp"), + timeout=timeout, + ) - return self._execute_search_requests(requests, timeout, **_kwargs) + requests = [] + for req in reqs: + # Convert EmbeddingList to flat array if present in the request data + data = req.data + req_kwargs = dict(kwargs) + if isinstance(data, list) and data and isinstance(data[0], EmbeddingList): + data = [emb_list.to_flat_array() for emb_list in data] + req_kwargs["is_embedding_list"] = True + + search_request = Prepare.search_requests_with_expr( + collection_name, + data, + req.anns_field, + req.param, + req.limit, + req.expr, + partition_names=partition_names, + round_decimal=round_decimal, + expr_params=req.expr_params, + **req_kwargs, + ) + requests.append(search_request) + + hybrid_search_request = Prepare.hybrid_search_request_with_ranker( + collection_name, + requests, + rerank, + limit, + partition_names, + output_fields, + round_decimal, + **kwargs, + ) + return self._execute_hybrid_search( + hybrid_search_request, timeout, round_decimal=round_decimal, **kwargs + ) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def get_query_segment_info(self, collection_name, timeout=30, **kwargs): + @retry_on_rpc_failure() + def get_query_segment_info( + self, collection_name: str, timeout: float = 30, **kwargs + ) -> List[milvus_types.QuerySegmentInfo]: req = Prepare.get_query_segment_info_request(collection_name) - future = self._stub.GetQuerySegmentInfo.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() - status = response.status - if status.error_code == 0: - return response.infos # todo: A wrapper class of QuerySegmentInfo - raise BaseException(status.error_code, status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def create_alias(self, collection_name, alias, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) + response = self._stub.GetQuerySegmentInfo( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.infos + + @retry_on_rpc_failure() + def create_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param(collection_name=collection_name, timeout=timeout) request = Prepare.create_alias_request(collection_name, alias) - rf = self._stub.CreateAlias.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def drop_alias(self, alias, timeout=None, **kwargs): + response = self._stub.CreateAlias( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + def drop_alias(self, alias: str, timeout: Optional[float] = None, **kwargs): request = Prepare.drop_alias_request(alias) - rf = self._stub.DropAlias.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def alter_alias(self, collection_name, alias, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) + response = self._stub.DropAlias(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response) + + @retry_on_rpc_failure() + def alter_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + check_pass_param(collection_name=collection_name, timeout=timeout) request = Prepare.alter_alias_request(collection_name, alias) - rf = self._stub.AlterAlias.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def create_index(self, collection_name, field_name, params, timeout=None, **kwargs): - def check_index_params(params): - params = params or dict() - if not isinstance(params, dict): - raise ParamError("Params must be a dictionary type") - # params preliminary validate - if 'index_type' not in params: - raise ParamError("Params must contains key: 'index_type'") - if 'params' not in params: - raise ParamError("Params must contains key: 'params'") - if 'metric_type' not in params: - raise ParamError("Params must contains key: 'metric_type'") - if not isinstance(params['params'], dict): - raise ParamError("Params['params'] must be a dictionary type") - if params['index_type'] not in valid_index_types: - raise ParamError("Invalid index_type: " + params['index_type'] + - ", which must be one of: " + str(valid_index_types)) - for k in params['params'].keys(): - if k not in valid_index_params_keys: - raise ParamError("Invalid params['params'].key: " + k) - for v in params['params'].values(): - if not isinstance(v, int): - raise ParamError("Invalid params['params'].value: " + v + ", which must be an integer") - - # filter invalid metric type - if params['index_type'] in valid_binary_index_types: - if not is_legal_binary_index_metric_type(params['index_type'], params['metric_type']): - raise ParamError("Invalid metric_type: " + params['metric_type'] + - ", which does not match the index type: " + params['index_type']) - else: - if not is_legal_index_metric_type(params['index_type'], params['metric_type']): - raise ParamError("Invalid metric_type: " + params['metric_type'] + - ", which does not match the index type: " + params['index_type']) - - check_index_params(params) - collection_desc = self.describe_collection(collection_name, timeout=timeout, **kwargs) - valid_field = False - for fields in collection_desc["fields"]: - if field_name != fields["name"]: - continue - if fields["type"] != DataType.FLOAT_VECTOR and fields["type"] != DataType.BINARY_VECTOR: - # TODO: add new error type - raise BaseException(Status.UNEXPECTED_ERROR, - "cannot create index on non-vector field: " + str(field_name)) - valid_field = True - break - if not valid_field: - # TODO: add new error type - raise BaseException(Status.UNEXPECTED_ERROR, - "cannot create index on non-existed field: " + str(field_name)) - index_type = params["index_type"].upper() - if index_type == "FLAT": - try: - index_desc = self.describe_index(collection_name, "", timeout=timeout, **kwargs) - if index_desc is not None: - self.drop_index(collection_name, field_name, "_default_idx", timeout=timeout, **kwargs) - res_status = Status(Status.SUCCESS, "Warning: It is not necessary to build index with index_type: FLAT") - if kwargs.get("_async", False): - return CreateFlatIndexFuture(res_status) - return res_status - except Exception as err: - if kwargs.get("_async", False): - return CreateFlatIndexFuture(None, None, err) - raise err - - # sync flush + response = self._stub.AlterAlias(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response) + + @retry_on_rpc_failure() + def describe_alias(self, alias: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(alias=alias, timeout=timeout) + request = Prepare.describe_alias_request(alias) + response = self._stub.DescribeAlias( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + ret = { + "alias": alias, + } + if response.collection: + ret["collection_name"] = response.collection + if response.db_name: + ret["db_name"] = response.db_name + return ret + + @retry_on_rpc_failure() + def list_aliases(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(timeout=timeout) + if collection_name: + check_pass_param(collection_name=collection_name) + request = Prepare.list_aliases_request(collection_name, kwargs.get("db_name", "")) + response = self._stub.ListAliases( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + ret = { + "aliases": [], + } + if response.collection_name: + ret["collection_name"] = response.collection_name + if response.db_name: + ret["db_name"] = response.db_name + ret["aliases"].extend(response.aliases) + return ret + + @retry_on_rpc_failure() + def create_index( + self, + collection_name: str, + field_name: str, + params: Dict, + timeout: Optional[float] = None, + **kwargs, + ): + # for historical reason, index_name contained in kwargs. + index_name = kwargs.pop("index_name", Config.IndexName) + _async = kwargs.get("_async", False) kwargs["_async"] = False - self.flush([collection_name], timeout, **kwargs) - index_param = Prepare.create_index__request(collection_name, field_name, params) - future = self._stub.CreateIndex.future(index_param, wait_for_ready=True, timeout=timeout) + index_param = Prepare.create_index_request( + collection_name, field_name, params, index_name=index_name + ) + future = self._stub.CreateIndex.future( + index_param, timeout=timeout, metadata=_api_level_md(**kwargs) + ) if _async: + def _check(): if kwargs.get("sync", True): - index_success, fail_reason = self.wait_for_creating_index(collection_name=collection_name, - field_name=field_name, timeout=timeout) + index_success, fail_reason = self.wait_for_creating_index( + collection_name=collection_name, + index_name=index_name, + timeout=timeout, + field_name=field_name, + **kwargs, + ) if not index_success: - raise BaseException(Status.UNEXPECTED_ERROR, fail_reason) + raise MilvusException(message=fail_reason) index_future = CreateIndexFuture(future) index_future.add_callback(_check) - user_cb = kwargs.get("_callback", None) + user_cb = kwargs.get("_callback") if user_cb: index_future.add_callback(user_cb) return index_future status = future.result() - - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) + check_status(status) if kwargs.get("sync", True): - index_success, fail_reason = self.wait_for_creating_index(collection_name=collection_name, - field_name=field_name, timeout=timeout) + index_success, fail_reason = self.wait_for_creating_index( + collection_name=collection_name, + index_name=index_name, + timeout=timeout, + field_name=field_name, + **kwargs, + ) if not index_success: - raise BaseException(Status.UNEXPECTED_ERROR, fail_reason) - - return Status(status.error_code, status.reason) + raise MilvusException(message=fail_reason) + + return Status(status.code, status.reason) + + @retry_on_rpc_failure() + def alter_index_properties( + self, + collection_name: str, + index_name: str, + properties: dict, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout) + if properties is None: + raise ParamError(message="properties should not be None") + + request = Prepare.alter_index_properties_request(collection_name, index_name, properties) + response = self._stub.AlterIndex(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response) + + @retry_on_rpc_failure() + def drop_index_properties( + self, + collection_name: str, + index_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout) + request = Prepare.drop_index_properties_request( + collection_name, index_name, delete_keys=property_keys + ) + response = self._stub.AlterIndex(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def describe_index(self, collection_name, index_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) - request = Prepare.describe_index_request(collection_name, index_name) + @retry_on_rpc_failure() + def list_indexes(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.describe_index_request(collection_name, "") - rf = self._stub.DescribeIndex.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + response = self._stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + if is_successful(status): + return response.index_descriptions + if status.code == ErrorCode.INDEX_NOT_FOUND or status.error_code == Status.INDEX_NOT_EXIST: + return [] + raise MilvusException(status.code, status.reason, status.error_code) + + @retry_on_rpc_failure() + def describe_index( + self, + collection_name: str, + index_name: str, + timeout: Optional[float] = None, + timestamp: Optional[int] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.describe_index_request(collection_name, index_name, timestamp=timestamp) + + response = self._stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: + if status.code == ErrorCode.INDEX_NOT_FOUND or status.error_code == Status.INDEX_NOT_EXIST: + return None + check_status(status) + if len(response.index_descriptions) == 1: info_dict = {kv.key: kv.value for kv in response.index_descriptions[0].params} - info_dict['field_name'] = response.index_descriptions[0].field_name - if info_dict.get("params", None): + info_dict["field_name"] = response.index_descriptions[0].field_name + info_dict["index_name"] = response.index_descriptions[0].index_name + if info_dict.get("params"): info_dict["params"] = json.loads(info_dict["params"]) + info_dict["total_rows"] = response.index_descriptions[0].total_rows + info_dict["indexed_rows"] = response.index_descriptions[0].indexed_rows + info_dict["pending_index_rows"] = response.index_descriptions[0].pending_index_rows + info_dict["state"] = common_pb2.IndexState.Name(response.index_descriptions[0].state) return info_dict - if status.error_code == Status.INDEX_NOT_EXIST: - return None - raise BaseException(status.error_code, status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def get_index_build_progress(self, collection_name, index_name, timeout=None): - request = Prepare.get_index_build_progress(collection_name, index_name) - rf = self._stub.GetIndexBuildProgress.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + + raise AmbiguousIndexName(message=ExceptionsMessage.AmbiguousIndexName) + + @retry_on_rpc_failure() + def get_index_build_progress( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ): + request = Prepare.describe_index_request(collection_name, index_name) + response = self._stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: - return {'total_rows': response.total_rows, 'indexed_rows': response.indexed_rows} - raise BaseException(status.error_code, status.reason) - - @error_handler - def get_index_state(self, collection_name, field_name, timeout=None): - request = Prepare.get_index_state_request(collection_name, field_name) - rf = self._stub.GetIndexState.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() + check_status(status) + if len(response.index_descriptions) == 1: + index_desc = response.index_descriptions[0] + return { + "total_rows": index_desc.total_rows, + "indexed_rows": index_desc.indexed_rows, + "pending_index_rows": index_desc.pending_index_rows, + "state": common_pb2.IndexState.Name(index_desc.state), + } + raise AmbiguousIndexName(message=ExceptionsMessage.AmbiguousIndexName) + + @retry_on_rpc_failure() + def get_index_state( + self, + collection_name: str, + index_name: str, + timeout: Optional[float] = None, + timestamp: Optional[int] = None, + **kwargs, + ): + request = Prepare.describe_index_request(collection_name, index_name, timestamp) + response = self._stub.DescribeIndex( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: - return response.state, response.fail_reason - raise BaseException(status.error_code, status.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def wait_for_creating_index(self, collection_name, field_name, timeout=None): + check_status(status) + + if len(response.index_descriptions) == 1: + index_desc = response.index_descriptions[0] + return index_desc.state, index_desc.index_state_fail_reason + # just for create_index. + field_name = kwargs.pop("field_name", "") + if field_name != "": + for index_desc in response.index_descriptions: + if index_desc.field_name == field_name: + return index_desc.state, index_desc.index_state_fail_reason + + raise AmbiguousIndexName(message=ExceptionsMessage.AmbiguousIndexName) + + @retry_on_rpc_failure() + def wait_for_creating_index( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ): + timestamp = self.alloc_timestamp() start = time.time() while True: time.sleep(0.5) - state, fail_reason = self.get_index_state(collection_name, field_name, timeout) + state, fail_reason = self.get_index_state( + collection_name, index_name, timeout=timeout, timestamp=timestamp, **kwargs + ) if state == IndexState.Finished: return True, fail_reason if state == IndexState.Failed: return False, fail_reason end = time.time() - if timeout is not None: - if end - start > timeout: - raise BaseException(1, "CreateIndex Timeout") - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def load_collection(self, collection_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) - request = Prepare.load_collection("", collection_name) - rf = self._stub.LoadCollection.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - _async = kwargs.get("_async", False) - if not _async: - self.wait_for_loading_collection(collection_name, timeout) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def load_collection_progress(self, collection_name, timeout=None): - """ - Block until load collection complete. - """ - - loaded_segments_nums = sum(info.num_rows for info in - self.get_query_segment_info(collection_name, timeout)) - - total_segments_nums = sum(info.num_rows for info in - self.get_persistent_segment_infos(collection_name, timeout)) - - return {'num_loaded_entities': loaded_segments_nums, 'num_total_entities': total_segments_nums} - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def wait_for_loading_collection(self, collection_name, timeout=None): - return self._wait_for_loading_collection_v2(collection_name, timeout) - - # TODO seems not in use - def _wait_for_loading_collection_v1(self, collection_name, timeout=None): - """ Block until load collection complete. """ - unloaded_segments = {info.segmentID: info.num_rows for info in - self.get_persistent_segment_infos(collection_name, timeout)} - - while len(unloaded_segments) > 0: - time.sleep(0.5) - - for info in self.get_query_segment_info(collection_name, timeout): - if 0 <= unloaded_segments.get(info.segmentID, -1) <= info.num_rows: - unloaded_segments.pop(info.segmentID) - - def _wait_for_loading_collection_v2(self, collection_name, timeout=None): - """ Block until load collection complete. """ - request = Prepare.show_collections_request([collection_name]) - - while True: - future = self._stub.ShowCollections.future(request, wait_for_ready=True, timeout=timeout) - response = future.result() - - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) - - ol = len(response.collection_names) - pl = len(response.inMemory_percentages) - - if ol != pl: - raise BaseException(ErrorCode.UnexpectedError, - f"len(collection_names) ({ol}) != len(inMemory_percentages) ({pl})") - - for i, coll_name in enumerate(response.collection_names): - if coll_name == collection_name and response.inMemory_percentages[i] == 100: - return - - time.sleep(DefaultConfigs.WaitTimeDurationWhenLoad) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def release_collection(self, collection_name, timeout=None): - check_pass_param(collection_name=collection_name) - request = Prepare.release_collection("", collection_name) - rf = self._stub.ReleaseCollection.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def load_partitions(self, collection_name, partition_names, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name, partition_name_array=partition_names) - request = Prepare.load_partitions("", collection_name, partition_names) - future = self._stub.LoadPartitions.future(request, wait_for_ready=True, timeout=timeout) + if isinstance(timeout, int) and end - start > timeout: + msg = ( + f"collection {collection_name} create index {index_name} timeout in {timeout}s" + ) + raise MilvusException(message=msg) + + @retry_on_rpc_failure() + def load_collection( + self, + collection_name: str, + replica_number: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(timeout=timeout) + + request = Prepare.load_collection(collection_name, replica_number, **kwargs) + response = self._stub.LoadCollection( + request, + timeout=timeout, + metadata=_api_level_md(**kwargs), + ) + check_status(response) if kwargs.get("_async", False): - def _check(): - if kwargs.get("sync", True): - self.wait_for_loading_partitions(collection_name, partition_names) - - load_partitions_future = LoadPartitionsFuture(future) - load_partitions_future.add_callback(_check) - - user_cb = kwargs.get("_callback", None) - if user_cb: - load_partitions_future.add_callback(user_cb) - - return load_partitions_future - - response = future.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - sync = kwargs.get("sync", True) - if sync: - self.wait_for_loading_partitions(collection_name, partition_names) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def wait_for_loading_partitions(self, collection_name, partition_names, timeout=None): - return self._wait_for_loading_partitions_v2(collection_name, partition_names, timeout) - - # TODO seems not in use - def _wait_for_loading_partitions_v1(self, collection_name, partition_names, timeout=None): - """ - Block until load partition complete. - """ - request = Prepare.show_partitions_request(collection_name) - rf = self._stub.ShowPartitions.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - status = response.status - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) - - pIDs = [response.partitionIDs[index] for index, p_name in enumerate(response.partition_names) - if p_name in partition_names] - - unloaded_segments = {info.segmentID: info.num_rows for info in - self.get_persistent_segment_infos(collection_name, timeout) - if info.partitionID in pIDs} - - while len(unloaded_segments) > 0: - time.sleep(0.5) + return - for info in self.get_query_segment_info(collection_name, timeout): - if 0 <= unloaded_segments.get(info.segmentID, -1) <= info.num_rows: - unloaded_segments.pop(info.segmentID) - - def _wait_for_loading_partitions_v2(self, collection_name, partition_names, timeout=None): - """ - Block until load partition complete. - """ - request = Prepare.show_partitions_request(collection_name, partition_names) + self.wait_for_loading_collection( + collection_name=collection_name, + is_refresh=request.refresh, + timeout=timeout, + **kwargs, + ) - while True: - future = self._stub.ShowPartitions.future(request, wait_for_ready=True, timeout=timeout) - response = future.result() + @retry_on_rpc_failure() + def load_collection_progress( + self, + collection_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + """Return loading progress of collection""" + progress = self.get_loading_progress(collection_name, timeout=timeout) + return { + "loading_progress": f"{progress:.0f}%", + } + + @retry_on_rpc_failure() + def wait_for_loading_collection( + self, + collection_name: str, + timeout: Optional[float] = None, + is_refresh: bool = False, + **kwargs, + ): + start = time.time() - status = response.status - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) + def can_loop(t: int) -> bool: + return True if timeout is None else t <= (start + timeout) - ol = len(response.partition_names) - pl = len(response.inMemory_percentages) + while can_loop(time.time()): + progress = self.get_loading_progress( + collection_name, + is_refresh=is_refresh, + timeout=timeout, + **kwargs, + ) + if progress >= 100: + return + time.sleep(Config.WaitTimeDurationWhenLoad) + raise MilvusException( + message=f"wait for loading collection timeout, collection: {collection_name}" + ) - if ol != pl: - raise BaseException(ErrorCode.UnexpectedError, - f"len(partition_names) ({ol}) != len(inMemory_percentages) ({pl})") + @retry_on_rpc_failure() + def release_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) + request = Prepare.release_collection("", collection_name) + response = self._stub.ReleaseCollection( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + def load_partitions( + self, + collection_name: str, + partition_names: List[str], + replica_number: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(timeout=timeout) + + request = Prepare.load_partitions( + collection_name=collection_name, + partition_names=partition_names, + replica_number=replica_number, + **kwargs, + ) + response = self._stub.LoadPartitions( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + if kwargs.get("sync", True) or not kwargs.get("_async", False): + self.wait_for_loading_partitions( + collection_name=collection_name, + partition_names=partition_names, + is_refresh=request.refresh, + timeout=timeout, + **kwargs, + ) - loaded_histogram = dict() - for i, par_name in enumerate(response.partition_names): - loaded_histogram[par_name] = response.inMemory_percentages[i] + @retry_on_rpc_failure() + def wait_for_loading_partitions( + self, + collection_name: str, + partition_names: List[str], + timeout: Optional[float] = None, + is_refresh: bool = False, + **kwargs, + ): + start = time.time() - ok = True - for par_name in partition_names: - if loaded_histogram.get(par_name, 0) != 100: - ok = False - break + def can_loop(t: int) -> bool: + return True if timeout is None else t <= (start + timeout) - if ok: + while can_loop(time.time()): + progress = self.get_loading_progress( + collection_name=collection_name, + partition_names=partition_names, + timeout=timeout, + is_refresh=is_refresh, + **kwargs, + ) + if progress >= 100: return + time.sleep(Config.WaitTimeDurationWhenLoad) + raise MilvusException( + message=f"wait for loading partition timeout, collection: {collection_name}, partitions: {partition_names}" + ) - time.sleep(DefaultConfigs.WaitTimeDurationWhenLoad) + @retry_on_rpc_failure() + def get_loading_progress( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + is_refresh: bool = False, + **kwargs, + ): + request = Prepare.get_loading_progress(collection_name, partition_names) + response = self._stub.GetLoadingProgress( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + if is_refresh: + return response.refresh_progress + return response.progress + + @retry_on_rpc_failure() + def create_database( + self, + db_name: str, + properties: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(db_name=db_name, timeout=timeout) + request = Prepare.create_database_req(db_name, properties=properties) + status = self._stub.CreateDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + def drop_database(self, db_name: str, timeout: Optional[float] = None, **kwargs): + request = Prepare.drop_database_req(db_name) + status = self._stub.DropDatabase(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(status) + + @retry_on_rpc_failure() + def list_database(self, timeout: Optional[float] = None, **kwargs): + check_pass_param(timeout=timeout) + request = Prepare.list_database_req() + response = self._stub.ListDatabases( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return list(response.db_names) + + @retry_on_rpc_failure() + def alter_database( + self, db_name: str, properties: dict, timeout: Optional[float] = None, **kwargs + ): + request = Prepare.alter_database_properties_req(db_name, properties) + status = self._stub.AlterDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + + @retry_on_rpc_failure() + def drop_database_properties( + self, db_name: str, property_keys: List[str], timeout: Optional[float] = None, **kwargs + ): + request = Prepare.drop_database_properties_req(db_name, property_keys) + status = self._stub.AlterDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def load_partitions_progress(self, collection_name, partition_names, timeout=None): - """ - Block until load collection complete. - """ - request = Prepare.show_partitions_request(collection_name) - rf = self._stub.ShowPartitions.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - status = response.status - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) - - pIDs = [] - pNames = [] - for index, p_name in enumerate(response.partition_names): - if p_name in partition_names: - pIDs.append(response.partitionIDs[index]) - pNames.append((p_name)) - - # all partition names must be valid, otherwise throw exception - for name in partition_names: - if name not in pNames: - msg = "partitionID of partitionName:" + name + " can not be found" - raise BaseException(1, msg) - - total_segments_nums = sum(info.num_rows for info in - self.get_persistent_segment_infos(collection_name, timeout) - if info.partitionID in pIDs) - - loaded_segments_nums = sum(info.num_rows for info in - self.get_query_segment_info(collection_name, timeout) - if info.partitionID in pIDs) - - return {'num_loaded_entities': loaded_segments_nums, 'num_total_entities': total_segments_nums} - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def release_partitions(self, collection_name, partition_names, timeout=None): - check_pass_param(collection_name=collection_name, partition_name_array=partition_names) + @retry_on_rpc_failure() + def describe_database(self, db_name: str, timeout: Optional[float] = None, **kwargs): + request = Prepare.describe_database_req(db_name=db_name) + resp = self._stub.DescribeDatabase( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return DatabaseInfo(resp).to_dict() + + @retry_on_rpc_failure() + def get_load_state( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + request = Prepare.get_load_state(collection_name, partition_names) + response = self._stub.GetLoadState( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return LoadState(response.state) + + @retry_on_rpc_failure() + def load_partitions_progress( + self, + collection_name: str, + partition_names: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + """Return loading progress of partitions""" + progress = self.get_loading_progress(collection_name, partition_names, timeout, **kwargs) + return { + "loading_progress": f"{progress:.0f}%", + } + + @retry_on_rpc_failure() + def release_partitions( + self, + collection_name: str, + partition_names: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param( + collection_name=collection_name, partition_name_array=partition_names, timeout=timeout + ) request = Prepare.release_partitions("", collection_name, partition_names) - rf = self._stub.ReleasePartitions.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def get_collection_stats(self, collection_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name) + response = self._stub.ReleasePartitions( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response) + + @retry_on_rpc_failure() + def get_collection_stats(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(collection_name=collection_name, timeout=timeout) index_param = Prepare.get_collection_stats_request(collection_name) - future = self._stub.GetCollectionStatistics.future(index_param, wait_for_ready=True, timeout=timeout) - response = future.result() + response = self._stub.GetCollectionStatistics( + index_param, timeout=timeout, metadata=_api_level_md(**kwargs) + ) status = response.status - if status.error_code == 0: - return response.stats - - raise BaseException(status.error_code, status.reason) - - @error_handler - def get_flush_state(self, segment_ids, timeout=None, **kwargs): - req = Prepare.get_flush_state_request(segment_ids) - future = self._stub.GetFlushState.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() + check_status(status) + return response.stats + + @retry_on_rpc_failure() + def get_flush_state( + self, + segment_ids: List[int], + collection_name: str, + flush_ts: int, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.get_flush_state_request(segment_ids, collection_name, flush_ts) + response = self._stub.GetFlushState(req, timeout=timeout, metadata=_api_level_md(**kwargs)) status = response.status - if status.error_code == 0: - return response.flushed # todo: A wrapper class of PersistentSegmentInfo - raise BaseException(status.error_code, status.reason) + check_status(status) + return response.flushed - # TODO seem not in use - @error_handler - def get_persistent_segment_infos(self, collection_name, timeout=None, **kwargs): + @retry_on_rpc_failure() + def get_persistent_segment_infos( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[milvus_types.PersistentSegmentInfo]: req = Prepare.get_persistent_segment_info_request(collection_name) - future = self._stub.GetPersistentSegmentInfo.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() - status = response.status - if status.error_code == 0: - return response.infos # todo: A wrapper class of PersistentSegmentInfo - raise BaseException(status.error_code, status.reason) - - @error_handler - def _wait_for_flushed(self, segment_ids, timeout=None, **kwargs): + response = self._stub.GetPersistentSegmentInfo( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) + return response.infos + + def _wait_for_flushed( + self, + segment_ids: List[int], + collection_name: str, + flush_ts: int, + timeout: Optional[float] = None, + **kwargs, + ): flush_ret = False + start = time.time() while not flush_ret: - flush_ret = self.get_flush_state(segment_ids, timeout=timeout, **kwargs) + flush_ret = self.get_flush_state( + segment_ids, collection_name, flush_ts, timeout, **kwargs + ) + end = time.time() + if timeout is not None and end - start > timeout: + raise MilvusException( + message=f"wait for flush timeout, collection: {collection_name}, flusht_ts: {flush_ts}" + ) + if not flush_ret: time.sleep(0.5) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def flush(self, collection_names: list, timeout=None, **kwargs): + @retry_on_rpc_failure(initial_back_off=1) + def flush(self, collection_names: list, timeout: Optional[float] = None, **kwargs): if collection_names in (None, []) or not isinstance(collection_names, list): - raise ParamError("Collection name list can not be None or empty") + raise ParamError(message="Collection name list can not be None or empty") + check_pass_param(timeout=timeout) for name in collection_names: check_pass_param(collection_name=name) request = Prepare.flush_param(collection_names) - future = self._stub.Flush.future(request, wait_for_ready=True, timeout=timeout) + future = self._stub.Flush.future(request, timeout=timeout, metadata=_api_level_md(**kwargs)) response = future.result() - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) + check_status(response.status) def _check(): for collection_name in collection_names: segment_ids = future.result().coll_segIDs[collection_name].data - self._wait_for_flushed(segment_ids) + flush_ts = future.result().coll_flush_ts[collection_name] + self._wait_for_flushed(segment_ids, collection_name, flush_ts, timeout=timeout) if kwargs.get("_async", False): flush_future = FlushFuture(future) flush_future.add_callback(_check) - user_cb = kwargs.get("_callback", None) + user_cb = kwargs.get("_callback") if user_cb: flush_future.add_callback(user_cb) return flush_future _check() - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def drop_index(self, collection_name, field_name, index_name, timeout=None, **kwargs): - check_pass_param(collection_name=collection_name, field_name=field_name) + return None + + @retry_on_rpc_failure() + def drop_index( + self, + collection_name: str, + field_name: str, + index_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name, timeout=timeout) request = Prepare.drop_index_request(collection_name, field_name, index_name) - future = self._stub.DropIndex.future(request, wait_for_ready=True, timeout=timeout) - response = future.result() - if response.error_code != 0: - raise BaseException(response.error_code, response.reason) + response = self._stub.DropIndex(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def dummy(self, request_type, timeout=None, **kwargs): + @retry_on_rpc_failure() + def dummy(self, request_type: Any, timeout: Optional[float] = None, **kwargs): request = Prepare.dummy_request(request_type) - future = self._stub.Dummy.future(request, wait_for_ready=True, timeout=timeout) - return future.result() + return self._stub.Dummy(request, timeout=timeout, metadata=_api_level_md(**kwargs)) # TODO seems not in use - @error_handler - def fake_register_link(self, timeout=None): + @retry_on_rpc_failure() + def fake_register_link(self, timeout: Optional[float] = None, **kwargs): request = Prepare.register_link_request() - future = self._stub.RegisterLink.future(request, wait_for_ready=True, timeout=timeout) - return future.result().status + response = self._stub.RegisterLink( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + return response.status # TODO seems not in use - @error_handler - def get(self, collection_name, ids, output_fields=None, partition_names=None, timeout=None): + @retry_on_rpc_failure() + def get( + self, + collection_name: str, + ids: List[int], + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): # TODO: some check request = Prepare.retrieve_request(collection_name, ids, output_fields, partition_names) - future = self._stub.Retrieve.future(request, wait_for_ready=True, timeout=timeout) - return future.result() - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def query(self, collection_name, expr, output_fields=None, partition_names=None, timeout=None, **kwargs): + return self._stub.Retrieve(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + + @retry_on_rpc_failure() + def query( + self, + collection_name: str, + expr: str, + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + strict_float32: bool = False, + **kwargs, + ): if output_fields is not None and not isinstance(output_fields, (list,)): - raise ParamError("Invalid query format. 'output_fields' must be a list") - - collection_schema = self.describe_collection(collection_name, timeout) - collection_id = collection_schema["collection_id"] - consistency_level = collection_schema["consistency_level"] - # overwrite the consistency level defined when user created the collection - consistency_level = kwargs.get("consistency_level", consistency_level) - - ts_utils.construct_guarantee_ts(consistency_level, collection_id, kwargs) - guarantee_timestamp = kwargs.get("guarantee_timestamp", 0) - travel_timestamp = kwargs.get("travel_timestamp", 0) - - request = Prepare.query_request(collection_name, expr, output_fields, partition_names, guarantee_timestamp, - travel_timestamp) + raise ParamError(message="Invalid query format. 'output_fields' must be a list") + request = Prepare.query_request( + collection_name, expr, output_fields, partition_names, **kwargs + ) - future = self._stub.Query.future(request, wait_for_ready=True, timeout=timeout) - response = future.result() - if response.status.error_code == Status.EMPTY_COLLECTION: - return list() - if response.status.error_code != Status.SUCCESS: - raise BaseException(response.status.error_code, response.status.reason) + response = self._stub.Query(request, timeout=timeout, metadata=_api_level_md(**kwargs)) + if Status.EMPTY_COLLECTION in {response.status.code, response.status.error_code}: + return [] + check_status(response.status) num_fields = len(response.fields_data) # check has fields if num_fields == 0: - raise BaseException(0, "") + raise MilvusException(message="No fields returned") # check if all lists are of the same length it = iter(response.fields_data) num_entities = len_of(next(it)) if not all(len_of(field_data) == num_entities for field_data in it): - raise BaseException(0, "The length of fields data is inconsistent") - - # transpose - results = list() - for index in range(0, num_entities): - result = dict() - for field_data in response.fields_data: - if field_data.type == DataType.BOOL: - raise BaseException(0, "Not support bool yet") - # result[field_data.name] = field_data.field.scalars.data.bool_data[index] - elif field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32): - result[field_data.field_name] = field_data.scalars.int_data.data[index] - elif field_data.type == DataType.INT64: - result[field_data.field_name] = field_data.scalars.long_data.data[index] - elif field_data.type == DataType.FLOAT: - result[field_data.field_name] = round(field_data.scalars.float_data.data[index], 6) - elif field_data.type == DataType.DOUBLE: - result[field_data.field_name] = field_data.scalars.double_data.data[index] - elif field_data.type == DataType.STRING: - raise BaseException(0, "Not support string yet") - # result[field_data.field_name] = field_data.scalars.string_data.data[index] - elif field_data.type == DataType.FLOAT_VECTOR: - dim = field_data.vectors.dim - start_pos = index * dim - end_pos = index * dim + dim - result[field_data.field_name] = [round(x, 6) for x in - field_data.vectors.float_vector.data[start_pos:end_pos]] - elif field_data.type == DataType.BINARY_VECTOR: - dim = field_data.vectors.dim - start_pos = index * (int(dim / 8)) - end_pos = (index + 1) * (int(dim / 8)) - result[field_data.field_name] = field_data.vectors.binary_vector[start_pos:end_pos] - results.append(result) - - return results - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def calc_distance(self, vectors_left, vectors_right, params, timeout=30, **kwargs): - # both "metric" or "metric_type" are ok - params = params or {"metric": config.CALC_DIST_METRIC} - if "metric_type" in params.keys(): - params["metric"] = params["metric_type"] - params.pop("metric_type") - - req = Prepare.calc_distance_request(vectors_left, vectors_right, params) - future = self._stub.CalcDistance.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() - status = response.status - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) - if len(response.int_dist.data) > 0: - return response.int_dist.data - elif len(response.float_dist.data) > 0: - def is_l2(val): - return val == "L2" or val == "l2" - - if is_l2(params["metric"]) and "sqrt" in params.keys() and params["sqrt"] is True: - for i in range(len(response.float_dist.data)): - response.float_dist.data[i] = math.sqrt(response.float_dist.data[i]) - return response.float_dist.data - raise BaseException(0, "Empty result returned") - - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def load_balance(self, src_node_id, dst_node_ids, sealed_segment_ids, timeout=None, **kwargs): - req = Prepare.load_balance_request(src_node_id, dst_node_ids, sealed_segment_ids) - future = self._stub.LoadBalance.future(req, wait_for_ready=True, timeout=timeout) - status = future.result() - if status.error_code != 0: - raise BaseException(status.error_code, status.reason) - - @error_handler - def compact(self, collection_name, timeout=None, **kwargs) -> int: - request = Prepare.describe_collection_request(collection_name) - rf = self._stub.DescribeCollection.future(request, wait_for_ready=True, timeout=timeout) - response = rf.result() - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) - - req = Prepare.manual_compaction(response.collectionID, 0) - future = self._stub.ManualCompaction.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) + raise MilvusException(message="The length of fields data is inconsistent") + + _, dynamic_fields = entity_helper.extract_dynamic_field_from_result(response) + + keys = [field_data.field_name for field_data in response.fields_data] + filtered_keys = [k for k in keys if k != "$meta"] + results = [dict.fromkeys(filtered_keys) for _ in range(num_entities)] + lazy_field_data = [] + for field_data in response.fields_data: + lazy_extracted = entity_helper.extract_row_data_from_fields_data_v2(field_data, results) + if lazy_extracted: + lazy_field_data.append(field_data) + + extra_dict = get_extra_info(response.status) + extra_dict[ITERATOR_SESSION_TS_FIELD] = response.session_ts + return HybridExtraList( + lazy_field_data, + results, + extra=extra_dict, + dynamic_fields=dynamic_fields, + strict_float32=strict_float32, + ) + @retry_on_rpc_failure() + def load_balance( + self, + collection_name: str, + src_node_id: int, + dst_node_ids: List[int], + sealed_segment_ids: List[int], + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.load_balance_request( + collection_name, src_node_id, dst_node_ids, sealed_segment_ids + ) + status = self._stub.LoadBalance(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(status) + + @retry_on_rpc_failure() + def compact( + self, + collection_name: str, + is_clustering: Optional[bool] = False, + is_l0: Optional[bool] = False, + target_size: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> int: + meta = _api_level_md(**kwargs) + # try with only collection_name + req = Prepare.manual_compaction( + collection_name=collection_name, + is_clustering=is_clustering, + is_l0=is_l0, + target_size=target_size, + ) + response = self._stub.ManualCompaction(req, timeout=timeout, metadata=meta) + if response.status.error_code == common_pb2.CollectionNameNotFound: + # should be removed, but to be compatible with old milvus server, keep it for now. + request = Prepare.describe_collection_request(collection_name) + response = self._stub.DescribeCollection(request, timeout=timeout, metadata=meta) + check_status(response.status) + + req = Prepare.manual_compaction( + collection_name, is_clustering, response.collectionID, target_size + ) + response = self._stub.ManualCompaction(req, timeout=timeout, metadata=meta) + check_status(response.status) return response.compactionID - @error_handler - def get_compaction_state(self, compaction_id, timeout=None, **kwargs) -> CompactionState: + @retry_on_rpc_failure() + def get_compaction_state( + self, compaction_id: int, timeout: Optional[float] = None, **kwargs + ) -> CompactionState: req = Prepare.get_compaction_state(compaction_id) - - future = self._stub.GetCompactionState.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) + response = self._stub.GetCompactionState( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) return CompactionState( compaction_id, State.new(response.state), response.executingPlanNo, response.timeoutPlanNo, - response.completedPlanNo + response.completedPlanNo, ) - @retry_on_rpc_failure(retry_times=10, wait=1) - @error_handler - def wait_for_compaction_completed(self, compaction_id, timeout=None, **kwargs): + @retry_on_rpc_failure() + def wait_for_compaction_completed( + self, compaction_id: int, timeout: Optional[float] = None, **kwargs + ): start = time.time() while True: time.sleep(0.5) @@ -1121,21 +1911,619 @@ def wait_for_compaction_completed(self, compaction_id, timeout=None, **kwargs): if compaction_state == State.UndefiedState: return False end = time.time() - if timeout is not None: - if end - start > timeout: - raise BaseException(1, "Get compaction state timeout") - - @error_handler - def get_compaction_plans(self, compaction_id, timeout=None, **kwargs) -> CompactionPlans: + if timeout is not None and end - start > timeout: + raise MilvusException( + message=f"get compaction state timeout, compaction id: {compaction_id}" + ) + + @retry_on_rpc_failure() + def get_compaction_plans( + self, compaction_id: int, timeout: Optional[float] = None, **kwargs + ) -> CompactionPlans: req = Prepare.get_compaction_state_with_plans(compaction_id) - future = self._stub.GetCompactionStateWithPlans.future(req, wait_for_ready=True, timeout=timeout) - response = future.result() - if response.status.error_code != 0: - raise BaseException(response.status.error_code, response.status.reason) + response = self._stub.GetCompactionStateWithPlans( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(response.status) cp = CompactionPlans(compaction_id, response.state) cp.plans = [Plan(m.sources, m.target) for m in response.mergeInfos] return cp + + @retry_on_rpc_failure() + def get_replicas( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> Replica: + collection_id = self.describe_collection(collection_name, timeout, **kwargs)[ + "collection_id" + ] + + req = Prepare.get_replicas(collection_id) + response = self._stub.GetReplicas(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response.status) + + groups = [] + for replica in response.replicas: + shards = [ + Shard(s.dm_channel_name, s.node_ids, s.leaderID) for s in replica.shard_replicas + ] + groups.append( + Group( + replica.replicaID, + shards, + replica.node_ids, + replica.resource_group_name, + replica.num_outbound_node, + ) + ) + + return Replica(groups) + + @retry_on_rpc_failure() + def describe_replica( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[ReplicaInfo]: + collection_id = self.describe_collection(collection_name, timeout, **kwargs)[ + "collection_id" + ] + + req = Prepare.get_replicas(collection_id) + response = self._stub.GetReplicas(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response.status) + + groups = [] + for replica in response.replicas: + shards = [ + Shard(s.dm_channel_name, s.node_ids, s.leaderID) for s in replica.shard_replicas + ] + groups.append( + ReplicaInfo( + replica.replicaID, + shards, + replica.node_ids, + replica.resource_group_name, + replica.num_outbound_node, + ) + ) + + return groups + + @retry_on_rpc_failure() + def do_bulk_insert( + self, + collection_name: str, + partition_name: str, + files: List[str], + timeout: Optional[float] = None, + **kwargs, + ) -> int: + req = Prepare.do_bulk_insert(collection_name, partition_name, files, **kwargs) + response = self._stub.Import(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(response.status) + if len(response.tasks) == 0: + raise MilvusException( + ErrorCode.UNEXPECTED_ERROR, + "no task id returned from server", + common_pb2.UnexpectedError, + ) + return response.tasks[0] + + @retry_on_rpc_failure() + def get_bulk_insert_state( + self, task_id: int, timeout: Optional[float] = None, **kwargs + ) -> BulkInsertState: + req = Prepare.get_bulk_insert_state(task_id) + resp = self._stub.GetImportState(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp.status) + return BulkInsertState( + task_id, resp.state, resp.row_count, resp.id_list, resp.infos, resp.create_ts + ) + + @retry_on_rpc_failure() + def list_bulk_insert_tasks( + self, limit: int, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> list: + req = Prepare.list_bulk_insert_tasks(limit, collection_name) + resp = self._stub.ListImportTasks(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp.status) + + return [ + BulkInsertState(t.id, t.state, t.row_count, t.id_list, t.infos, t.create_ts) + for t in resp.tasks + ] + + @retry_on_rpc_failure() + def create_user(self, user: str, password: str, timeout: Optional[float] = None, **kwargs): + check_pass_param(user=user, password=password, timeout=timeout) + req = Prepare.create_user_request(user, password) + resp = self._stub.CreateCredential(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp) + + @retry_on_rpc_failure() + def update_password( + self, + user: str, + old_password: str, + new_password: str, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.update_password_request(user, old_password, new_password) + resp = self._stub.UpdateCredential(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp) + + @retry_on_rpc_failure() + def delete_user(self, user: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.delete_user_request(user) + resp = self._stub.DeleteCredential(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp) + + @retry_on_rpc_failure() + def list_usernames(self, timeout: Optional[float] = None, **kwargs): + req = Prepare.list_usernames_request() + resp = self._stub.ListCredUsers(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp.status) + return resp.usernames + + @retry_on_rpc_failure() + def create_role(self, role_name: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.create_role_request(role_name) + resp = self._stub.CreateRole( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def drop_role( + self, role_name: str, force_drop: bool = False, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.drop_role_request(role_name, force_drop=force_drop) + resp = self._stub.DropRole( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def add_user_to_role( + self, username: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.operate_user_role_request( + username, role_name, milvus_types.OperateUserRoleType.AddUserToRole + ) + resp = self._stub.OperateUserRole( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def remove_user_from_role( + self, username: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.operate_user_role_request( + username, role_name, milvus_types.OperateUserRoleType.RemoveUserFromRole + ) + resp = self._stub.OperateUserRole( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def select_one_role( + self, role_name: str, include_user_info: bool, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.select_role_request(role_name, include_user_info) + resp = self._stub.SelectRole( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return RoleInfo(resp.results) + + @retry_on_rpc_failure() + def select_all_role(self, include_user_info: bool, timeout: Optional[float] = None, **kwargs): + req = Prepare.select_role_request(None, include_user_info) + resp = self._stub.SelectRole( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return RoleInfo(resp.results) + + @retry_on_rpc_failure() + def select_one_user( + self, username: str, include_role_info: bool, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.select_user_request(username, include_role_info) + resp = self._stub.SelectUser( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return UserInfo(resp.results) + + @retry_on_rpc_failure() + def select_all_user(self, include_role_info: bool, timeout: Optional[float] = None, **kwargs): + req = Prepare.select_user_request(None, include_role_info) + resp = self._stub.SelectUser( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return UserInfo(resp.results) + + @retry_on_rpc_failure() + def grant_privilege( + self, + role_name: str, + object: str, + object_name: str, + privilege: str, + db_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.operate_privilege_request( + role_name, + object, + object_name, + privilege, + db_name, + milvus_types.OperatePrivilegeType.Grant, + ) + resp = self._stub.OperatePrivilege( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def revoke_privilege( + self, + role_name: str, + object: str, + object_name: str, + privilege: str, + db_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.operate_privilege_request( + role_name, + object, + object_name, + privilege, + db_name, + milvus_types.OperatePrivilegeType.Revoke, + ) + resp = self._stub.OperatePrivilege( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def grant_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.operate_privilege_v2_request( + role_name, + privilege, + milvus_types.OperatePrivilegeType.Grant, + db_name, + collection_name, + ) + resp = self._stub.OperatePrivilegeV2( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def revoke_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.operate_privilege_v2_request( + role_name, + privilege, + milvus_types.OperatePrivilegeType.Revoke, + db_name, + collection_name, + ) + resp = self._stub.OperatePrivilegeV2( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def select_grant_for_one_role( + self, role_name: str, db_name: str, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.select_grant_request(role_name, None, None, db_name) + resp = self._stub.SelectGrant( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return GrantInfo(resp.entities) + + @retry_on_rpc_failure() + def select_grant_for_role_and_object( + self, + role_name: str, + object: str, + object_name: str, + db_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.select_grant_request(role_name, object, object_name, db_name) + resp = self._stub.SelectGrant( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return GrantInfo(resp.entities) + + @retry_on_rpc_failure() + def get_server_version(self, timeout: Optional[float] = None, **kwargs) -> str: + req = Prepare.get_server_version() + resp = self._stub.GetVersion(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp.status) + return resp.version + + @retry_on_rpc_failure() + def create_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.create_resource_group(name, **kwargs) + resp = self._stub.CreateResourceGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def update_resource_groups( + self, configs: Mapping[str, ResourceGroupConfig], timeout: Optional[float] = None, **kwargs + ): + req = Prepare.update_resource_groups(configs) + resp = self._stub.UpdateResourceGroups( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def drop_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.drop_resource_group(name) + resp = self._stub.DropResourceGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def list_resource_groups(self, timeout: Optional[float] = None, **kwargs): + req = Prepare.list_resource_groups() + resp = self._stub.ListResourceGroups( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return list(resp.resource_groups) + + @retry_on_rpc_failure() + def describe_resource_group( + self, name: str, timeout: Optional[float] = None, **kwargs + ) -> ResourceGroupInfo: + req = Prepare.describe_resource_group(name) + resp = self._stub.DescribeResourceGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return ResourceGroupInfo(resp.resource_group) + + @retry_on_rpc_failure() + def transfer_node( + self, source: str, target: str, num_node: int, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.transfer_node(source, target, num_node) + resp = self._stub.TransferNode( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def transfer_replica( + self, + source: str, + target: str, + collection_name: str, + num_replica: int, + timeout: Optional[float] = None, + **kwargs, + ): + req = Prepare.transfer_replica(source, target, collection_name, num_replica) + resp = self._stub.TransferReplica( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def get_flush_all_state(self, flush_all_ts: int, timeout: Optional[float] = None, **kwargs): + req = Prepare.get_flush_all_state_request(flush_all_ts, kwargs.get("db", "")) + response = self._stub.GetFlushAllState( + req, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + status = response.status + check_status(status) + return response.flushed + + def _wait_for_flush_all(self, flush_all_ts: int, timeout: Optional[float] = None, **kwargs): + flush_ret = False + start = time.time() + while not flush_ret: + flush_ret = self.get_flush_all_state(flush_all_ts, timeout, **kwargs) + end = time.time() + if timeout is not None and end - start > timeout: + raise MilvusException( + message=f"wait for flush all timeout, flush_all_ts: {flush_all_ts}" + ) + + if not flush_ret: + time.sleep(5) + + @retry_on_rpc_failure() + def flush_all(self, timeout: Optional[float] = None, **kwargs): + request = Prepare.flush_all_request(kwargs.get("db", "")) + future = self._stub.FlushAll.future( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + response = future.result() + check_status(response.status) + + def _check(): + self._wait_for_flush_all(response.flush_all_ts, timeout, **kwargs) + + if kwargs.get("_async", False): + flush_future = FlushFuture(future) + flush_future.add_callback(_check) + + user_cb = kwargs.get("_callback") + if user_cb: + flush_future.add_callback(user_cb) + + return flush_future + + _check() + return None + + @retry_on_rpc_failure() + @upgrade_reminder + def __internal_register(self, user: str, host: str, **kwargs) -> int: + req = Prepare.register_request(user, host) + response = self._stub.Connect(request=req) + check_status(response.status) + return response.identifier + + @retry_on_rpc_failure() + @ignore_unimplemented(0) + def alloc_timestamp(self, timeout: Optional[float] = None, **kwargs) -> int: + request = milvus_types.AllocTimestampRequest() + response = self._stub.AllocTimestamp(request, timeout=timeout, metadata=_api_level_md()) + check_status(response.status) + return response.timestamp + + @retry_on_rpc_failure() + def create_privilege_group( + self, privilege_group: str, timeout: Optional[float] = None, **kwargs + ): + req = Prepare.create_privilege_group_req(privilege_group) + resp = self._stub.CreatePrivilegeGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def drop_privilege_group(self, privilege_group: str, timeout: Optional[float] = None, **kwargs): + req = Prepare.drop_privilege_group_req(privilege_group) + resp = self._stub.DropPrivilegeGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def list_privilege_groups(self, timeout: Optional[float] = None, **kwargs): + req = Prepare.list_privilege_groups_req() + resp = self._stub.ListPrivilegeGroups( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp.status) + return PrivilegeGroupInfo(resp.privilege_groups) + + @retry_on_rpc_failure() + def add_privileges_to_group( + self, privilege_group: str, privileges: List[str], timeout: Optional[float] = None, **kwargs + ): + req = Prepare.operate_privilege_group_req( + privilege_group, privileges, milvus_types.OperatePrivilegeGroupType.AddPrivilegesToGroup + ) + resp = self._stub.OperatePrivilegeGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def remove_privileges_from_group( + self, privilege_group: str, privileges: List[str], timeout: Optional[float] = None, **kwargs + ): + req = Prepare.operate_privilege_group_req( + privilege_group, + privileges, + milvus_types.OperatePrivilegeGroupType.RemovePrivilegesFromGroup, + ) + resp = self._stub.OperatePrivilegeGroup( + req, wait_for_ready=True, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(resp) + + @retry_on_rpc_failure() + def run_analyzer( + self, + texts: Union[str, List[str]], + analyzer_params: Optional[Union[str, Dict]] = None, + with_hash: bool = False, + with_detail: bool = False, + collection_name: Optional[str] = None, + field_name: Optional[str] = None, + analyzer_names: Optional[Union[str, List[str]]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + check_pass_param(timeout=timeout) + req = Prepare.run_analyzer( + texts, + analyzer_params=analyzer_params, + with_hash=with_hash, + with_detail=with_detail, + collection_name=collection_name, + field_name=field_name, + analyzer_names=analyzer_names, + ) + resp = self._stub.RunAnalyzer(req, timeout=timeout, metadata=_api_level_md(**kwargs)) + check_status(resp.status) + + if isinstance(texts, str): + return AnalyzeResult(resp.results[0], with_hash, with_detail) + return [AnalyzeResult(result, with_hash, with_detail) for result in resp.results] + + @retry_on_rpc_failure() + def update_replicate_configuration( + self, + clusters: Optional[List[Dict]] = None, + cross_cluster_topology: Optional[List[Dict]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """ + Update replication configuration across Milvus clusters. + + Args: + clusters: The replication configuration to apply + cross_cluster_topology: The replication configuration to apply + timeout: An optional duration of time in seconds to allow for the RPC + **kwargs: Additional arguments + + Returns: + Status: The status of the operation + """ + request = Prepare.update_replicate_configuration_request( + clusters=clusters, + cross_cluster_topology=cross_cluster_topology, + ) + + status = self._stub.UpdateReplicateConfiguration( + request, timeout=timeout, metadata=_api_level_md(**kwargs) + ) + check_status(status) + return status diff --git a/pymilvus/client/interceptor.py b/pymilvus/client/interceptor.py new file mode 100644 index 000000000..e79ff0d6f --- /dev/null +++ b/pymilvus/client/interceptor.py @@ -0,0 +1,118 @@ +# Copyright 2017 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Base class for interceptors that operate on all RPC types.""" + +import time +from typing import Any, Callable, List, NamedTuple, Optional, Tuple + +import grpc + + +def current_time_ms() -> str: + return str(time.time_ns() // 1_000_000) + + +def _api_level_md(**kwargs) -> Optional[List[Tuple]]: + metadata = [] + metadata.append(("client-request-unixmsec", current_time_ms())) + client_request_id = kwargs.get("client-request-id", kwargs.get("client_request_id")) + if client_request_id: + metadata.append(("client-request-id", client_request_id)) + return metadata + + +class _GenericClientInterceptor( + grpc.UnaryUnaryClientInterceptor, + grpc.UnaryStreamClientInterceptor, + grpc.StreamUnaryClientInterceptor, + grpc.StreamStreamClientInterceptor, +): + def __init__(self, interceptor_function: Callable) -> None: + super().__init__() + self._fn = interceptor_function + + def intercept_unary_unary(self, continuation: Callable, client_call_details: Any, request: Any): + new_details, new_request_iterator, postprocess = self._fn( + client_call_details, iter((request,)) + ) + response = continuation(new_details, next(new_request_iterator)) + return postprocess(response) if postprocess else response + + def intercept_unary_stream( + self, + continuation: Callable, + client_call_details: Any, + request: Any, + ): + new_details, new_request_iterator, postprocess = self._fn( + client_call_details, iter((request,)) + ) + response_it = continuation(new_details, next(new_request_iterator)) + return postprocess(response_it) if postprocess else response_it + + def intercept_stream_unary( + self, + continuation: Callable, + client_call_details: Any, + request_iterator: Any, + ): + new_details, new_request_iterator, postprocess = self._fn( + client_call_details, request_iterator + ) + response = continuation(new_details, new_request_iterator) + return postprocess(response) if postprocess else response + + def intercept_stream_stream( + self, + continuation: Callable, + client_call_details: Any, + request_iterator: Any, + ): + new_details, new_request_iterator, postprocess = self._fn( + client_call_details, request_iterator + ) + response_it = continuation(new_details, new_request_iterator) + return postprocess(response_it) if postprocess else response_it + + +class ClientCallDetailsTuple(NamedTuple): + method: Any + timeout: Any + metadata: Any + credentials: Any + + +class _ClientCallDetails(ClientCallDetailsTuple, grpc.ClientCallDetails): + pass + + +def header_adder_interceptor(headers: List, values: List): + def intercept_call( + client_call_details: Any, + request_iterator: Any, + ): + metadata = [] + if client_call_details.metadata is not None: + metadata = list(client_call_details.metadata) + for item in zip(headers, values): + metadata.append(item) + client_call_details = _ClientCallDetails( + client_call_details.method, + client_call_details.timeout, + metadata, + client_call_details.credentials, + ) + return client_call_details, request_iterator, None + + return _GenericClientInterceptor(intercept_call) diff --git a/pymilvus/client/prepare.py b/pymilvus/client/prepare.py index 15a7fc79e..f2d39b5df 100644 --- a/pymilvus/client/prepare.py +++ b/pymilvus/client/prepare.py @@ -1,150 +1,424 @@ -import copy -import ujson +import base64 +import datetime +import json +from typing import Any, Dict, Iterable, List, Mapping, Optional, Union + +import numpy as np +import orjson + +from pymilvus.exceptions import DataNotMatchException, ExceptionsMessage, ParamError +from pymilvus.grpc_gen import common_pb2 +from pymilvus.grpc_gen import common_pb2 as common_types +from pymilvus.grpc_gen import milvus_pb2 as milvus_types +from pymilvus.grpc_gen import schema_pb2 as schema_types +from pymilvus.orm.schema import ( + CollectionSchema, + FieldSchema, + Function, + FunctionScore, + isVectorDataType, +) +from pymilvus.orm.types import infer_dtype_by_scalar_data +from pymilvus.settings import Config + +from . import __version__, blob, check, entity_helper, ts_utils, utils +from .abstract import BaseRanker +from .check import check_pass_param, is_legal_collection_properties +from .constants import ( + COLLECTION_ID, + DEFAULT_CONSISTENCY_LEVEL, + DYNAMIC_FIELD_NAME, + GROUP_BY_FIELD, + GROUP_SIZE, + HINTS, + IS_EMBEDDING_LIST, + ITER_SEARCH_BATCH_SIZE_KEY, + ITER_SEARCH_ID_KEY, + ITER_SEARCH_LAST_BOUND_KEY, + ITER_SEARCH_V2_KEY, + ITERATOR_FIELD, + JSON_PATH, + JSON_TYPE, + PAGE_RETAIN_ORDER_FIELD, + RANK_GROUP_SCORER, + REDUCE_STOP_FOR_BEST, + STRICT_CAST, + STRICT_GROUP_SIZE, +) +from .entity_helper import convert_to_array, convert_to_array_of_vector +from .types import ( + DataType, + PlaceholderType, + ResourceGroupConfig, + get_consistency_level, +) +from .utils import get_params, traverse_info, traverse_upsert_info -from . import blob -from .configs import DefaultConfigs -from .exceptions import ParamError -from .check import check_pass_param -from .types import DataType, PlaceholderType -from .types import get_consistency_level -from .constants import DEFAULT_CONSISTENCY_LEVEL -from ..grpc_gen import common_pb2 as common_types -from ..grpc_gen import schema_pb2 as schema_types -from ..grpc_gen import milvus_pb2 as milvus_types +class Prepare: + @classmethod + def create_collection_request( + cls, + collection_name: str, + fields: Union[Dict[str, Iterable], CollectionSchema], + **kwargs, + ) -> milvus_types.CreateCollectionRequest: + """ + Args: + fields (Union(Dict[str, Iterable], CollectionSchema)). + + {"fields": [ + {"name": "A", "type": DataType.INT32} + {"name": "B", "type": DataType.INT64, "auto_id": True, "is_primary": True}, + {"name": "C", "type": DataType.FLOAT}, + {"name": "Vec", "type": DataType.FLOAT_VECTOR, "params": {"dim": 128}}] + } + + Returns: + milvus_types.CreateCollectionRequest + """ + if isinstance(fields, CollectionSchema): + schema = cls.get_schema_from_collection_schema(collection_name, fields) + else: + schema = cls.get_schema(collection_name, fields, **kwargs) -class Prepare: + consistency_level = get_consistency_level( + kwargs.get("consistency_level", DEFAULT_CONSISTENCY_LEVEL) + ) + + req = milvus_types.CreateCollectionRequest( + collection_name=collection_name, + schema=bytes(schema.SerializeToString()), + consistency_level=consistency_level, + ) + + properties = kwargs.get("properties") + if is_legal_collection_properties(properties): + properties = [ + common_types.KeyValuePair(key=str(k), value=str(v)) for k, v in properties.items() + ] + req.properties.extend(properties) + + same_key = set(kwargs.keys()).intersection({"num_shards", "shards_num"}) + if len(same_key) > 0: + if len(same_key) > 1: + msg = "got both num_shards and shards_num in kwargs, expected only one of them" + raise ParamError(message=msg) + + num_shards = kwargs[next(iter(same_key))] + if not isinstance(num_shards, int): + msg = f"invalid num_shards type, got {type(num_shards)}, expected int" + raise ParamError(message=msg) + req.shards_num = num_shards + + num_partitions = kwargs.get("num_partitions") + if num_partitions is not None: + if not isinstance(num_partitions, int) or isinstance(num_partitions, bool): + msg = f"invalid num_partitions type, got {type(num_partitions)}, expected int" + raise ParamError(message=msg) + if num_partitions < 1: + msg = f"The specified num_partitions should be greater than or equal to 1, got {num_partitions}" + raise ParamError(message=msg) + req.num_partitions = num_partitions + + return req @classmethod - def create_collection_request(cls, collection_name, fields, shards_num=2, **kwargs): - """ - :type param: dict - :param param: (Required) - - ` {"fields": [ - {"field": "A", "type": DataType.INT32} - {"field": "B", "type": DataType.INT64, "auto_id": True}, - {"field": "C", "type": DataType.FLOAT}, - {"field": "Vec", "type": DataType.FLOAT_VECTOR, - "params": {"dim": 128}} - ] - }` + def get_schema_from_collection_schema( + cls, + collection_name: str, + fields: CollectionSchema, + ) -> schema_types.CollectionSchema: + coll_description = fields.description + if not isinstance(coll_description, (str, bytes)): + msg = ( + f"description [{coll_description}] has type {type(coll_description).__name__}, " + "but expected one of: bytes, str" + ) + raise ParamError(message=msg) - :return: ttypes.TableSchema object - """ + schema = schema_types.CollectionSchema( + name=collection_name, + autoID=fields.auto_id, + description=coll_description, + enable_dynamic_field=fields.enable_dynamic_field, + ) + for f in fields.fields: + field_schema = schema_types.FieldSchema( + name=f.name, + data_type=f.dtype, + description=f.description, + is_primary_key=f.is_primary, + default_value=f.default_value, + nullable=f.nullable, + autoID=f.auto_id, + is_partition_key=f.is_partition_key, + is_dynamic=f.is_dynamic, + element_type=f.element_type, + is_clustering_key=f.is_clustering_key, + is_function_output=f.is_function_output, + ) + for k, v in f.params.items(): + kv_pair = common_types.KeyValuePair( + key=str(k) if k != "mmap_enabled" else "mmap.enabled", + value=( + orjson.dumps(v).decode(Config.EncodeProtocol) + if not isinstance(v, str) + else str(v) + ), + ) + field_schema.type_params.append(kv_pair) + + schema.fields.append(field_schema) + + for struct in fields.struct_fields: + # Validate that max_capacity is set + if struct.max_capacity is None: + raise ParamError(message=f"max_capacity not set for struct field: {struct.name}") + + struct_schema = schema_types.StructArrayFieldSchema( + name=struct.name, + fields=[], + description=struct.description, + ) + if struct.params: + for k, v in struct.params.items(): + kv_pair = common_types.KeyValuePair( + key=str(k) if k != "mmap_enabled" else "mmap.enabled", + value=( + orjson.dumps(v).decode(Config.EncodeProtocol) + if not isinstance(v, str) + else str(v) + ), + ) + struct_schema.type_params.append(kv_pair) + + for f in struct.fields: + # Convert struct field types to backend representation + # As struct itself only support array type, so all it's fields are array type + # internally + # So we need to convert the fields to array types + actual_dtype = f.dtype + actual_element_type = None + + # Convert to appropriate array type + if isVectorDataType(f.dtype): + actual_dtype = DataType._ARRAY_OF_VECTOR + actual_element_type = f.dtype + else: + actual_dtype = DataType.ARRAY + actual_element_type = f.dtype + + field_schema = schema_types.FieldSchema( + name=f.name, + data_type=actual_dtype, + description=f.description, + is_primary_key=f.is_primary, + default_value=f.default_value, + nullable=f.nullable, + autoID=f.auto_id, + is_partition_key=f.is_partition_key, + is_dynamic=f.is_dynamic, + element_type=actual_element_type, + is_clustering_key=f.is_clustering_key, + is_function_output=f.is_function_output, + ) + + # Copy field params and add max_capacity from struct_schema + field_params = dict(f.params) if f.params else {} + # max_capacity is required for struct fields + field_params["max_capacity"] = struct.max_capacity + + for k, v in field_params.items(): + kv_pair = common_types.KeyValuePair( + key=str(k) if k != "mmap_enabled" else "mmap.enabled", value=json.dumps(v) + ) + field_schema.type_params.append(kv_pair) + struct_schema.fields.append(field_schema) + + schema.struct_array_fields.append(struct_schema) + + for f in fields.functions: + function_schema = schema_types.FunctionSchema( + name=f.name, + description=f.description, + type=f.type, + input_field_names=f.input_field_names, + output_field_names=f.output_field_names, + ) + for k, v in f.params.items(): + kv_pair = common_types.KeyValuePair(key=str(k), value=str(v)) + function_schema.params.append(kv_pair) + schema.functions.append(function_schema) + + return schema + + @staticmethod + def get_field_schema( + field: Dict, + primary_field: Optional[str] = None, + auto_id_field: Optional[str] = None, + ) -> (schema_types.FieldSchema, Optional[str], Optional[str]): + field_name = field.get("name") + if field_name is None: + raise ParamError(message="You should specify the name of field!") + + data_type = field.get("type") + if data_type is None: + raise ParamError(message="You should specify the data type of field!") + if not isinstance(data_type, (int, DataType)): + raise ParamError(message="Field type must be of DataType!") + + is_primary = field.get("is_primary", False) + if not isinstance(is_primary, bool): + raise ParamError(message="is_primary must be boolean") + if is_primary: + if primary_field is not None: + raise ParamError(message="A collection should only have one primary field") + if DataType(data_type) not in [DataType.INT64, DataType.VARCHAR]: + msg = "int64 and varChar are the only supported types of primary key" + raise ParamError(message=msg) + primary_field = field_name + + nullable = field.get("nullable", False) + if not isinstance(nullable, bool): + raise ParamError(message="nullable must be boolean") + + auto_id = field.get("auto_id", False) + if not isinstance(auto_id, bool): + raise ParamError(message="auto_id must be boolean") + if auto_id: + if auto_id_field is not None: + raise ParamError(message="A collection should only have one autoID field") + if DataType(data_type) != DataType.INT64: + msg = "int64 is the only supported type of automatic generated id" + raise ParamError(message=msg) + auto_id_field = field_name + + field_schema = schema_types.FieldSchema( + name=field_name, + data_type=data_type, + description=field.get("description", ""), + is_primary_key=is_primary, + autoID=auto_id, + is_partition_key=field.get("is_partition_key", False), + is_clustering_key=field.get("is_clustering_key", False), + nullable=nullable, + default_value=field.get("default_value"), + element_type=field.get("element_type"), + ) + + type_params = field.get("params", {}) + if not isinstance(type_params, dict): + raise ParamError(message="params should be dictionary type") + kvs = [ + common_types.KeyValuePair( + key=str(k) if k != "mmap_enabled" else "mmap.enabled", + value=str(v), + ) + for k, v in type_params.items() + ] + field_schema.type_params.extend(kvs) + + return field_schema, primary_field, auto_id_field + + @classmethod + def get_schema( + cls, + collection_name: str, + fields: Dict[str, Iterable], + **kwargs, + ) -> schema_types.CollectionSchema: if not isinstance(fields, dict): - raise ParamError("Param fields must be a dict") - - if "fields" not in fields: - raise ParamError("Param fields must contains key 'fields'") - - schema = schema_types.CollectionSchema(name=collection_name) - - # auto_id = fields.get('auto_id', True) - schema.autoID = False - - primary_field = None - auto_id_field = None - for fk, fv in fields.items(): - if fk != 'fields': - if fk == 'description': - schema.description = fv - continue - - for field in fv: - field_schema = schema_types.FieldSchema() - - field_name = field.get('name') - if field_name is None: - raise ParamError("You should specify the name of field!") - field_schema.name = field_name - - data_type = field.get('type') - if data_type is None: - raise ParamError("You should specify the data type of field!") - if not isinstance(data_type, (int, DataType)): - raise ParamError("Field type must be of DataType!") - field_schema.data_type = data_type - - field_schema.description = field.get('description', "") - - is_primary = field.get("is_primary", False) - auto_id = field.get('auto_id', False) - - if is_primary and primary_field: - raise ParamError("A collection should only have a primary field") - - if auto_id and auto_id_field: - if DataType(data_type) != DataType.INT64: - raise ParamError("int64 is the only supported type of automatic generated id") - raise ParamError("A collection should only have a field whose id is automatically generated") - - if is_primary: - if DataType(data_type) != DataType.INT64: - raise ParamError("int64 is the only supported type of primary key") - primary_field = field_name - - if auto_id: - auto_id_field = field_name - - field_schema.is_primary_key = is_primary - field_schema.autoID = auto_id - - type_params = field.get('params') - if isinstance(type_params, dict): - for tk, tv in type_params.items(): - if tk == "dim": - try: - int(tv) - except (TypeError, ValueError): - raise ParamError("invalid dim: " + str(tv)) from None - kv_pair = common_types.KeyValuePair(key=str(tk), value=str(tv)) - field_schema.type_params.append(kv_pair) - - # No longer supported - # index_params = field.get('indexes') - # if isinstance(index_params, list): - # for index_param in index_params: - # if not isinstance(index_param, dict): - # raise ParamError("Every index param must be of dict type!") - # for ik, iv in index_param.items(): - # if ik == "metric_type": - # if not isinstance(iv, MetricType) and not isinstance(iv, str): - # raise ParamError("metric_type must be of Milvus.MetricType or str!") - # kv_pair = common_types.KeyValuePair(key=str(ik), value=str(iv)) - # field_schema.index_params.append(kv_pair) - - schema.fields.append(field_schema) - - consistency_level = get_consistency_level(kwargs.get("consistency_level", DEFAULT_CONSISTENCY_LEVEL)) - return milvus_types.CreateCollectionRequest(collection_name=collection_name, - schema=bytes(schema.SerializeToString()), shards_num=shards_num, - consistency_level=consistency_level) - - @classmethod - def drop_collection_request(cls, collection_name): + raise ParamError(message="Param fields must be a dict") + + all_fields = fields.get("fields") + if all_fields is None: + raise ParamError(message="Param fields must contain key 'fields'") + if len(all_fields) == 0: + raise ParamError(message="Param fields value cannot be empty") + + enable_dynamic_field = kwargs.get("enable_dynamic_field", False) + if "enable_dynamic_field" in fields: + enable_dynamic_field = fields["enable_dynamic_field"] + + schema = schema_types.CollectionSchema( + name=collection_name, + autoID=False, + description=fields.get("description", ""), + enable_dynamic_field=enable_dynamic_field, + ) + + primary_field, auto_id_field = None, None + for field in all_fields: + (field_schema, primary_field, auto_id_field) = cls.get_field_schema( + field, primary_field, auto_id_field + ) + schema.fields.append(field_schema) + return schema + + @classmethod + def drop_collection_request(cls, collection_name: str) -> milvus_types.DropCollectionRequest: return milvus_types.DropCollectionRequest(collection_name=collection_name) @classmethod - def has_collection_request(cls, collection_name): - return milvus_types.HasCollectionRequest(collection_name=collection_name) + def add_collection_field_request( + cls, + collection_name: str, + field_schema: FieldSchema, + ) -> milvus_types.AddCollectionFieldRequest: + (field_schema_proto, _, _) = cls.get_field_schema(field=field_schema.to_dict()) + return milvus_types.AddCollectionFieldRequest( + collection_name=collection_name, + schema=bytes(field_schema_proto.SerializeToString()), + ) @classmethod - def describe_collection_request(cls, collection_name): + def describe_collection_request( + cls, + collection_name: str, + ) -> milvus_types.DescribeCollectionRequest: return milvus_types.DescribeCollectionRequest(collection_name=collection_name) @classmethod - def collection_stats_request(cls, collection_name): + def alter_collection_request( + cls, + collection_name: str, + properties: Optional[Dict] = None, + delete_keys: Optional[List[str]] = None, + ) -> milvus_types.AlterCollectionRequest: + kvs = [] + if properties: + kvs = [common_types.KeyValuePair(key=k, value=str(v)) for k, v in properties.items()] + + return milvus_types.AlterCollectionRequest( + collection_name=collection_name, properties=kvs, delete_keys=delete_keys + ) + + @classmethod + def alter_collection_field_request( + cls, collection_name: str, field_name: str, field_param: Dict + ) -> milvus_types.AlterCollectionFieldRequest: + kvs = [] + if field_param: + kvs = [common_types.KeyValuePair(key=k, value=str(v)) for k, v in field_param.items()] + return milvus_types.AlterCollectionFieldRequest( + collection_name=collection_name, field_name=field_name, properties=kvs + ) + + @classmethod + def collection_stats_request(cls, collection_name: str): return milvus_types.CollectionStatsRequest(collection_name=collection_name) @classmethod - def show_collections_request(cls, collection_names=None): + def show_collections_request(cls, collection_names: Optional[List[str]] = None): req = milvus_types.ShowCollectionsRequest() if collection_names: if not isinstance(collection_names, (list,)): - raise ParamError(f"collection_names must be a list of strings, but got: {collection_names}") + msg = f"collection_names must be a list of strings, but got: {collection_names}" + raise ParamError(message=msg) for collection_name in collection_names: check_pass_param(collection_name=collection_name) req.collection_names.extend(collection_names) @@ -152,775 +426,1570 @@ def show_collections_request(cls, collection_names=None): return req @classmethod - def create_partition_request(cls, collection_name, partition_name): - return milvus_types.CreatePartitionRequest(collection_name=collection_name, partition_name=partition_name) + def rename_collections_request(cls, old_name: str, new_name: str, new_db_name: str): + return milvus_types.RenameCollectionRequest( + oldName=old_name, newName=new_name, newDBName=new_db_name + ) + + @classmethod + def create_partition_request(cls, collection_name: str, partition_name: str): + return milvus_types.CreatePartitionRequest( + collection_name=collection_name, partition_name=partition_name + ) @classmethod - def drop_partition_request(cls, collection_name, partition_name): - return milvus_types.DropPartitionRequest(collection_name=collection_name, partition_name=partition_name) + def drop_partition_request(cls, collection_name: str, partition_name: str): + return milvus_types.DropPartitionRequest( + collection_name=collection_name, partition_name=partition_name + ) @classmethod - def has_partition_request(cls, collection_name, partition_name): - return milvus_types.HasPartitionRequest(collection_name=collection_name, partition_name=partition_name) + def has_partition_request(cls, collection_name: str, partition_name: str): + return milvus_types.HasPartitionRequest( + collection_name=collection_name, partition_name=partition_name + ) @classmethod - def partition_stats_request(cls, collection_name, partition_name): - return milvus_types.PartitionStatsRequest(collection_name=collection_name, partition_name=partition_name) + def partition_stats_request(cls, collection_name: str, partition_name: str): + return milvus_types.PartitionStatsRequest( + collection_name=collection_name, partition_name=partition_name + ) @classmethod - def show_partitions_request(cls, collection_name, partition_names=None): - check_pass_param(collection_name=collection_name) + def show_partitions_request( + cls, + collection_name: str, + partition_names: Optional[List[str]] = None, + type_in_memory: bool = False, + ): + check_pass_param(collection_name=collection_name, partition_name_array=partition_names) req = milvus_types.ShowPartitionsRequest(collection_name=collection_name) if partition_names: if not isinstance(partition_names, (list,)): - raise ParamError(f"partition_names must be a list of strings, but got: {partition_names}") + msg = f"partition_names must be a list of strings, but got: {partition_names}" + raise ParamError(message=msg) for partition_name in partition_names: check_pass_param(partition_name=partition_name) req.partition_names.extend(partition_names) + if type_in_memory is False: + req.type = milvus_types.ShowType.All + else: req.type = milvus_types.ShowType.InMemory return req + @classmethod + def get_loading_progress( + cls, collection_name: str, partition_names: Optional[List[str]] = None + ): + check_pass_param(collection_name=collection_name, partition_name_array=partition_names) + req = milvus_types.GetLoadingProgressRequest(collection_name=collection_name) + if partition_names: + req.partition_names.extend(partition_names) + return req + + @classmethod + def get_load_state(cls, collection_name: str, partition_names: Optional[List[str]] = None): + check_pass_param(collection_name=collection_name, partition_name_array=partition_names) + req = milvus_types.GetLoadStateRequest(collection_name=collection_name) + if partition_names: + req.partition_names.extend(partition_names) + return req + @classmethod def empty(cls): - raise DeprecationWarning("no empty request later") - # return common_types.Empty() + msg = "no empty request later" + raise DeprecationWarning(msg) @classmethod def register_link_request(cls): return milvus_types.RegisterLinkRequest() @classmethod - def partition_name(cls, collection_name, partition_name): + def partition_name(cls, collection_name: str, partition_name: str): if not isinstance(collection_name, str): - raise ParamError("collection_name must be of str type") + raise ParamError(message="collection_name must be of str type") if not isinstance(partition_name, str): - raise ParamError("partition_name must be of str type") - return milvus_types.PartitionName(collection_name=collection_name, - tag=partition_name) + raise ParamError(message="partition_name must be of str type") + return milvus_types.PartitionName(collection_name=collection_name, tag=partition_name) - @classmethod - def bulk_insert_param(cls, collection_name, entities, partition_name, fields_info=None, **kwargs): - default_partition_name = "_default" # should here? - tag = partition_name or default_partition_name - insert_request = milvus_types.InsertRequest(collection_name=collection_name, partition_name=tag) + @staticmethod + def _is_input_field(field: Dict, is_upsert: bool): + return (not field.get("auto_id", False) or is_upsert) and not field.get( + "is_function_output", False + ) - for entity in entities: - if not entity.get("name", None) or not entity.get("values", None) or not entity.get("type", None): - raise ParamError("Missing param in entities, a field must have type, name and values") + @staticmethod + def _function_output_field_names(fields_info: List[Dict]): + return [field["name"] for field in fields_info if field.get("is_function_output", False)] + + @staticmethod + def _num_input_fields(fields_info: List[Dict], is_upsert: bool): + return len([field for field in fields_info if Prepare._is_input_field(field, is_upsert)]) + + @staticmethod + def _process_struct_field( + field_name: str, + values: Any, + struct_info: Dict, + struct_sub_field_info: Dict, + struct_sub_fields_data: Dict, + ): + """Process a single struct field's data. + + Args: + field_name: Name of the struct field + values: List of struct values + struct_info: Info about the struct field + struct_sub_field_info: Two-level dict [struct_name][field_name] -> field info + struct_sub_fields_data: Two-level dict [struct_name][field_name] -> FieldData + """ + # Convert numpy ndarray to list if needed + if isinstance(values, np.ndarray): + values = values.tolist() + + if not isinstance(values, list): + msg = f"Field '{field_name}': Expected list, got {type(values).__name__}" + raise TypeError(msg) + + # Get expected fields for this specific struct + expected_fields = {field["name"] for field in struct_info["fields"]} + + # Handle empty array - create empty data structures + if not values: + # Get relevant field info and data for this struct + relevant_field_info = struct_sub_field_info[field_name] + relevant_fields_data = struct_sub_fields_data[field_name] + Prepare._add_empty_struct_data(relevant_field_info, relevant_fields_data) + return + + # Validate and collect values + field_values = Prepare._validate_and_collect_struct_values( + values, expected_fields, field_name + ) + + # Process collected values using the struct-specific sub-dictionaries + relevant_field_info = struct_sub_field_info[field_name] + relevant_fields_data = struct_sub_fields_data[field_name] + Prepare._process_struct_values(field_values, relevant_field_info, relevant_fields_data) + + @staticmethod + def _add_empty_struct_data(struct_field_info: Dict, struct_sub_fields_data: Dict): + """Add empty data for struct fields.""" + for field_name, field_info in struct_field_info.items(): + field_data = struct_sub_fields_data[field_name] + + if field_info["type"] == DataType.ARRAY: + field_data.scalars.array_data.data.append(convert_to_array([], field_info)) + elif field_info["type"] == DataType._ARRAY_OF_VECTOR: + field_data.vectors.vector_array.dim = Prepare._get_dim_value(field_info) + field_data.vectors.vector_array.data.append( + convert_to_array_of_vector([], field_info) + ) - fields_name = list() - fields_type = list() - fields_len = len(entities) - for i in range(fields_len): - fields_name.append(entities[i]["name"]) + @staticmethod + def _validate_and_collect_struct_values( + values: List, expected_fields: set, struct_field_name: str = "" + ) -> Dict[str, List]: + """Validate struct items and collect field values.""" + field_values = {field: [] for field in expected_fields} + field_prefix = f"Field '{struct_field_name}': " if struct_field_name else "" + + for idx, struct_item in enumerate(values): + if not isinstance(struct_item, dict): + msg = f"{field_prefix}Element at index {idx} must be dict, got {type(struct_item).__name__}" + raise TypeError(msg) + + # Validate fields + actual_fields = set(struct_item.keys()) + missing_fields = expected_fields - actual_fields + extra_fields = actual_fields - expected_fields + + if missing_fields: + msg = f"{field_prefix}Element at index {idx} missing required fields: {missing_fields}" + raise ValueError(msg) + if extra_fields: + msg = f"{field_prefix}Element at index {idx} has unexpected fields: {extra_fields}" + raise ValueError(msg) + + # Collect values + for field_name in expected_fields: + value = struct_item[field_name] + if value is None: + msg = f"{field_prefix}Field '{field_name}' in element at index {idx} cannot be None" + raise ValueError(msg) + field_values[field_name].append(value) + + return field_values + + @staticmethod + def _process_struct_values( + field_values: Dict[str, List], struct_field_info: Dict, struct_sub_fields_data: Dict + ): + """Process collected struct field values.""" + for field_name, values in field_values.items(): + field_data = struct_sub_fields_data[field_name] + field_info = struct_field_info[field_name] + + if field_info["type"] == DataType.ARRAY: + field_data.scalars.array_data.data.append(convert_to_array(values, field_info)) + elif field_info["type"] == DataType._ARRAY_OF_VECTOR: + field_data.vectors.vector_array.dim = Prepare._get_dim_value(field_info) + field_data.vectors.vector_array.data.append( + convert_to_array_of_vector(values, field_info) + ) + else: + raise ParamError(message=f"Unsupported data type: {field_info['type']}") + + @staticmethod + def _get_dim_value(field_info: Dict) -> int: + """Extract dimension value from field info.""" + dim_value = field_info.get("params", {}).get("dim", 0) + return int(dim_value) if isinstance(dim_value, str) else dim_value + + @staticmethod + def _setup_struct_data_structures(struct_fields_info: Optional[List[Dict]]): + """Setup common data structures for struct field processing. + + Returns: + Tuple containing: + - struct_fields_data: Dict of FieldData for struct fields + - struct_info_map: Dict mapping struct field names to their info + - struct_sub_fields_data: Two-level Dict of FieldData for + sub-fields [struct_name][field_name] + - struct_sub_field_info: Two-level Dict mapping sub-field names + to their info [struct_name][field_name] + - input_struct_field_info: List of struct fields info + """ + struct_fields_data = {} + struct_info_map = {} + struct_sub_fields_data = {} + struct_sub_field_info = {} + input_struct_field_info = [] + + if struct_fields_info: + struct_fields_data = { + field["name"]: schema_types.FieldData(field_name=field["name"], type=field["type"]) + for field in struct_fields_info + } + input_struct_field_info = list(struct_fields_info) + struct_info_map = {struct["name"]: struct for struct in struct_fields_info} + + # Use two-level maps to avoid overwrite when different structs have fields + # with same name + # First level: struct name, Second level: field name + for struct_field_info in struct_fields_info: + struct_name = struct_field_info["name"] + struct_sub_fields_data[struct_name] = {} + struct_sub_field_info[struct_name] = {} + + for field in struct_field_info["fields"]: + field_name = field["name"] + field_data = schema_types.FieldData(field_name=field_name, type=field["type"]) + # Set dim for ARRAY_OF_VECTOR types + if field["type"] == DataType._ARRAY_OF_VECTOR: + field_data.vectors.dim = Prepare._get_dim_value(field) + struct_sub_fields_data[struct_name][field_name] = field_data + struct_sub_field_info[struct_name][field_name] = field + + return ( + struct_fields_data, + struct_info_map, + struct_sub_fields_data, + struct_sub_field_info, + input_struct_field_info, + ) - if not fields_info: - raise ParamError("Missing collection meta to validate entities") + @staticmethod + def _parse_row_request( + request: Union[milvus_types.InsertRequest, milvus_types.UpsertRequest], + fields_info: List[Dict], + struct_fields_info: List[Dict], + enable_dynamic: bool, + entities: List, + ): + input_fields_info = [ + field for field in fields_info if Prepare._is_input_field(field, is_upsert=False) + ] + # check if pk exists in entities + primary_field_info = next( + (field for field in fields_info if field.get("is_primary", False)), None + ) + if ( + primary_field_info + and primary_field_info.get("auto_id", False) + and entities + and primary_field_info["name"] in entities[0] + ): + input_fields_info.append(primary_field_info) + + function_output_field_names = Prepare._function_output_field_names(fields_info) + fields_data = { + field["name"]: schema_types.FieldData(field_name=field["name"], type=field["type"]) + for field in input_fields_info + } + field_info_map = {field["name"]: field for field in input_fields_info} + + ( + struct_fields_data, + struct_info_map, + struct_sub_fields_data, + struct_sub_field_info, + input_struct_field_info, + ) = Prepare._setup_struct_data_structures(struct_fields_info) + + if enable_dynamic: + d_field = schema_types.FieldData( + field_name=DYNAMIC_FIELD_NAME, is_dynamic=True, type=DataType.JSON + ) + fields_data[d_field.field_name] = d_field + field_info_map[d_field.field_name] = d_field + + try: + for entity in entities: + if not isinstance(entity, Dict): + msg = f"expected Dict, got '{type(entity).__name__}'" + raise TypeError(msg) + for k, v in entity.items(): + if k not in fields_data and k not in struct_fields_data: + if k in function_output_field_names: + raise DataNotMatchException( + message=ExceptionsMessage.InsertUnexpectedFunctionOutputField % k + ) + + if not enable_dynamic: + raise DataNotMatchException( + message=ExceptionsMessage.InsertUnexpectedField % k + ) + + if k in fields_data: + field_info, field_data = field_info_map[k], fields_data[k] + if field_info.get("nullable", False) or field_info.get( + "default_value", None + ): + field_data.valid_data.append(v is not None) + entity_helper.pack_field_value_to_field_data(v, field_data, field_info) + elif k in struct_fields_data: + # Array of structs format + try: + Prepare._process_struct_field( + k, + v, + struct_info_map[k], + struct_sub_field_info, + struct_sub_fields_data, + ) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=f"{ExceptionsMessage.FieldDataInconsistent % (k, 'struct array', type(v))} Detail: {e!s}" + ) from e + + for field in input_fields_info: + key = field["name"] + if key in entity: + continue + + field_info, field_data = field_info_map[key], fields_data[key] + if field_info.get("nullable", False) or field_info.get("default_value", None): + field_data.valid_data.append(False) + entity_helper.pack_field_value_to_field_data(None, field_data, field_info) + else: + raise DataNotMatchException( + message=ExceptionsMessage.InsertMissedField % key + ) + json_dict = { + k: v + for k, v in entity.items() + if k not in fields_data and k not in struct_fields_data and enable_dynamic + } + + if enable_dynamic: + json_value = entity_helper.convert_to_json(json_dict) + d_field.scalars.json_data.data.append(json_value) + + except (TypeError, ValueError) as e: + raise DataNotMatchException(message=ExceptionsMessage.DataTypeInconsistent) from e + + # reconstruct the struct array fields data + for struct in input_struct_field_info: + struct_name = struct["name"] + struct_field_data = struct_fields_data[struct_name] + for field_info in struct["fields"]: + # Use two-level map to get the correct sub-field data + field_name = field_info["name"] + struct_field_data.struct_arrays.fields.append( + struct_sub_fields_data[struct_name][field_name] + ) + + request.fields_data.extend(fields_data.values()) + request.fields_data.extend(struct_fields_data.values()) + + expected_num_input_fields = ( + len(input_fields_info) + len(input_struct_field_info) + (1 if enable_dynamic else 0) + ) + + if len(request.fields_data) != expected_num_input_fields: + msg = f"{ExceptionsMessage.FieldsNumInconsistent}, expected {expected_num_input_fields} fields, got {len(request.fields_data)}" + raise ParamError(message=msg) - location = dict() - primary_key_loc = None - auto_id_loc = None - for i, field in enumerate(fields_info): - if field.get("is_primary", False): - primary_key_loc = i + return request - if field.get("auto_id", False): - auto_id_loc = i - continue + @staticmethod + def _parse_upsert_row_request( + request: Union[milvus_types.InsertRequest, milvus_types.UpsertRequest], + fields_info: List[Dict], + struct_fields_info: List[Dict], + enable_dynamic: bool, + entities: List, + partial_update: bool = False, + ): + # For partial update, struct fields are not supported + if partial_update and struct_fields_info: + raise ParamError(message="Struct fields are not supported in partial update") + + input_fields_info = [ + field for field in fields_info if Prepare._is_input_field(field, is_upsert=True) + ] + function_output_field_names = Prepare._function_output_field_names(fields_info) + fields_data = { + field["name"]: schema_types.FieldData(field_name=field["name"], type=field["type"]) + for field in input_fields_info + } + field_info_map = {field["name"]: field for field in input_fields_info} + field_len = {field["name"]: 0 for field in input_fields_info} + + # Use common struct data setup (only if not partial update) + if partial_update: + struct_fields_data = {} + struct_info_map = {} + struct_sub_fields_data = {} + struct_sub_field_info = {} + input_struct_field_info = [] + else: + ( + struct_fields_data, + struct_info_map, + struct_sub_fields_data, + struct_sub_field_info, + input_struct_field_info, + ) = Prepare._setup_struct_data_structures(struct_fields_info) + + if enable_dynamic: + d_field = schema_types.FieldData( + field_name=DYNAMIC_FIELD_NAME, is_dynamic=True, type=DataType.JSON + ) + fields_data[d_field.field_name] = d_field + field_info_map[d_field.field_name] = d_field + field_len[DYNAMIC_FIELD_NAME] = 0 + + try: + for entity in entities: + if not isinstance(entity, Dict): + msg = f"expected Dict, got '{type(entity).__name__}'" + raise TypeError(msg) + for k, v in entity.items(): + if k not in fields_data and k not in struct_fields_data: + if k in function_output_field_names: + raise DataNotMatchException( + message=ExceptionsMessage.InsertUnexpectedFunctionOutputField % k + ) + + if not enable_dynamic: + raise DataNotMatchException( + message=ExceptionsMessage.InsertUnexpectedField % k + ) + + if k in fields_data: + field_info, field_data = field_info_map[k], fields_data[k] + if field_info.get("nullable", False) or field_info.get( + "default_value", None + ): + field_data.valid_data.append(v is not None) + entity_helper.pack_field_value_to_field_data(v, field_data, field_info) + field_len[k] += 1 + elif k in struct_fields_data: + # Handle struct field (array of structs) + try: + Prepare._process_struct_field( + k, + v, + struct_info_map[k], + struct_sub_field_info, + struct_sub_fields_data, + ) + except (TypeError, ValueError) as e: + raise DataNotMatchException( + message=f"{ExceptionsMessage.FieldDataInconsistent % (k, 'struct array', type(v))} Detail: {e!s}" + ) from e + for field in input_fields_info: + key = field["name"] + if key in entity: + continue + + # Skip missing field validation for partial updates + # Also skip set null value or default value for partial updates, + # in case of field is updated to null + if partial_update: + continue + field_info, field_data = field_info_map[key], fields_data[key] + if field_info.get("nullable", False) or field_info.get("default_value", None): + field_data.valid_data.append(False) + field_len[key] += 1 + entity_helper.pack_field_value_to_field_data(None, field_data, field_info) + else: + raise DataNotMatchException( + message=ExceptionsMessage.InsertMissedField % key + ) + json_dict = { + k: v + for k, v in entity.items() + if k not in fields_data and k not in struct_fields_data and enable_dynamic + } + + if enable_dynamic: + json_value = entity_helper.convert_to_json(json_dict) + d_field.scalars.json_data.data.append(json_value) + field_len[DYNAMIC_FIELD_NAME] += 1 + + except (TypeError, ValueError) as e: + raise DataNotMatchException(message=ExceptionsMessage.DataTypeInconsistent) from e + + if partial_update: + # cause partial_update won't set null for missing fields, + # so the field_len must be the same + row_counts = {v for v in field_len.values() if v > 0} + if len(row_counts) > 1: + counts = list(row_counts) + raise DataNotMatchException( + message=ExceptionsMessage.InsertFieldsLenInconsistent % (counts[0], counts[1]) + ) - match_flag = False + fields_data = {k: v for k, v in fields_data.items() if field_len[k] > 0} + request.fields_data.extend(fields_data.values()) + + if struct_fields_data: + # reconstruct the struct array fields data (same as in insert) + for struct in input_struct_field_info: + struct_name = struct["name"] + struct_field_data = struct_fields_data[struct_name] + for field_info in struct["fields"]: + # Use two-level map to get the correct sub-field data + field_name = field_info["name"] + struct_field_data.struct_arrays.fields.append( + struct_sub_fields_data[struct_name][field_name] + ) + request.fields_data.extend(struct_fields_data.values()) + + for _, field in enumerate(input_fields_info): + is_dynamic = False field_name = field["name"] - field_type = field["type"] - for j in range(fields_len): - entity_name = entities[j]["name"] - entity_type = entities[j]["type"] + if field.get("is_dynamic", False): + is_dynamic = True + + for j, entity in enumerate(entities): + if is_dynamic and field_name in entity: + raise ParamError( + message=f"dynamic field enabled, {field_name} shouldn't in entities[{j}]" + ) + + # Include struct fields in expected count (if not partial update) + struct_field_count = len(input_struct_field_info) if not partial_update else 0 + expected_num_input_fields = ( + len(input_fields_info) + struct_field_count + (1 if enable_dynamic else 0) + ) + + if not partial_update and len(request.fields_data) != expected_num_input_fields: + msg = f"{ExceptionsMessage.FieldsNumInconsistent}, expected {expected_num_input_fields} fields, got {len(request.fields_data)}" + raise ParamError(message=msg) + + return request + + @classmethod + def row_insert_param( + cls, + collection_name: str, + entities: List, + partition_name: str, + fields_info: Dict, + struct_fields_info: Optional[Dict] = None, + schema_timestamp: int = 0, + enable_dynamic: bool = False, + ): + if not fields_info: + raise ParamError(message="Missing collection meta to validate entities") + + # insert_request.hash_keys won't be filled in client. + p_name = partition_name if isinstance(partition_name, str) else "" + request = milvus_types.InsertRequest( + collection_name=collection_name, + partition_name=p_name, + num_rows=len(entities), + schema_timestamp=schema_timestamp, + ) - if field_name == entity_name: - if field_type != entity_type: - raise ParamError(f"Collection field type is {field_type}" - f", but entities field type is {entity_type}") + return cls._parse_row_request( + request, fields_info, struct_fields_info, enable_dynamic, entities + ) - entity_dim = 0 - field_dim = 0 - if entity_type in [DataType.FLOAT_VECTOR, DataType.BINARY_VECTOR]: - field_dim = field["params"]["dim"] - entity_dim = len(entities[j]["values"][0]) + @classmethod + def row_upsert_param( + cls, + collection_name: str, + entities: List, + partition_name: str, + fields_info: Any, + struct_fields_info: Any = None, + enable_dynamic: bool = False, + schema_timestamp: int = 0, + partial_update: bool = False, + ): + if not fields_info: + raise ParamError(message="Missing collection meta to validate entities") - if entity_type in [DataType.FLOAT_VECTOR, ] and entity_dim != field_dim: - raise ParamError(f"Collection field dim is {field_dim}" - f", but entities field dim is {entity_dim}") + # upsert_request.hash_keys won't be filled in client. + p_name = partition_name if isinstance(partition_name, str) else "" + request = milvus_types.UpsertRequest( + collection_name=collection_name, + partition_name=p_name, + num_rows=len(entities), + schema_timestamp=schema_timestamp, + partial_update=partial_update, + ) - if entity_type in [DataType.BINARY_VECTOR, ] and entity_dim * 8 != field_dim: - raise ParamError(f"Collection field dim is {field_dim}" - f", but entities field dim is {entity_dim * 8}") + return cls._parse_upsert_row_request( + request, fields_info, struct_fields_info, enable_dynamic, entities, partial_update + ) - location[field["name"]] = j - fields_type.append(entities[j]["type"]) - match_flag = True - break + @staticmethod + def _pre_insert_batch_check( + entities: List, + fields_info: Any, + ): + for entity in entities: + if ( + entity.get("name") is None + or entity.get("values") is None + or entity.get("type") is None + ): + raise ParamError( + message="Missing param in entities, a field must have type, name and values" + ) + if not fields_info: + raise ParamError(message="Missing collection meta to validate entities") - if not match_flag: - raise ParamError("Field {} don't match in entities".format(field["name"])) + location, primary_key_loc, _ = traverse_info(fields_info) # though impossible from sdk if primary_key_loc is None: - raise ParamError("primary key not found") + raise ParamError(message="primary key not found") - if auto_id_loc is None and len(entities) != len(fields_info): - raise ParamError(f"number of fields: {len(fields_info)}, number of entities: {len(entities)}") + expected_num_input_fields = Prepare._num_input_fields(fields_info, is_upsert=False) - if auto_id_loc is not None and len(entities) + 1 != len(fields_info): - raise ParamError(f"number of fields: {len(fields_info)}, number of entities: {len(entities)}") + if len(entities) != expected_num_input_fields: + msg = f"expected number of fields: {expected_num_input_fields}, actual number of fields in entities: {len(entities)}" + raise ParamError(message=msg) - row_num = 0 + return location + @staticmethod + def _pre_upsert_batch_check( + entities: List, + fields_info: Any, + partial_update: bool = False, + ): for entity in entities: - field_data = schema_types.FieldData() - if entity.get("type") in (DataType.BOOL,): - field_data.type = schema_types.DataType.Value("Bool") - field_data.field_name = entity.get("name") - field_data.scalars.bool_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.INT8,): - field_data.type = schema_types.DataType.Value("Int8") - field_data.field_name = entity.get("name") - field_data.scalars.int_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.INT16,): - field_data.type = schema_types.DataType.Value("Int16") - field_data.field_name = entity.get("name") - field_data.scalars.int_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.INT32,): - field_data.type = schema_types.DataType.Value("Int32") - field_data.field_name = entity.get("name") - field_data.scalars.int_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.INT64,): - field_data.type = schema_types.DataType.Value("Int64") - field_data.field_name = entity.get("name") - field_data.scalars.long_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.FLOAT,): - field_data.type = schema_types.DataType.Value("Float") - field_data.field_name = entity.get("name") - field_data.scalars.float_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.DOUBLE,): - field_data.type = schema_types.DataType.Value("Double") - field_data.field_name = entity.get("name") - field_data.scalars.double_data.data.extend(entity.get("values")) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - elif entity.get("type") in (DataType.FLOAT_VECTOR,): - field_data.type = schema_types.DataType.Value("FloatVector") - field_data.field_name = entity.get("name") - field_data.vectors.dim = len(entity.get("values")[0]) - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - all_floats = [f for vector in entity.get("values") for f in vector] - field_data.vectors.float_vector.data.extend(all_floats) - elif entity.get("type") in (DataType.BINARY_VECTOR,): - field_data.type = schema_types.DataType.Value("BinaryVector") - field_data.field_name = entity.get("name") - if row_num != 0 and row_num != len(entity.get("values")): - raise ParamError("row num of all fields is not different") - row_num = len(entity.get("values")) - field_data.vectors.dim = len(entity.get("values")[0]) * 8 - for vector in entity.get("values"): - field_data.vectors.binary_vector += vector - else: - raise ParamError("UnSupported data type") - - insert_request.fields_data.append(field_data) + if ( + entity.get("name") is None + or entity.get("values") is None + or entity.get("type") is None + ): + raise ParamError( + message="Missing param in entities, a field must have type, name and values" + ) + if not fields_info: + raise ParamError(message="Missing collection meta to validate entities") - insert_request.num_rows = row_num + location, primary_key_loc = traverse_upsert_info(fields_info) - # insert_request.hash_keys won't be filled in client. - # It will be filled in proxy. + # though impossible from sdk + if primary_key_loc is None: + raise ParamError(message="primary key not found") + + # Skip field count validation for partial updates + if not partial_update: + expected_num_input_fields = Prepare._num_input_fields(fields_info, is_upsert=True) + + if len(entities) != expected_num_input_fields: + msg = f"expected number of fields: {expected_num_input_fields}, actual number of fields in entities: {len(entities)}" + raise ParamError(message=msg) + + return location + + @staticmethod + def _parse_batch_request( + request: Union[milvus_types.InsertRequest, milvus_types.UpsertRequest], + entities: List, + fields_info: Any, + location: Dict, + ): + pre_field_size = 0 + try: + for entity in entities: + latest_field_size = entity_helper.get_input_num_rows(entity.get("values")) + if latest_field_size != 0: + if pre_field_size not in (0, latest_field_size): + raise ParamError( + message=( + f"Field data size misaligned for field [{entity.get('name')}] ", + f"got size=[{latest_field_size}] ", + f"alignment size=[{pre_field_size}]", + ) + ) + pre_field_size = latest_field_size + if pre_field_size == 0: + raise ParamError(message=ExceptionsMessage.NumberRowsInvalid) + request.num_rows = pre_field_size + for entity in entities: + field_name = entity.get("name") + field_data = entity_helper.entity_to_field_data( + entity, fields_info[location[field_name]], request.num_rows + ) + request.fields_data.append(field_data) + except (TypeError, ValueError) as e: + raise DataNotMatchException(message=ExceptionsMessage.DataTypeInconsistent) from e - return insert_request + if pre_field_size == 0: + raise ParamError(message=ExceptionsMessage.NumberRowsInvalid) + request.num_rows = pre_field_size + return request @classmethod - def delete_request(cls, collection_name, partition_name, expr): - def check_str(instr, prefix): - if instr is None: - raise ParamError(prefix + " cannot be None") - if not isinstance(instr, str): - msg = prefix + " value {} is illegal" - raise ParamError(msg.format(instr)) - if instr == "": - raise ParamError(prefix + " cannot be empty") + def batch_insert_param( + cls, + collection_name: str, + entities: List, + partition_name: str, + fields_info: Any, + ): + location = cls._pre_insert_batch_check(entities, fields_info) + tag = partition_name if isinstance(partition_name, str) else "" + request = milvus_types.InsertRequest(collection_name=collection_name, partition_name=tag) + + return cls._parse_batch_request( + request, + entities, + fields_info, + location, + ) - check_str(collection_name, "collection_name") - if partition_name is not None and partition_name != "": - check_str(partition_name, "partition_name") - check_str(expr, "expr") + @classmethod + def batch_upsert_param( + cls, + collection_name: str, + entities: List, + partition_name: str, + fields_info: Any, + partial_update: bool = False, + ): + location = cls._pre_upsert_batch_check(entities, fields_info, partial_update) + tag = partition_name if isinstance(partition_name, str) else "" + request = milvus_types.UpsertRequest( + collection_name=collection_name, + partition_name=tag, + partial_update=partial_update, + ) - request = milvus_types.DeleteRequest(collection_name=collection_name, expr=expr, partition_name=partition_name) - return request + return cls._parse_batch_request(request, entities, fields_info, location) @classmethod - def _prepare_placeholders(cls, vectors, nq, max_nq_per_batch, tag, pl_type, is_binary, dimension=0): - pls = [] - for begin in range(0, nq, max_nq_per_batch): - end = min(begin + max_nq_per_batch, nq) - pl = milvus_types.PlaceholderValue(tag=tag) - pl.type = pl_type - for i in range(begin, end): - if is_binary: - if len(vectors[i]) * 8 != dimension: - raise ParamError("The dimension of query entities is different from schema") - pl.values.append(blob.vectorBinaryToBytes(vectors[i])) - else: - if len(vectors[i]) != dimension: - raise ParamError("The dimension of query entities is different from schema") - pl.values.append(blob.vectorFloatToBytes(vectors[i])) - pls.append(pl) - return pls - - @classmethod - def divide_search_request(cls, collection_name, query_entities, partition_names=None, fields=None, round_decimal=1, - **kwargs): - schema = kwargs.get("schema", None) - fields_schema = schema.get("fields", None) # list - fields_name_locs = {fields_schema[loc]["name"]: loc - for loc in range(len(fields_schema))} - - if not isinstance(query_entities, (dict,)): - raise ParamError("Invalid query format. 'query_entities' must be a dict") - - duplicated_entities = copy.deepcopy(query_entities) - vector_placeholders = dict() - vector_names = dict() - - meta = {} # TODO: ugly here, find a better method - - def extract_vectors_param(param, placeholders, meta=None, names=None, round_decimal=-1): - if not isinstance(param, (dict, list)): - return - - if isinstance(param, dict): - if "vector" in param: - # TODO: Here may not replace ph - ph = "$" + str(len(placeholders)) - - for pk, pv in param["vector"].items(): - if "query" not in pv: - raise ParamError("param vector must contain 'query'") - if "topk" not in pv: - raise ParamError("dsl must contain 'topk'") - topk = pv["topk"] - if not isinstance(topk, (int, str)): - raise ParamError("topk must be int or str") - try: - topk = int(topk) - except Exception: - raise ParamError("topk is not illegal") from None - if topk < 0: - raise ParamError("topk must be greater than zero") - meta["topk"] = topk - placeholders[ph] = pv["query"] - names[ph] = pk - param["vector"][pk]["query"] = ph - param["vector"][pk]["round_decimal"] = round_decimal - - return - else: - for _, v in param.items(): - extract_vectors_param(v, placeholders, meta, names, round_decimal) - - if isinstance(param, list): - for item in param: - extract_vectors_param(item, placeholders, meta, names, round_decimal) - - extract_vectors_param(duplicated_entities, vector_placeholders, meta, vector_names, round_decimal) - if len(vector_placeholders) > 1: - raise ParamError("query on two vector field is not supported now!") - - requests = [] - factor = 10 - topk = meta.get("topk", 100) # TODO: ugly here, find a better method - for tag, vectors in vector_placeholders.items(): - if len(vectors) <= 0: - continue - - if isinstance(vectors[0], bytes): - bytes_per_vector = len(vectors[0]) - else: - bytes_per_vector = len(vectors[0]) * 4 + def delete_request( + cls, + collection_name: str, + filter: str, + partition_name: Optional[str] = None, + consistency_level: Optional[Union[int, str]] = None, + **kwargs, + ): + check.validate_strs( + collection_name=collection_name, + filter=filter, + ) + check.validate_nullable_strs(partition_name=partition_name) + + return milvus_types.DeleteRequest( + collection_name=collection_name, + partition_name=partition_name, + expr=filter, + consistency_level=get_consistency_level(consistency_level), + expr_template_values=cls.prepare_expression_template(kwargs.get("expr_params", {})), + ) - nq = len(vectors) - max_nq_per_batch = DefaultConfigs.MaxSearchResultSize / (bytes_per_vector * topk * factor) - max_nq_per_batch = int(max_nq_per_batch) - if max_nq_per_batch <= 0: - raise ParamError(f"topk {topk} is too large!") + @classmethod + def _prepare_placeholder_str(cls, data: Any, is_embedding_list: bool = False): + # sparse vector + if entity_helper.entity_is_sparse_matrix(data): + pl_type = PlaceholderType.SparseFloatVector + pl_values = entity_helper.sparse_rows_to_proto(data).contents + + elif isinstance(data[0], np.ndarray): + dtype = data[0].dtype + + if dtype == "bfloat16": + pl_type = ( + PlaceholderType.BFLOAT16_VECTOR + if not is_embedding_list + else PlaceholderType.EmbListBFloat16Vector + ) + pl_values = (array.tobytes() for array in data) + elif dtype == "float16": + pl_type = ( + PlaceholderType.FLOAT16_VECTOR + if not is_embedding_list + else PlaceholderType.EmbListFloat16Vector + ) + pl_values = (array.tobytes() for array in data) + elif dtype in ("float32", "float64"): + pl_type = ( + PlaceholderType.FloatVector + if not is_embedding_list + else PlaceholderType.EmbListFloatVector + ) + pl_values = (blob.vector_float_to_bytes(entity) for entity in data) + elif dtype == "int8": + pl_type = ( + PlaceholderType.Int8Vector + if not is_embedding_list + else PlaceholderType.EmbListInt8Vector + ) + pl_values = (array.tobytes() for array in data) - if isinstance(vectors[0], bytes): - is_binary = True + elif dtype == "byte": pl_type = PlaceholderType.BinaryVector + pl_values = data + else: - is_binary = False - pl_type = PlaceholderType.FloatVector - - fname = vector_names[tag] - if fname not in fields_name_locs: - raise ParamError(f"Field {fname} doesn't exist in schema") - dimension = int(fields_schema[fields_name_locs[fname]]["params"].get("dim", 0)) - pls = cls._prepare_placeholders(vectors, nq, max_nq_per_batch, tag, pl_type, is_binary, dimension) - - for pl in pls: - plg = milvus_types.PlaceholderGroup() - plg.placeholders.append(pl) - plg_str = milvus_types.PlaceholderGroup.SerializeToString(plg) - request = milvus_types.SearchRequest( - collection_name=collection_name, - partition_names=partition_names, - output_fields=fields, - guarantee_timestamp=kwargs.get("guarantee_timestamp", 0), - ) - request.dsl = ujson.dumps(duplicated_entities) - request.placeholder_group = plg_str - requests.append(request) + err_msg = f"unsupported data type: {dtype}" + raise ParamError(message=err_msg) + + elif isinstance(data[0], bytes): + pl_type = PlaceholderType.BinaryVector + pl_values = data # data is already a list of bytes - return requests + elif isinstance(data[0], str): + pl_type = PlaceholderType.VARCHAR + pl_values = (value.encode("utf-8") for value in data) - @classmethod - def search_request(cls, collection_name, query_entities, partition_names=None, fields=None, round_decimal=-1, - **kwargs): - schema = kwargs.get("schema", None) - fields_schema = schema.get("fields", None) # list - fields_name_locs = {fields_schema[loc]["name"]: loc - for loc in range(len(fields_schema))} + else: + pl_type = PlaceholderType.FloatVector + pl_values = (blob.vector_float_to_bytes(entity) for entity in data) - if not isinstance(query_entities, (dict,)): - raise ParamError("Invalid query format. 'query_entities' must be a dict") + pl = common_types.PlaceholderValue(tag="$0", type=pl_type, values=pl_values) + return common_types.PlaceholderGroup.SerializeToString( + common_types.PlaceholderGroup(placeholders=[pl]) + ) - if fields is not None and not isinstance(fields, (list,)): - raise ParamError("Invalid query format. 'fields' must be a list") + @classmethod + def prepare_expression_template(cls, values: Dict) -> Any: + def all_elements_same_type(lst: List): + return all(isinstance(item, type(lst[0])) for item in lst) + + def add_array_data(v: List) -> schema_types.TemplateArrayValue: + data = schema_types.TemplateArrayValue() + if len(v) == 0: + return data + element_type = ( + infer_dtype_by_scalar_data(v[0]) if all_elements_same_type(v) else schema_types.JSON + ) + if element_type in (schema_types.Bool,): + data.bool_data.data.extend(v) + return data + if element_type in ( + schema_types.Int8, + schema_types.Int16, + schema_types.Int32, + schema_types.Int64, + ): + data.long_data.data.extend(v) + return data + if element_type in (schema_types.Float, schema_types.Double): + data.double_data.data.extend(v) + return data + if element_type in (schema_types.VarChar, schema_types.String): + data.string_data.data.extend(v) + return data + if element_type in (schema_types.Array,): + for e in v: + data.array_data.data.append(add_array_data(e)) + return data + if element_type in (schema_types.JSON,): + for e in v: + data.json_data.data.append(entity_helper.convert_to_json(e)) + return data + raise ParamError(message=f"Unsupported element type: {element_type}") + + def add_data(v: Any) -> schema_types.TemplateValue: + dtype = infer_dtype_by_scalar_data(v) + data = schema_types.TemplateValue() + if dtype in (schema_types.Bool,): + data.bool_val = v + return data + if dtype in ( + schema_types.Int8, + schema_types.Int16, + schema_types.Int32, + schema_types.Int64, + ): + data.int64_val = v + return data + if dtype in (schema_types.Float, schema_types.Double): + data.float_val = v + return data + if dtype in (schema_types.VarChar, schema_types.String): + data.string_val = v + return data + if dtype in (schema_types.Array,): + data.array_val.CopyFrom(add_array_data(v)) + return data + raise ParamError(message=f"Unsupported element type: {dtype}") + + expression_template_values = {} + for k, v in values.items(): + expression_template_values[k] = add_data(v) + return expression_template_values - request = milvus_types.SearchRequest( - collection_name=collection_name, - partition_names=partition_names, - output_fields=fields, - guarantee_timestamp=kwargs.get("guarantee_timestamp", 0), + @classmethod + def search_requests_with_expr( + cls, + collection_name: str, + data: Union[List, utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + limit: int, + expr: Optional[str] = None, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + round_decimal: int = -1, + ranker: Optional[Union[Function, FunctionScore]] = None, + **kwargs, + ) -> milvus_types.SearchRequest: + use_default_consistency = ts_utils.construct_guarantee_ts(collection_name, kwargs) + + ignore_growing = param.get("ignore_growing", False) or kwargs.get("ignore_growing", False) + params = param.get("params", {}) + if not isinstance(params, dict): + raise ParamError(message=f"Search params must be a dict, got {type(params)}") + + if PAGE_RETAIN_ORDER_FIELD in kwargs and PAGE_RETAIN_ORDER_FIELD in param: + raise ParamError( + message="Provide page_retain_order both in kwargs and param, expect just one" + ) + page_retain_order = kwargs.get(PAGE_RETAIN_ORDER_FIELD) or param.get( + PAGE_RETAIN_ORDER_FIELD ) + if page_retain_order is not None: + if not isinstance(page_retain_order, bool): + raise ParamError( + message=f"wrong type for page_retain_order, expect bool, got {type(page_retain_order)}" + ) + params[PAGE_RETAIN_ORDER_FIELD] = page_retain_order + + search_params = { + "topk": limit, + "round_decimal": round_decimal, + "ignore_growing": ignore_growing, + } + + # parse offset + if "offset" in kwargs and "offset" in param: + raise ParamError(message="Provide offset both in kwargs and param, expect just one") + + offset = kwargs.get("offset") or param.get("offset") + if offset is not None: + if not isinstance(offset, int): + raise ParamError(message=f"wrong type for offset, expect int, got {type(offset)}") + search_params["offset"] = offset + + is_iterator = kwargs.get(ITERATOR_FIELD) + if is_iterator is not None: + search_params[ITERATOR_FIELD] = is_iterator + + collection_id = kwargs.get(COLLECTION_ID) + if collection_id is not None: + search_params[COLLECTION_ID] = str(collection_id) + + is_search_iter_v2 = kwargs.get(ITER_SEARCH_V2_KEY) + if is_search_iter_v2 is not None: + search_params[ITER_SEARCH_V2_KEY] = is_search_iter_v2 + + search_iter_batch_size = kwargs.get(ITER_SEARCH_BATCH_SIZE_KEY) + if search_iter_batch_size is not None: + search_params[ITER_SEARCH_BATCH_SIZE_KEY] = search_iter_batch_size + + search_iter_last_bound = kwargs.get(ITER_SEARCH_LAST_BOUND_KEY) + if search_iter_last_bound is not None: + search_params[ITER_SEARCH_LAST_BOUND_KEY] = search_iter_last_bound + + search_iter_id = kwargs.get(ITER_SEARCH_ID_KEY) + if search_iter_id is not None: + search_params[ITER_SEARCH_ID_KEY] = search_iter_id + + group_by_field = kwargs.get(GROUP_BY_FIELD) + if group_by_field is not None: + search_params[GROUP_BY_FIELD] = group_by_field + + group_size = kwargs.get(GROUP_SIZE) + if group_size is not None: + search_params[GROUP_SIZE] = group_size + + strict_group_size = kwargs.get(STRICT_GROUP_SIZE) + if strict_group_size is not None: + search_params[STRICT_GROUP_SIZE] = strict_group_size + + json_path = kwargs.get(JSON_PATH) + if json_path is not None: + search_params[JSON_PATH] = json_path + + json_type = kwargs.get(JSON_TYPE) + if json_type is not None: + if json_type == DataType.INT8: + search_params[JSON_TYPE] = "Int8" + elif json_type == DataType.INT16: + search_params[JSON_TYPE] = "Int16" + elif json_type == DataType.INT32: + search_params[JSON_TYPE] = "Int32" + elif json_type == DataType.INT64: + search_params[JSON_TYPE] = "Int64" + elif json_type == DataType.BOOL: + search_params[JSON_TYPE] = "Bool" + elif json_type in (DataType.VARCHAR, DataType.STRING): + search_params[JSON_TYPE] = "VarChar" + else: + raise ParamError(message=f"Unsupported json cast type: {json_type}") - duplicated_entities = copy.deepcopy(query_entities) - vector_placeholders = dict() - vector_names = dict() + strict_cast = kwargs.get(STRICT_CAST) + if strict_cast is not None: + search_params[STRICT_CAST] = strict_cast - def extract_vectors_param(param, placeholders, names, round_decimal): - if not isinstance(param, (dict, list)): - return + if param.get("metric_type") is not None: + search_params["metric_type"] = param["metric_type"] - if isinstance(param, dict): - if "vector" in param: - # TODO: Here may not replace ph - ph = "$" + str(len(placeholders)) + if anns_field: + search_params["anns_field"] = anns_field - for pk, pv in param["vector"].items(): - if "query" not in pv: - raise ParamError("param vector must contain 'query'") - placeholders[ph] = pv["query"] - names[ph] = pk - param["vector"][pk]["query"] = ph - param["vector"][pk]["round_decimal"] = round_decimal + if param.get(HINTS) is not None: + search_params[HINTS] = param[HINTS] - return - else: - for _, v in param.items(): - extract_vectors_param(v, placeholders, names, round_decimal) - - if isinstance(param, list): - for item in param: - extract_vectors_param(item, placeholders, names, round_decimal) - - extract_vectors_param(duplicated_entities, vector_placeholders, vector_names, round_decimal) - request.dsl = ujson.dumps(duplicated_entities) - - plg = milvus_types.PlaceholderGroup() - for tag, vectors in vector_placeholders.items(): - if len(vectors) <= 0: - continue - pl = milvus_types.PlaceholderValue(tag=tag) - - fname = vector_names[tag] - if fname not in fields_name_locs: - raise ParamError(f"Field {fname} doesn't exist in schema") - dimension = int(fields_schema[fields_name_locs[fname]]["params"].get("dim", 0)) - - if isinstance(vectors[0], bytes): - pl.type = PlaceholderType.BinaryVector - for vector in vectors: - if dimension != len(vector) * 8: - raise ParamError("The dimension of query vector is different from schema") - pl.values.append(blob.vectorBinaryToBytes(vector)) - else: - pl.type = PlaceholderType.FloatVector - for vector in vectors: - if dimension != len(vector): - raise ParamError("The dimension of query vector is different from schema") - pl.values.append(blob.vectorFloatToBytes(vector)) - # vector_values_bytes = service_msg_types.VectorValues.SerializeToString(vector_values) + if param.get("analyzer_name") is not None: + search_params["analyzer_name"] = param["analyzer_name"] + + if kwargs.get("timezone") is not None: + search_params["timezone"] = kwargs["timezone"] + + if kwargs.get("time_fields") is not None: + search_params["time_fields"] = kwargs["time_fields"] + + search_params["params"] = get_params(param) + + req_params = [ + common_types.KeyValuePair(key=str(key), value=utils.dumps(value)) + for key, value in search_params.items() + ] + + is_embedding_list = kwargs.get(IS_EMBEDDING_LIST, False) + nq = entity_helper.get_input_num_rows(data) + plg_str = cls._prepare_placeholder_str(data, is_embedding_list) - plg.placeholders.append(pl) - plg_str = milvus_types.PlaceholderGroup.SerializeToString(plg) - request.placeholder_group = plg_str + request = milvus_types.SearchRequest( + collection_name=collection_name, + partition_names=partition_names, + output_fields=output_fields, + guarantee_timestamp=kwargs.get("guarantee_timestamp", 0), + use_default_consistency=use_default_consistency, + consistency_level=kwargs.get("consistency_level", 0), + nq=nq, + placeholder_group=plg_str, + dsl_type=common_types.DslType.BoolExprV1, + search_params=req_params, + expr_template_values=cls.prepare_expression_template( + {} if kwargs.get("expr_params") is None else kwargs.get("expr_params") + ), + ) + if expr is not None: + request.dsl = expr + + if isinstance(ranker, Function): + request.function_score.CopyFrom(Prepare.ranker_to_function_score(ranker)) + elif isinstance(ranker, FunctionScore): + request.function_score.CopyFrom(Prepare.function_score_schema(ranker)) + elif ranker is not None: + raise ParamError(message="The search ranker must be a Function or FunctionScore.") return request @classmethod - def search_requests_with_expr(cls, collection_name, data, anns_field, param, limit, expr=None, partition_names=None, - output_fields=None, round_decimal=-1, **kwargs): - # TODO Move this impl into server side - schema = kwargs.get("schema", None) - fields_schema = schema.get("fields", None) # list - fields_name_locs = {fields_schema[loc]["name"]: loc - for loc in range(len(fields_schema))} + def hybrid_search_request_with_ranker( + cls, + collection_name: str, + reqs: List, + rerank: Union[BaseRanker, Function], + limit: int, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + round_decimal: int = -1, + **kwargs, + ) -> milvus_types.HybridSearchRequest: + use_default_consistency = ts_utils.construct_guarantee_ts(collection_name, kwargs) + if rerank is not None and not isinstance(rerank, (Function, BaseRanker)): + raise ParamError(message="The hybrid search rerank must be a Function or a Ranker.") + rerank_param = {} + if isinstance(rerank, BaseRanker): + rerank_param = rerank.dict() + rerank_param["limit"] = limit + rerank_param["round_decimal"] = round_decimal + rerank_param["offset"] = kwargs.get("offset", 0) + + request = milvus_types.HybridSearchRequest( + collection_name=collection_name, + partition_names=partition_names, + requests=reqs, + output_fields=output_fields, + guarantee_timestamp=kwargs.get("guarantee_timestamp", 0), + use_default_consistency=use_default_consistency, + consistency_level=kwargs.get("consistency_level", 0), + ) - requests = [] + request.rank_params.extend( + [ + common_types.KeyValuePair(key=str(key), value=utils.dumps(value)) + for key, value in rerank_param.items() + ] + ) - if len(data) <= 0: - return requests + if kwargs.get(RANK_GROUP_SCORER) is not None: + request.rank_params.extend( + [ + common_types.KeyValuePair( + key=RANK_GROUP_SCORER, value=kwargs.get(RANK_GROUP_SCORER) + ) + ] + ) - if isinstance(data[0], bytes): - bytes_per_vector = len(data[0]) - is_binary = True - pl_type = PlaceholderType.BinaryVector - else: - bytes_per_vector = len(data[0]) * 4 - is_binary = False - pl_type = PlaceholderType.FloatVector + if kwargs.get(GROUP_BY_FIELD) is not None: + request.rank_params.extend( + [ + common_types.KeyValuePair( + key=GROUP_BY_FIELD, value=utils.dumps(kwargs.get(GROUP_BY_FIELD)) + ) + ] + ) - nq = len(data) - max_nq_per_batch = nq - factor = 2 - max_nq_per_batch = DefaultConfigs.MaxSearchResultSize / (bytes_per_vector * limit * factor) - max_nq_per_batch = int(max_nq_per_batch) - if max_nq_per_batch <= 1: - raise ParamError(f"limit {limit} is too large!") - - tag = "$0" - if anns_field not in fields_name_locs: - raise ParamError(f"Field {anns_field} doesn't exist in schema") - dimension = int(fields_schema[fields_name_locs[anns_field]]["params"].get("dim", 0)) - pls = cls._prepare_placeholders(data, nq, max_nq_per_batch, tag, pl_type, is_binary, dimension) - - param_copy = copy.deepcopy(param) - metric_type = param_copy.pop("metric_type", "L2") - params = param_copy.pop("params", {}) - if not isinstance(params, dict): - raise ParamError("Search params must be a dict") - search_params = {"anns_field": anns_field, "topk": limit, "metric_type": metric_type, "params": params, - "round_decimal": round_decimal} - - def dump(v): - if isinstance(v, dict): - return ujson.dumps(v) - return str(v) - - for pl in pls: - plg = milvus_types.PlaceholderGroup() - plg.placeholders.append(pl) - plg_str = milvus_types.PlaceholderGroup.SerializeToString(plg) - request = milvus_types.SearchRequest( - collection_name=collection_name, - partition_names=partition_names, - output_fields=output_fields, - guarantee_timestamp=kwargs.get("guarantee_timestamp", 0), - travel_timestamp=kwargs.get("travel_timestamp", 0), + if kwargs.get(GROUP_SIZE) is not None: + request.rank_params.extend( + [ + common_types.KeyValuePair( + key=GROUP_SIZE, value=utils.dumps(kwargs.get(GROUP_SIZE)) + ) + ] ) - request.placeholder_group = plg_str - request.dsl_type = common_types.DslType.BoolExprV1 - if expr is not None: - request.dsl = expr - request.search_params.extend([common_types.KeyValuePair(key=str(key), value=dump(value)) - for key, value in search_params.items()]) + if kwargs.get(STRICT_GROUP_SIZE) is not None: + request.rank_params.extend( + [ + common_types.KeyValuePair( + key=STRICT_GROUP_SIZE, value=utils.dumps(kwargs.get(STRICT_GROUP_SIZE)) + ) + ] + ) - requests.append(request) + if isinstance(rerank, Function): + request.function_score.CopyFrom(Prepare.ranker_to_function_score(rerank)) + return request - return requests + @staticmethod + def common_kv_value(v: Any) -> str: + if isinstance(v, (dict, list)): + return json.dumps(v) + return str(v) + + @staticmethod + def function_score_schema(function_score: FunctionScore) -> schema_types.FunctionScore: + functions = [ + schema_types.FunctionSchema( + name=ranker.name, + type=ranker.type, + description=ranker.description, + input_field_names=ranker.input_field_names, + params=[ + common_types.KeyValuePair(key=str(k), value=Prepare.common_kv_value(v)) + for k, v in ranker.params.items() + ], + ) + for ranker in function_score.functions + ] + + return schema_types.FunctionScore( + functions=functions, + params=[ + common_types.KeyValuePair(key=str(k), value=Prepare.common_kv_value(v)) + for k, v in function_score.params.items() + ], + ) + + @staticmethod + def ranker_to_function_score(ranker: Function) -> schema_types.FunctionScore: + function_score = schema_types.FunctionScore( + functions=[ + schema_types.FunctionSchema( + name=ranker.name, + type=ranker.type, + description=ranker.description, + input_field_names=ranker.input_field_names, + ) + ], + ) + for k, v in ranker.params.items(): + if isinstance(v, (dict, list)): + kv_pair = common_types.KeyValuePair(key=str(k), value=json.dumps(v)) + else: + kv_pair = common_types.KeyValuePair(key=str(k), value=str(v)) + function_score.functions[0].params.append(kv_pair) + return function_score @classmethod - def create_alias_request(cls, collection_name, alias): + def create_alias_request(cls, collection_name: str, alias: str): return milvus_types.CreateAliasRequest(collection_name=collection_name, alias=alias) @classmethod - def drop_alias_request(cls, alias): + def drop_alias_request(cls, alias: str): return milvus_types.DropAliasRequest(alias=alias) @classmethod - def alter_alias_request(cls, collection_name, alias): + def alter_alias_request(cls, collection_name: str, alias: str): return milvus_types.AlterAliasRequest(collection_name=collection_name, alias=alias) @classmethod - def create_index__request(cls, collection_name, field_name, params): - index_params = milvus_types.CreateIndexRequest(collection_name=collection_name, field_name=field_name) + def describe_alias_request(cls, alias: str): + return milvus_types.DescribeAliasRequest(alias=alias) - # index_params.collection_name = collection_name - # index_params.field_name = field_name + @classmethod + def list_aliases_request(cls, collection_name: str, db_name: str = ""): + return milvus_types.ListAliasesRequest(collection_name=collection_name, db_name=db_name) - def dump(tv): - if isinstance(tv, dict): - import json - return json.dumps(tv) - return str(tv) + @classmethod + def create_index_request(cls, collection_name: str, field_name: str, params: Dict, **kwargs): + index_params = milvus_types.CreateIndexRequest( + collection_name=collection_name, + field_name=field_name, + index_name=kwargs.get("index_name", ""), + ) if isinstance(params, dict): for tk, tv in params.items(): - if tk == "dim": - if not tv or not isinstance(tv, int): - raise ParamError("dim must be of int!") - kv_pair = common_types.KeyValuePair(key=str(tk), value=dump(tv)) - index_params.extra_params.append(kv_pair) + if tk == "dim" and (not tv or not isinstance(tv, int)): + raise ParamError(message="dim must be of int!") + if tv: + kv_pair = common_types.KeyValuePair(key=str(tk), value=utils.dumps(tv)) + index_params.extra_params.append(kv_pair) return index_params @classmethod - def describe_index_request(cls, collection_name, index_name): - return milvus_types.DescribeIndexRequest(collection_name=collection_name, index_name=index_name) + def alter_index_properties_request( + cls, collection_name: str, index_name: str, properties: dict + ): + params = [] + for k, v in properties.items(): + params.append(common_types.KeyValuePair(key=str(k), value=utils.dumps(v))) + return milvus_types.AlterIndexRequest( + collection_name=collection_name, index_name=index_name, extra_params=params + ) + + @classmethod + def drop_index_properties_request( + cls, collection_name: str, index_name: str, delete_keys: List[str] + ): + return milvus_types.AlterIndexRequest( + collection_name=collection_name, index_name=index_name, delete_keys=delete_keys + ) @classmethod - def describe_index_progress_request(cls, collection_name, field_name): - return milvus_types.DescribeIndexProgressRequest(collection_name=collection_name, field_name=field_name) + def describe_index_request( + cls, collection_name: str, index_name: str, timestamp: Optional[int] = None + ): + return milvus_types.DescribeIndexRequest( + collection_name=collection_name, index_name=index_name, timestamp=timestamp + ) @classmethod - def get_index_build_progress(cls, collection_name, field_name): - return milvus_types.GetIndexBuildProgressRequest(collection_name=collection_name, field_name=field_name) + def get_index_build_progress(cls, collection_name: str, index_name: str): + return milvus_types.GetIndexBuildProgressRequest( + collection_name=collection_name, index_name=index_name + ) @classmethod - def get_index_state_request(cls, collection_name, field_name): - return milvus_types.GetIndexStateRequest(collection_name=collection_name, field_name=field_name) + def get_index_state_request(cls, collection_name: str, index_name: str): + return milvus_types.GetIndexStateRequest( + collection_name=collection_name, index_name=index_name + ) @classmethod - def load_collection(cls, db_name, collection_name): - return milvus_types.LoadCollectionRequest(db_name=db_name, collection_name=collection_name) + def load_collection( + cls, + collection_name: str, + replica_number: Optional[int] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name) + req = milvus_types.LoadCollectionRequest( + collection_name=collection_name, + ) + + if replica_number: + check_pass_param(replica_number=replica_number) + req.replica_number = replica_number + + # Keep underscore key for backward compatibility + if "refresh" in kwargs or "_refresh" in kwargs: + refresh = kwargs.get("refresh", kwargs.get("_refresh", False)) + req.refresh = refresh + + if "resource_groups" in kwargs or "_resource_groups" in kwargs: + resource_groups = kwargs.get("resource_groups", kwargs.get("_resource_groups")) + req.resource_groups.extend(resource_groups) + + if "load_fields" in kwargs or "_load_fields" in kwargs: + load_fields = kwargs.get("load_fields", kwargs.get("_load_fields")) + req.load_fields.extend(load_fields) + + if "skip_load_dynamic_field" in kwargs or "_skip_load_dynamic_field" in kwargs: + skip_load_dynamic_field = kwargs.get( + "skip_load_dynamic_field", kwargs.get("_skip_load_dynamic_field", False) + ) + req.skip_load_dynamic_field = skip_load_dynamic_field + + if "priority" in kwargs: + priority = kwargs.get("priority") + req.load_params["load_priority"] = priority + + return req @classmethod - def release_collection(cls, db_name, collection_name): - return milvus_types.ReleaseCollectionRequest(db_name=db_name, collection_name=collection_name) + def release_collection(cls, db_name: str, collection_name: str): + return milvus_types.ReleaseCollectionRequest( + db_name=db_name, collection_name=collection_name + ) @classmethod - def load_partitions(cls, db_name, collection_name, partition_names): - return milvus_types.LoadPartitionsRequest(db_name=db_name, collection_name=collection_name, - partition_names=partition_names) + def load_partitions( + cls, + collection_name: str, + partition_names: List[str], + replica_number: Optional[int] = None, + **kwargs, + ): + check_pass_param(collection_name=collection_name) + req = milvus_types.LoadPartitionsRequest( + collection_name=collection_name, + ) + + if partition_names: + check_pass_param(partition_name_array=partition_names) + req.partition_names.extend(partition_names) + + if replica_number: + check_pass_param(replica_number=replica_number) + req.replica_number = replica_number + + # Keep underscore key for backward compatibility + if "refresh" in kwargs or "_refresh" in kwargs: + refresh = kwargs.get("refresh", kwargs.get("_refresh", False)) + req.refresh = refresh + + if "resource_groups" in kwargs or "_resource_groups" in kwargs: + resource_groups = kwargs.get("resource_groups", kwargs.get("_resource_groups")) + req.resource_groups.extend(resource_groups) + + if "load_fields" in kwargs or "_load_fields" in kwargs: + load_fields = kwargs.get("load_fields", kwargs.get("_load_fields")) + req.load_fields.extend(load_fields) + + if "skip_load_dynamic_field" in kwargs or "_skip_load_dynamic_field" in kwargs: + skip_load_dynamic_field = kwargs.get( + "skip_load_dynamic_field", kwargs.get("_skip_load_dynamic_field", False) + ) + req.skip_load_dynamic_field = skip_load_dynamic_field + + if "priority" in kwargs: + priority = kwargs.get("priority") + req.load_params["load_priority"] = priority + return req @classmethod - def release_partitions(cls, db_name, collection_name, partition_names): - return milvus_types.ReleasePartitionsRequest(db_name=db_name, collection_name=collection_name, - partition_names=partition_names) + def release_partitions(cls, db_name: str, collection_name: str, partition_names: List[str]): + return milvus_types.ReleasePartitionsRequest( + db_name=db_name, collection_name=collection_name, partition_names=partition_names + ) @classmethod - def get_collection_stats_request(cls, collection_name): + def get_collection_stats_request(cls, collection_name: str): return milvus_types.GetCollectionStatisticsRequest(collection_name=collection_name) @classmethod - def get_persistent_segment_info_request(cls, collection_name): + def get_persistent_segment_info_request(cls, collection_name: str): return milvus_types.GetPersistentSegmentInfoRequest(collectionName=collection_name) @classmethod - def get_flush_state_request(cls, segment_ids): - return milvus_types.GetFlushStateRequest(segmentIDs=segment_ids) + def get_flush_state_request(cls, segment_ids: List[int], collection_name: str, flush_ts: int): + return milvus_types.GetFlushStateRequest( + segmentIDs=segment_ids, collection_name=collection_name, flush_ts=flush_ts + ) @classmethod - def get_query_segment_info_request(cls, collection_name): + def get_query_segment_info_request(cls, collection_name: str): return milvus_types.GetQuerySegmentInfoRequest(collectionName=collection_name) @classmethod - def flush_param(cls, collection_names): + def flush_param(cls, collection_names: List[str]): return milvus_types.FlushRequest(collection_names=collection_names) @classmethod - def drop_index_request(cls, collection_name, field_name, index_name): - return milvus_types.DropIndexRequest(db_name="", collection_name=collection_name, field_name=field_name, - index_name=index_name) + def drop_index_request(cls, collection_name: str, field_name: str, index_name: str): + return milvus_types.DropIndexRequest( + db_name="", + collection_name=collection_name, + field_name=field_name, + index_name=index_name, + ) @classmethod - def get_partition_stats_request(cls, collection_name, partition_name): - return milvus_types.GetPartitionStatisticsRequest(db_name="", collection_name=collection_name, - partition_name=partition_name) + def get_partition_stats_request(cls, collection_name: str, partition_name: str): + return milvus_types.GetPartitionStatisticsRequest( + db_name="", collection_name=collection_name, partition_name=partition_name + ) @classmethod - def dummy_request(cls, request_type): + def dummy_request(cls, request_type: Any): return milvus_types.DummyRequest(request_type=request_type) @classmethod - def retrieve_request(cls, collection_name, ids, output_fields, partition_names): + def retrieve_request( + cls, + collection_name: str, + ids: List[str], + output_fields: List[str], + partition_names: List[str], + ): ids = schema_types.IDs(int_id=schema_types.LongArray(data=ids)) - return milvus_types.RetrieveRequest(db_name="", - collection_name=collection_name, - ids=ids, - output_fields=output_fields, - partition_names=partition_names) - - @classmethod - def query_request(cls, collection_name, expr, output_fields, partition_names, guarantee_timestamp, - travel_timestamp): - return milvus_types.QueryRequest(db_name="", - collection_name=collection_name, - expr=expr, - output_fields=output_fields, - partition_names=partition_names, - guarantee_timestamp=guarantee_timestamp, - travel_timestamp=travel_timestamp, - ) - - @classmethod - def calc_distance_request(cls, vectors_left, vectors_right, params): - if vectors_left is None or not isinstance(vectors_left, dict): - raise ParamError("vectors_left value {} is illegal".format(vectors_left)) - - if vectors_right is None or not isinstance(vectors_right, dict): - raise ParamError("vectors_right value {} is illegal".format(vectors_right)) - - def precheck_params(p): - ret = p or {"metric": "L2"} - if "metric" not in ret.keys(): - ret["metric"] = "L2" - - if (not isinstance(ret, dict)) or (not isinstance(ret["metric"], str)) or len(ret["metric"]) == 0: - raise ParamError("params value {} is illegal".format(p)) - return ret - - precheck_params(params) - - request = milvus_types.CalcDistanceRequest() - request.params.extend([common_types.KeyValuePair(key=str(key), value=str(value)) - for key, value in params.items()]) - - _TYPE_IDS = "ids" - _TYPE_FLOAT = "float_vectors" - _TYPE_BIN = "bin_vectors" - - def extract_vectors(vectors, request_op, is_left): - prefix = "vectors_right" - if is_left: - prefix = "vectors_left" - dimension = 0 - if _TYPE_IDS in vectors.keys(): - if "collection" not in vectors.keys(): - raise ParamError("Collection name not specified") - if "field" not in vectors.keys(): - raise ParamError("Vector field name not specified") - ids = vectors.get(_TYPE_IDS) - if (not isinstance(ids, list)) or len(ids) == 0: - raise ParamError("Vector id array is empty or not a list") - - calc_type = _TYPE_IDS - if isinstance(ids[0], str): - request_op.id_array.id_array.str_id.data.extend(ids) - else: - request_op.id_array.id_array.int_id.data.extend(ids) - request_op.id_array.collection_name = vectors["collection"] - request_op.id_array.field_name = vectors["field"] - if "partition" in vectors.keys(): - request_op.id_array.partition_names.append(vectors.get("partition")) - elif _TYPE_FLOAT in vectors.keys(): - float_array = vectors.get(_TYPE_FLOAT) - if (not isinstance(float_array, list)) or len(float_array) == 0: - msg = prefix + " value {} is illegal" - raise ParamError(msg.format(vectors)) - calc_type = _TYPE_FLOAT - all_floats = [f for vector in float_array for f in vector] - request_op.data_array.dim = len(float_array[0]) - dimension = request_op.data_array.dim - request_op.data_array.float_vector.data.extend(all_floats) - elif _TYPE_BIN in vectors.keys(): - bin_array = vectors.get(_TYPE_BIN) - if (not isinstance(bin_array, list)) or len(bin_array) == 0: - msg = prefix + " value {} is illegal" - raise ParamError(msg.format(vectors)) - calc_type = _TYPE_BIN - request_op.data_array.dim = len(bin_array[0]) * 8 - if "dim" in params.keys(): - request_op.data_array.dim = params["dim"] - dimension = request_op.data_array.dim - for bin in bin_array: - request_op.data_array.binary_vector += bin - else: - msg = prefix + " value {} is illegal" - raise ParamError(msg.format(vectors)) - return calc_type, dimension - - type_left, dim_left = extract_vectors(vectors_left, request.op_left, True) - type_right, dim_right = extract_vectors(vectors_right, request.op_right, False) - - if (type_left == _TYPE_FLOAT and type_right == _TYPE_BIN) or ( - type_left == _TYPE_BIN and type_right == _TYPE_FLOAT): - raise ParamError("Cannot calculate distance between float vectors and binary vectors") - - if (type_left != _TYPE_IDS and type_right != _TYPE_IDS) and dim_left != dim_right: - raise ParamError("Cannot calculate distance between vectors with different dimension") - - def postcheck_params(vtype, p): - metrics_f = ["L2", "IP"] - metrics_b = ["HAMMING", "TANIMOTO"] - m = p["metric"].upper() - if vtype == _TYPE_FLOAT and (m not in metrics_f): - msg = "{} metric type is invalid for float vector" - raise ParamError(msg.format(p["metric"])) - if vtype == _TYPE_BIN and (m not in metrics_b): - msg = "{} metric type is invalid for binary vector" - raise ParamError(msg.format(p["metric"])) - - postcheck_params(type_left, params) - postcheck_params(type_right, params) - - return request + return milvus_types.RetrieveRequest( + db_name="", + collection_name=collection_name, + ids=ids, + output_fields=output_fields, + partition_names=partition_names, + ) @classmethod - def load_balance_request(cls, src_node_id, dst_node_ids, sealed_segment_ids): - if src_node_id is None or not isinstance(src_node_id, int): - raise ParamError("src_node_id value {} is illegal".format(src_node_id)) + def query_request( + cls, + collection_name: str, + expr: str, + output_fields: List[str], + partition_names: List[str], + **kwargs, + ): + use_default_consistency = ts_utils.construct_guarantee_ts(collection_name, kwargs) + req = milvus_types.QueryRequest( + db_name="", + collection_name=collection_name, + expr=expr, + output_fields=output_fields, + partition_names=partition_names, + guarantee_timestamp=kwargs.get("guarantee_timestamp", 0), + use_default_consistency=use_default_consistency, + consistency_level=kwargs.get("consistency_level", 0), + expr_template_values=cls.prepare_expression_template(kwargs.get("expr_params", {})), + ) + collection_id = kwargs.get(COLLECTION_ID) + if collection_id is not None: + req.query_params.append( + common_types.KeyValuePair(key=COLLECTION_ID, value=str(collection_id)) + ) - if dst_node_ids is None or not isinstance(dst_node_ids, list): - raise ParamError("dst_node_ids value {} is illegal".format(dst_node_ids)) + limit = kwargs.get("limit") + if limit is not None: + req.query_params.append(common_types.KeyValuePair(key="limit", value=str(limit))) - if sealed_segment_ids is None or not isinstance(sealed_segment_ids, list): - raise ParamError("sealed_segment_ids value {} is illegal".format(sealed_segment_ids)) + offset = kwargs.get("offset") + if offset is not None: + req.query_params.append(common_types.KeyValuePair(key="offset", value=str(offset))) - request = milvus_types.LoadBalanceRequest() - request.src_nodeID = src_node_id - request.dst_nodeIDs.extend(dst_node_ids) - request.sealed_segmentIDs.extend(sealed_segment_ids) + timezone = kwargs.get("timezone") + if timezone is not None: + req.query_params.append(common_types.KeyValuePair(key="timezone", value=timezone)) - return request + timefileds = kwargs.get("time_fields") + if timefileds is not None: + req.query_params.append(common_types.KeyValuePair(key="time_fields", value=timefileds)) - @classmethod - def manual_compaction(cls, collection_id, timetravel): - if collection_id is None or not isinstance(collection_id, int): - raise ParamError(f"collection_id value {collection_id} is illegal") + ignore_growing = kwargs.get("ignore_growing", False) + stop_reduce_for_best = kwargs.get(REDUCE_STOP_FOR_BEST, False) + is_iterator = kwargs.get(ITERATOR_FIELD) + if is_iterator is not None: + req.query_params.append( + common_types.KeyValuePair(key=ITERATOR_FIELD, value=is_iterator) + ) - if timetravel is None or not isinstance(timetravel, int): - raise ParamError(f"timetravel value {timetravel} is illegal") + req.query_params.append( + common_types.KeyValuePair(key="ignore_growing", value=str(ignore_growing)) + ) + req.query_params.append( + common_types.KeyValuePair(key=REDUCE_STOP_FOR_BEST, value=str(stop_reduce_for_best)) + ) + return req - request = milvus_types.ManualCompactionRequest() - request.collectionID = collection_id - request.timetravel = timetravel + @classmethod + def load_balance_request( + cls, + collection_name: str, + src_node_id: int, + dst_node_ids: List[int], + sealed_segment_ids: List[int], + ): + return milvus_types.LoadBalanceRequest( + collectionName=collection_name, + src_nodeID=src_node_id, + dst_nodeIDs=dst_node_ids, + sealed_segmentIDs=sealed_segment_ids, + ) + @classmethod + def manual_compaction( + cls, + collection_name: str, + is_clustering: bool, + is_l0: bool, + collection_id: Optional[int] = None, + target_size: Optional[int] = None, + ): + if is_clustering is None or not isinstance(is_clustering, bool): + raise ParamError(message=f"is_clustering value {is_clustering} is illegal") + if is_l0 is None or not isinstance(is_l0, bool): + raise ParamError(message=f"is_l0 value {is_l0} is illegal") + + request = milvus_types.ManualCompactionRequest( + collection_name=collection_name, + majorCompaction=is_clustering, + l0Compaction=is_l0, + target_size=target_size, + ) + if collection_id is not None: + request.collectionID = collection_id return request @classmethod def get_compaction_state(cls, compaction_id: int): if compaction_id is None or not isinstance(compaction_id, int): - raise ParamError(f"compaction_id value {compaction_id} is illegal") + raise ParamError(message=f"compaction_id value {compaction_id} is illegal") request = milvus_types.GetCompactionStateRequest() request.compactionID = compaction_id @@ -929,8 +1998,432 @@ def get_compaction_state(cls, compaction_id: int): @classmethod def get_compaction_state_with_plans(cls, compaction_id: int): if compaction_id is None or not isinstance(compaction_id, int): - raise ParamError(f"compaction_id value {compaction_id} is illegal") + raise ParamError(message=f"compaction_id value {compaction_id} is illegal") request = milvus_types.GetCompactionPlansRequest() request.compactionID = compaction_id return request + + @classmethod + def get_replicas(cls, collection_id: int): + if collection_id is None or not isinstance(collection_id, int): + raise ParamError(message=f"collection_id value {collection_id} is illegal") + + return milvus_types.GetReplicasRequest( + collectionID=collection_id, + with_shard_nodes=True, + ) + + @classmethod + def do_bulk_insert(cls, collection_name: str, partition_name: str, files: list, **kwargs): + channel_names = kwargs.get("channel_names") + req = milvus_types.ImportRequest( + collection_name=collection_name, + partition_name=partition_name, + files=files, + ) + if channel_names is not None: + req.channel_names.extend(channel_names) + + for k, v in kwargs.items(): + if k in ("bucket", "backup", "sep", "nullkey"): + kv_pair = common_types.KeyValuePair(key=str(k), value=str(v)) + req.options.append(kv_pair) + + return req + + @classmethod + def get_bulk_insert_state(cls, task_id: int): + if task_id is None or not isinstance(task_id, int): + msg = f"task_id value {task_id} is not an integer" + raise ParamError(message=msg) + + return milvus_types.GetImportStateRequest(task=task_id) + + @classmethod + def list_bulk_insert_tasks(cls, limit: int, collection_name: str): + if limit is None or not isinstance(limit, int): + msg = f"limit value {limit} is not an integer" + raise ParamError(message=msg) + + return milvus_types.ListImportTasksRequest( + collection_name=collection_name, + limit=limit, + ) + + @classmethod + def create_user_request(cls, user: str, password: str): + check_pass_param(user=user, password=password) + return milvus_types.CreateCredentialRequest( + username=user, password=base64.b64encode(password.encode("utf-8")) + ) + + @classmethod + def update_password_request(cls, user: str, old_password: str, new_password: str): + check_pass_param(user=user) + check_pass_param(password=old_password) + check_pass_param(password=new_password) + return milvus_types.UpdateCredentialRequest( + username=user, + oldPassword=base64.b64encode(old_password.encode("utf-8")), + newPassword=base64.b64encode(new_password.encode("utf-8")), + ) + + @classmethod + def delete_user_request(cls, user: str): + if not isinstance(user, str): + raise ParamError(message=f"invalid user {user}") + return milvus_types.DeleteCredentialRequest(username=user) + + @classmethod + def list_usernames_request(cls): + return milvus_types.ListCredUsersRequest() + + @classmethod + def create_role_request(cls, role_name: str): + check_pass_param(role_name=role_name) + return milvus_types.CreateRoleRequest(entity=milvus_types.RoleEntity(name=role_name)) + + @classmethod + def drop_role_request(cls, role_name: str, force_drop: bool = False): + check_pass_param(role_name=role_name) + return milvus_types.DropRoleRequest(role_name=role_name, force_drop=force_drop) + + @classmethod + def operate_user_role_request(cls, username: str, role_name: str, operate_user_role_type: Any): + check_pass_param(user=username) + check_pass_param(role_name=role_name) + check_pass_param(operate_user_role_type=operate_user_role_type) + return milvus_types.OperateUserRoleRequest( + username=username, role_name=role_name, type=operate_user_role_type + ) + + @classmethod + def select_role_request(cls, role_name: str, include_user_info: bool): + if role_name: + check_pass_param(role_name=role_name) + check_pass_param(include_user_info=include_user_info) + return milvus_types.SelectRoleRequest( + role=milvus_types.RoleEntity(name=role_name) if role_name else None, + include_user_info=include_user_info, + ) + + @classmethod + def select_user_request(cls, username: str, include_role_info: bool): + if username: + check_pass_param(user=username) + check_pass_param(include_role_info=include_role_info) + return milvus_types.SelectUserRequest( + user=milvus_types.UserEntity(name=username) if username else None, + include_role_info=include_role_info, + ) + + @classmethod + def operate_privilege_request( + cls, + role_name: str, + object: Any, + object_name: str, + privilege: str, + db_name: str, + operate_privilege_type: Any, + ): + check_pass_param(role_name=role_name) + check_pass_param(object=object) + check_pass_param(object_name=object_name) + check_pass_param(privilege=privilege) + check_pass_param(operate_privilege_type=operate_privilege_type) + return milvus_types.OperatePrivilegeRequest( + entity=milvus_types.GrantEntity( + role=milvus_types.RoleEntity(name=role_name), + object=milvus_types.ObjectEntity(name=object), + object_name=object_name, + db_name=db_name, + grantor=milvus_types.GrantorEntity( + privilege=milvus_types.PrivilegeEntity(name=privilege) + ), + ), + type=operate_privilege_type, + ) + + @classmethod + def operate_privilege_v2_request( + cls, + role_name: str, + privilege: str, + operate_privilege_type: Any, + db_name: str, + collection_name: str, + ): + check_pass_param( + role_name=role_name, + privilege=privilege, + collection_name=collection_name, + operate_privilege_type=operate_privilege_type, + ) + if db_name: + check_pass_param(db_name=db_name) + return milvus_types.OperatePrivilegeV2Request( + role=milvus_types.RoleEntity(name=role_name), + grantor=milvus_types.GrantorEntity( + privilege=milvus_types.PrivilegeEntity(name=privilege) + ), + type=operate_privilege_type, + db_name=db_name, + collection_name=collection_name, + ) + + @classmethod + def select_grant_request(cls, role_name: str, object: str, object_name: str, db_name: str): + check_pass_param(role_name=role_name) + if object: + check_pass_param(object=object) + if object_name: + check_pass_param(object_name=object_name) + return milvus_types.SelectGrantRequest( + entity=milvus_types.GrantEntity( + role=milvus_types.RoleEntity(name=role_name), + object=milvus_types.ObjectEntity(name=object) if object else None, + object_name=object_name if object_name else None, + db_name=db_name, + ), + ) + + @classmethod + def get_server_version(cls): + return milvus_types.GetVersionRequest() + + @classmethod + def create_resource_group(cls, name: str, **kwargs): + check_pass_param(resource_group_name=name) + return milvus_types.CreateResourceGroupRequest( + resource_group=name, + config=kwargs.get("config"), + ) + + @classmethod + def update_resource_groups(cls, configs: Mapping[str, ResourceGroupConfig]): + return milvus_types.UpdateResourceGroupsRequest( + resource_groups=configs, + ) + + @classmethod + def drop_resource_group(cls, name: str): + check_pass_param(resource_group_name=name) + return milvus_types.DropResourceGroupRequest(resource_group=name) + + @classmethod + def list_resource_groups(cls): + return milvus_types.ListResourceGroupsRequest() + + @classmethod + def describe_resource_group(cls, name: str): + check_pass_param(resource_group_name=name) + return milvus_types.DescribeResourceGroupRequest(resource_group=name) + + @classmethod + def transfer_node(cls, source: str, target: str, num_node: int): + check_pass_param(resource_group_name=source) + check_pass_param(resource_group_name=target) + return milvus_types.TransferNodeRequest( + source_resource_group=source, target_resource_group=target, num_node=num_node + ) + + @classmethod + def transfer_replica(cls, source: str, target: str, collection_name: str, num_replica: int): + check_pass_param(resource_group_name=source) + check_pass_param(resource_group_name=target) + return milvus_types.TransferReplicaRequest( + source_resource_group=source, + target_resource_group=target, + collection_name=collection_name, + num_replica=num_replica, + ) + + @classmethod + def flush_all_request(cls, db_name: str): + return milvus_types.FlushAllRequest(db_name=db_name) + + @classmethod + def get_flush_all_state_request(cls, flush_all_ts: int, db_name: str): + return milvus_types.GetFlushAllStateRequest(flush_all_ts=flush_all_ts, db_name=db_name) + + @classmethod + def register_request(cls, user: str, host: str, **kwargs): + reserved = {} + for k, v in kwargs.items(): + reserved[k] = v + now = datetime.datetime.now() + this = common_types.ClientInfo( + sdk_type="Python", + sdk_version=__version__, + local_time=now.__str__(), + reserved=reserved, + ) + if user is not None: + this.user = user + if host is not None: + this.host = host + return milvus_types.ConnectRequest( + client_info=this, + ) + + @classmethod + def create_database_req(cls, db_name: str, properties: Optional[dict] = None): + req = milvus_types.CreateDatabaseRequest(db_name=db_name) + + if is_legal_collection_properties(properties): + properties = [ + common_types.KeyValuePair(key=str(k), value=str(v)) for k, v in properties.items() + ] + req.properties.extend(properties) + return req + + @classmethod + def drop_database_req(cls, db_name: str): + check_pass_param(db_name=db_name) + return milvus_types.DropDatabaseRequest(db_name=db_name) + + @classmethod + def list_database_req(cls): + return milvus_types.ListDatabasesRequest() + + @classmethod + def alter_database_properties_req(cls, db_name: str, properties: Dict): + check_pass_param(db_name=db_name) + kvs = [common_types.KeyValuePair(key=k, value=str(v)) for k, v in properties.items()] + return milvus_types.AlterDatabaseRequest(db_name=db_name, properties=kvs) + + @classmethod + def drop_database_properties_req(cls, db_name: str, property_keys: List[str]): + check_pass_param(db_name=db_name) + return milvus_types.AlterDatabaseRequest(db_name=db_name, delete_keys=property_keys) + + @classmethod + def describe_database_req(cls, db_name: str): + check_pass_param(db_name=db_name) + return milvus_types.DescribeDatabaseRequest(db_name=db_name) + + @classmethod + def create_privilege_group_req(cls, privilege_group: str): + check_pass_param(privilege_group=privilege_group) + return milvus_types.CreatePrivilegeGroupRequest(group_name=privilege_group) + + @classmethod + def drop_privilege_group_req(cls, privilege_group: str): + check_pass_param(privilege_group=privilege_group) + return milvus_types.DropPrivilegeGroupRequest(group_name=privilege_group) + + @classmethod + def list_privilege_groups_req(cls): + return milvus_types.ListPrivilegeGroupsRequest() + + @classmethod + def operate_privilege_group_req( + cls, privilege_group: str, privileges: List[str], operate_privilege_group_type: Any + ): + check_pass_param(privilege_group=privilege_group) + check_pass_param(privileges=privileges) + check_pass_param(operate_privilege_group_type=operate_privilege_group_type) + return milvus_types.OperatePrivilegeGroupRequest( + group_name=privilege_group, + privileges=[milvus_types.PrivilegeEntity(name=p) for p in privileges], + type=operate_privilege_group_type, + ) + + @classmethod + def run_analyzer( + cls, + texts: Union[str, List[str]], + analyzer_params: Optional[Union[str, Dict]] = None, + with_hash: bool = False, + with_detail: bool = False, + collection_name: Optional[str] = None, + field_name: Optional[str] = None, + analyzer_names: Optional[Union[str, List[str]]] = None, + ): + req = milvus_types.RunAnalyzerRequest(with_hash=with_hash, with_detail=with_detail) + if isinstance(texts, str): + req.placeholder.append(texts.encode("utf-8")) + else: + req.placeholder.extend([text.encode("utf-8") for text in texts]) + + if analyzer_params is not None: + if isinstance(analyzer_params, dict): + req.analyzer_params = orjson.dumps(analyzer_params).decode(Config.EncodeProtocol) + else: + req.analyzer_params = analyzer_params + + if collection_name is not None: + req.collection_name = collection_name + + if field_name is not None: + req.field_name = field_name + + if analyzer_names is not None: + if isinstance(analyzer_names, str): + req.analyzer_names.extend([analyzer_names]) + else: + req.analyzer_names.extend(analyzer_names) + return req + + @classmethod + def update_replicate_configuration_request( + cls, + clusters: Optional[List[Dict]] = None, + cross_cluster_topology: Optional[List[Dict]] = None, + ): + # Validate input parameters + if clusters is None and cross_cluster_topology is None: + msg = "Either 'clusters' or 'cross_cluster_topology' must be provided" + raise ParamError(message=msg) + + # Build ReplicateConfiguration from simplified parameters + replicate_configuration = common_pb2.ReplicateConfiguration() + + # Add clusters + if clusters is not None: + for cluster_config in clusters: + cluster = common_pb2.MilvusCluster() + + if "cluster_id" not in cluster_config: + msg = "cluster_id is required for each cluster" + raise ParamError(message=msg) + cluster.cluster_id = cluster_config["cluster_id"] + + if "connection_param" not in cluster_config: + msg = "connection_param is required for each cluster" + raise ParamError(message=msg) + conn_param = cluster_config["connection_param"] + if "uri" not in conn_param: + msg = "uri is required in connection_param" + raise ParamError(message=msg) + + cluster.connection_param.uri = conn_param["uri"] + cluster.connection_param.token = conn_param.get("token", "") + + if "pchannels" in cluster_config: + cluster.pchannels.extend(cluster_config["pchannels"]) + + replicate_configuration.clusters.append(cluster) + + # Add cross-cluster topology + if cross_cluster_topology is not None: + for topology_config in cross_cluster_topology: + topology = common_pb2.CrossClusterTopology() + + if "source_cluster_id" not in topology_config: + msg = "source_cluster_id is required for each topology" + raise ParamError(message=msg) + topology.source_cluster_id = topology_config["source_cluster_id"] + + if "target_cluster_id" not in topology_config: + msg = "target_cluster_id is required for each topology" + raise ParamError(message=msg) + topology.target_cluster_id = topology_config["target_cluster_id"] + + replicate_configuration.cross_cluster_topology.append(topology) + + return milvus_types.UpdateReplicateConfigurationRequest( + replicate_configuration=replicate_configuration + ) diff --git a/pymilvus/client/search_iterator.py b/pymilvus/client/search_iterator.py new file mode 100644 index 000000000..1a2b878cf --- /dev/null +++ b/pymilvus/client/search_iterator.py @@ -0,0 +1,198 @@ +import logging +from copy import deepcopy +from typing import Callable, Dict, List, Optional, Union + +from pymilvus.client import entity_helper, utils +from pymilvus.client.constants import ( + COLLECTION_ID, + GUARANTEE_TIMESTAMP, + ITER_SEARCH_BATCH_SIZE_KEY, + ITER_SEARCH_ID_KEY, + ITER_SEARCH_LAST_BOUND_KEY, + ITER_SEARCH_V2_KEY, + ITERATOR_FIELD, +) +from pymilvus.client.search_result import Hit, Hits +from pymilvus.exceptions import ExceptionsMessage, ParamError, ServerVersionIncompatibleException +from pymilvus.orm.connections import Connections +from pymilvus.orm.constants import MAX_BATCH_SIZE, OFFSET, UNLIMITED +from pymilvus.orm.iterator import SearchPage, fall_back_to_latest_session_ts + +logger = logging.getLogger(__name__) + + +class SearchIteratorV2: + # for compatibility, track the number of total results left + _left_res_cnt = None + + def __init__( + self, + connection: Connections, + collection_name: str, + data: Union[List, utils.SparseMatrixInputType], + batch_size: int = 1000, + limit: Optional[int] = UNLIMITED, + filter: Optional[str] = None, + output_fields: Optional[List[str]] = None, + search_params: Optional[Dict] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + anns_field: Optional[str] = None, + round_decimal: Optional[int] = -1, + external_filter_func: Optional[Callable[[Hits], Union[Hits, List[Hit]]]] = None, + **kwargs, + ): + self._check_params(batch_size, data, kwargs) + + # for compatibility, support limit, deprecate in future + if limit != UNLIMITED: + self._left_res_cnt = limit + + self._conn = connection + self._set_up_collection_id(collection_name) + kwargs[COLLECTION_ID] = self._collection_id + self._params = { + "collection_name": collection_name, + "data": data, + "anns_field": anns_field, + "param": deepcopy(search_params), + "limit": batch_size, + "expression": filter, + "partition_names": partition_names, + "output_fields": output_fields, + "timeout": timeout, + "round_decimal": round_decimal, + ITERATOR_FIELD: True, + ITER_SEARCH_V2_KEY: True, + ITER_SEARCH_BATCH_SIZE_KEY: batch_size, + GUARANTEE_TIMESTAMP: 0, + **kwargs, + } + self._external_filter_func = external_filter_func + self._cache = [] + self._batch_size = batch_size + self._probe_for_compability(self._params) + + def _set_up_collection_id(self, collection_name: str): + res = self._conn.describe_collection(collection_name) + self._collection_id = res[COLLECTION_ID] + + def _check_token_exists(self, token: Union[str, None]): + if token is None or token == "": + raise ServerVersionIncompatibleException( + message=ExceptionsMessage.SearchIteratorV2FallbackWarning + ) + + # this detects whether the server supports search_iterator_v2 and is for compatibility only + # if the server holds iterator states, this implementation needs to be reconsidered + def _probe_for_compability(self, params: Dict): + dummy_params = deepcopy(params) + dummy_batch_size = 1 + dummy_params["limit"] = dummy_batch_size + dummy_params[ITER_SEARCH_BATCH_SIZE_KEY] = dummy_batch_size + iter_info = self._conn.search(**dummy_params).get_search_iterator_v2_results_info() + self._check_token_exists(iter_info.token) + + # internal next function, do not use this outside of this class + def _next(self): + res = self._conn.search(**self._params) + iter_info = res.get_search_iterator_v2_results_info() + self._check_token_exists(iter_info.token) + self._params[ITER_SEARCH_LAST_BOUND_KEY] = iter_info.last_bound + + # patch token and guarantee timestamp for the first next() call + if ITER_SEARCH_ID_KEY not in self._params: + # the token should not change during the lifetime of the iterator + self._params[ITER_SEARCH_ID_KEY] = iter_info.token + if self._params[GUARANTEE_TIMESTAMP] <= 0: + if res.get_session_ts() > 0: + self._params[GUARANTEE_TIMESTAMP] = res.get_session_ts() + else: + logger.warning( + "failed to set up mvccTs from milvus server, use client-side ts instead" + ) + self._params[GUARANTEE_TIMESTAMP] = fall_back_to_latest_session_ts() + return res + + def next(self): + if self._left_res_cnt is not None and self._left_res_cnt <= 0: + return None + + if self._external_filter_func is None: + # return SearchPage for compability + return self._wrap_return_res(self._next()[0]) + # the length of the results should be `batch_size` if no limit is set, + # otherwise it should be the number of results left if less than `batch_size` + target_len = ( + self._batch_size + if self._left_res_cnt is None + else min(self._batch_size, self._left_res_cnt) + ) + while True: + hits = self._next()[0] + + # no more results from server + if len(hits) == 0: + break + + # apply external filter + if self._external_filter_func is not None: + hits = self._external_filter_func(hits) + + self._cache.extend(hits) + if len(self._cache) >= target_len: + break + + # if the number of elements in cache is less than or equal to target_len, + # return all results we could possibly return + # if the number of elements in cache is more than target_len, + # return target_len results and keep the rest for next call + ret = self._cache[:target_len] + del self._cache[:target_len] + # return SearchPage for compability + return self._wrap_return_res(ret) + + def close(self): + pass + + def _check_params( + self, + batch_size: int, + data: Union[List, utils.SparseMatrixInputType], + kwargs: Dict, + ): + # metric_type can be empty, deduced at server side + # anns_field can be empty, deduced at server side + + # check batch size + if batch_size < 0: + raise ParamError(message="batch size cannot be less than zero") + if batch_size > MAX_BATCH_SIZE: + raise ParamError(message=f"batch size cannot be larger than {MAX_BATCH_SIZE}") + + # check offset + if kwargs.get(OFFSET, 0) != 0: + raise ParamError(message="Offset is not supported for search_iterator_v2") + + # check num queries, heavy to check at server side + rows = entity_helper.get_input_num_rows(data) + if rows > 1: + raise ParamError( + message="search_iterator_v2 does not support processing multiple vectors simultaneously" + ) + if rows == 0: + raise ParamError(message="The vector data for search cannot be empty") + + def _wrap_return_res(self, res: Hits) -> SearchPage: + if len(res) == 0: + return SearchPage(None) + + if self._left_res_cnt is None: + return SearchPage(res) + + # When we have a limit, ensure we don't return more results than requested + cur_len = len(res) + if cur_len > self._left_res_cnt: + res = res[: self._left_res_cnt] + self._left_res_cnt -= cur_len + return SearchPage(res) diff --git a/pymilvus/client/search_result.py b/pymilvus/client/search_result.py new file mode 100644 index 000000000..3e5c26f4b --- /dev/null +++ b/pymilvus/client/search_result.py @@ -0,0 +1,826 @@ +import logging +from typing import Any, Dict, List, Optional, Tuple, Union + +import numpy as np +import orjson + +from pymilvus.client.types import DataType +from pymilvus.exceptions import MilvusException +from pymilvus.grpc_gen import common_pb2, schema_pb2 +from pymilvus.grpc_gen.schema_pb2 import FieldData + +from . import entity_helper + +logger = logging.getLogger(__name__) + + +class HybridHits(list): + ids: List[Union[str, int]] + distances: List[float] + lazy_field_data: List[schema_pb2.FieldData] + has_materialized: bool + dynamic_fields: List[str] + start: int + + def __init__( + self, + start: int, + end: int, + all_pks: List[Union[str, int]], + all_scores: List[float], + fields_data: List[schema_pb2.FieldData], + output_fields: List[str], + pk_name: str, + ): + self.ids = all_pks[start:end] + self.distances = all_scores[start:end] + self.dynamic_fields = set(output_fields) - { + field_data.field_name for field_data in fields_data + } + self.lazy_field_data = [] + self.has_materialized = False + self.start = start + top_k_res = [ + Hit({pk_name: all_pks[i], "distance": all_scores[i], "entity": {}}, pk_name=pk_name) + for i in range(start, end) + ] + for field_data in fields_data: + data = get_field_data(field_data) + has_valid = len(field_data.valid_data) > 0 + if field_data.type in [ + DataType.BOOL, + DataType.INT8, + DataType.INT16, + DataType.INT32, + DataType.INT64, + DataType.FLOAT, + DataType.DOUBLE, + DataType.VARCHAR, + DataType.GEOMETRY, + DataType.TIMESTAMPTZ, + ]: + if has_valid: + [ + hit["entity"].__setitem__( + field_data.field_name, + data[i + start] if field_data.valid_data[i + start] else None, + ) + for i, hit in enumerate(top_k_res) + ] + else: + [ + hit["entity"].__setitem__(field_data.field_name, data[i + start]) + for i, hit in enumerate(top_k_res) + ] + elif field_data.type == DataType.ARRAY: + element_type = field_data.scalars.array_data.element_type + for i, hit in enumerate(top_k_res): + array_data = field_data.scalars.array_data.data[i + start] + extracted_array_row_data = extract_array_row_data([array_data], element_type) + hit["entity"].__setitem__(field_data.field_name, extracted_array_row_data[0]) + elif field_data.type in { + DataType.FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.INT8_VECTOR, + DataType.SPARSE_FLOAT_VECTOR, + DataType.JSON, + DataType._ARRAY_OF_STRUCT, + DataType._ARRAY_OF_VECTOR, + }: + self.lazy_field_data.append(field_data) + else: + msg = f"Unsupported field type: {field_data.type}" + raise MilvusException(msg) + super().__init__(top_k_res) + + def __str__(self) -> str: + """Only print at most 10 query results""" + reminder = f" ... and {len(self) - 10} entities remaining" if len(self) > 10 else "" + return f"{self[:10]}{reminder}" + + def __getitem__(self, key: int): + self.materialize() + return super().__getitem__(key) + + def get_raw_item(self, idx: int): + """Get the item at index without triggering materialization""" + return list.__getitem__(self, idx) + + def __iter__(self): + self.materialize() + return super().__iter__() + + def materialize(self): + if not self.has_materialized: + for field_data in self.lazy_field_data: + field_name = field_data.field_name + + if field_data.type in [ + DataType.FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.INT8_VECTOR, + ]: + data = get_field_data(field_data) + dim = field_data.vectors.dim + if field_data.type in [DataType.BINARY_VECTOR]: + dim = dim // 8 + elif field_data.type in [DataType.BFLOAT16_VECTOR, DataType.FLOAT16_VECTOR]: + dim = dim * 2 + idx = self.start * dim + for i in range(len(self)): + item = self.get_raw_item(i) + item["entity"][field_name] = data[idx : idx + dim] + idx += dim + elif field_data.type == DataType.SPARSE_FLOAT_VECTOR: + idx = self.start + for i in range(len(self)): + item = self.get_raw_item(i) + item["entity"][field_name] = entity_helper.sparse_proto_to_rows( + field_data.vectors.sparse_float_vector, idx, idx + 1 + )[0] + idx += 1 + elif field_data.type == DataType.JSON: + idx = self.start + for i in range(len(self)): + item = self.get_raw_item(i) + if field_data.valid_data and not field_data.valid_data[idx]: + item["entity"][field_name] = None + else: + json_data = field_data.scalars.json_data.data[idx] + try: + json_dict_list = ( + orjson.loads(json_data) if json_data is not None else None + ) + except Exception as e: + logger.error( + f"HybridHits::materialize::Failed to load JSON data: {e}, original data: {json_data}" + ) + raise + if not field_data.is_dynamic: + item["entity"][field_data.field_name] = json_dict_list + elif not self.dynamic_fields: + item["entity"].update(json_dict_list) + else: + item["entity"].update( + { + k: v + for k, v in json_dict_list.items() + if k in self.dynamic_fields + } + ) + idx += 1 + elif field_data.type == DataType._ARRAY_OF_STRUCT: + # Process struct arrays - convert column format back to array of structs + idx = self.start + struct_arrays = get_field_data(field_data) + if struct_arrays and hasattr(struct_arrays, "fields"): + for i in range(len(self)): + item = self.get_raw_item(i) + item["entity"][field_name] = ( + entity_helper.extract_struct_array_from_column_data( + struct_arrays, idx + ) + ) + idx += 1 + else: + for i in range(len(self)): + item = self.get_raw_item(i) + item["entity"][field_name] = None + elif field_data.type == DataType._ARRAY_OF_VECTOR: + idx = self.start + if hasattr(field_data, "vectors") and hasattr( + field_data.vectors, "vector_array" + ): + vector_array = field_data.vectors.vector_array + for i in range(len(self)): + item = self.get_raw_item(i) + if idx < len(vector_array.data): + vector_data = vector_array.data[idx] + dim = vector_data.dim + float_data = vector_data.float_vector.data + num_vectors = len(float_data) // dim + row_vectors = [] + for vec_idx in range(num_vectors): + vec_start = vec_idx * dim + vec_end = vec_start + dim + row_vectors.append(list(float_data[vec_start:vec_end])) + item["entity"][field_name] = row_vectors + else: + item["entity"][field_name] = [] + idx += 1 + else: + for i in range(len(self)): + item = self.get_raw_item(i) + item["entity"][field_name] = [] + else: + msg = f"Unsupported field type: {field_data.type}" + raise MilvusException(msg) + + self.has_materialized = True + + __repr__ = __str__ + + +class SearchResult(list): + """A list[list[dict]] Contains nq * limit results. + + The first level is the results for each nq, and the second level + is the top-k(limit) results for each query. + + Examples: + >>> nq_res = client.search() + >>> for topk_res in nq_res: + >>> for one_res in topk_res: + >>> print(one_res) + {"id": 1, "distance": 0.1, "entity": {"vector": [1.0, 2.0, 3.0], "name": "a"}} + ... + + >>> res[0][0] + {"id": 1, "distance": 0.1, "entity": {"vector": [1.0, 2.0, 3.0], "name": "a"}} + + >>> res.recalls + [0.9, 0.9, 0.9] + + >>> res.extra + {"cost": 1} + + Attributes: + recalls(List[float], optional): The recalls of the search result, one for each query. + extra(Dict, optional): The extra information of the search result. + """ + + def __init__( + self, + res: schema_pb2.SearchResultData, + round_decimal: Optional[int] = None, + status: Optional[common_pb2.Status] = None, + session_ts: Optional[int] = 0, + ): + _data = self._parse_search_result_data(res, round_decimal) + super().__init__(_data) + + # set recalls + self.recalls = res.recalls if len(res.recalls) > 0 else None + + # set extra info + self.extra = {} + if status and status.extra_info: + if "report_value" in status.extra_info: + self.extra["cost"] = int(status.extra_info["report_value"]) + if "scanned_remote_bytes" in status.extra_info: + self.extra["scanned_remote_bytes"] = int(status.extra_info["scanned_remote_bytes"]) + if "scanned_total_bytes" in status.extra_info: + self.extra["scanned_total_bytes"] = int(status.extra_info["scanned_total_bytes"]) + if "cache_hit_ratio" in status.extra_info: + self.extra["cache_hit_ratio"] = float(status.extra_info["cache_hit_ratio"]) + + # iterator related + self._session_ts = session_ts + self._search_iterator_v2_results = res.search_iterator_v2_results + + def __str__(self) -> str: + """Only print at most 10 results""" + result_msg = f"data: {self[:10]}" + + # Optional messages + recall_msg = f",recalls: {self.recalls[:10]}" if self.recalls else "" + extra_msg = f",{self.extra}" if self.extra else "" + reminder = f" ... and {len(self) - 10} results remaining" if len(self) > 10 else "" + + return f"{result_msg}{recall_msg}{reminder}{extra_msg}" + + __repr__ = __str__ + + def materialize(self): + for i in range(len(self)): + self[i].materialize() + + def _parse_search_result_data( + self, + res: schema_pb2.SearchResultData, + round_decimal: Optional[int], + ) -> List[List[Dict[str, Any]]]: + _pk_name = res.primary_field_name or "id" + + all_pks: List[Union[str, int]] = [] + all_scores: List[float] = [] + if res.ids.HasField("int_id"): + all_pks = res.ids.int_id.data + elif res.ids.HasField("str_id"): + all_pks = res.ids.str_id.data + + if isinstance(round_decimal, int) and round_decimal > 0: + all_scores = [round(x, round_decimal) for x in res.scores] + else: + all_scores = res.scores + + data = [] + nq_thres = 0 + + for topk in res.topks: + start, end = nq_thres, nq_thres + topk + data.append( + HybridHits( + start, + end, + all_pks, + all_scores, + res.fields_data, + res.output_fields, + _pk_name, + ) + ) + nq_thres += topk + return data + + def _get_fields_by_range( + self, start: int, end: int, all_fields_data: List[schema_pb2.FieldData] + ) -> Dict[str, Tuple[List[Any], schema_pb2.FieldData]]: + field2data: Dict[str, Tuple[List[Any], schema_pb2.FieldData]] = {} + + for field in all_fields_data: + name, scalars, dtype = field.field_name, field.scalars, field.type + field_meta = schema_pb2.FieldData( + type=dtype, + field_name=name, + field_id=field.field_id, + is_dynamic=field.is_dynamic, + ) + if dtype == DataType.BOOL: + field2data[name] = ( + apply_valid_data( + scalars.bool_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype in (DataType.INT8, DataType.INT16, DataType.INT32): + field2data[name] = ( + apply_valid_data( + scalars.int_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype == DataType.INT64: + field2data[name] = ( + apply_valid_data( + scalars.long_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype == DataType.FLOAT: + field2data[name] = ( + apply_valid_data( + scalars.float_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype == DataType.DOUBLE: + field2data[name] = ( + apply_valid_data( + scalars.double_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype == DataType.VARCHAR: + field2data[name] = ( + apply_valid_data( + scalars.string_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype == DataType.GEOMETRY: + field2data[name] = ( + apply_valid_data( + scalars.geometry_wkt_data.data[start:end], field.valid_data, start, end + ), + field_meta, + ) + continue + + if dtype == DataType.JSON: + res = apply_valid_data( + scalars.json_data.data[start:end], field.valid_data, start, end + ) + json_dict_list = [] + for item in res: + if item is not None: + try: + json_dict_list.append(orjson.loads(item)) + except Exception as e: + logger.error( + f"SearchResult::_get_fields_by_range::Failed to load JSON item: {e}, original item: {item}" + ) + raise + else: + json_dict_list.append(item) + field2data[name] = json_dict_list, field_meta + continue + + if dtype == DataType.ARRAY: + res = apply_valid_data( + scalars.array_data.data[start:end], field.valid_data, start, end + ) + field2data[name] = ( + extract_array_row_data(res, scalars.array_data.element_type), + field_meta, + ) + continue + + if dtype == DataType._ARRAY_OF_STRUCT: + struct_array_data = [] + + if hasattr(field, "struct_arrays") and field.struct_arrays: + for row_idx in range(start, end): + struct_array_data.append( + entity_helper.extract_struct_array_from_column_data( + field.struct_arrays, row_idx + ) + ) + + field2data[name] = (struct_array_data, field_meta) + continue + + # vectors + dim, vectors = field.vectors.dim, field.vectors + field_meta.vectors.dim = dim + if dtype == DataType.FLOAT_VECTOR: + if start == 0 and (end - start) * dim >= len(vectors.float_vector.data): + # If the range equals to the length of vectors.float_vector.data, direct return + # it to avoid a copy. This logic improves performance by 25% for the case + # retrival 1536 dim embeddings with topk=16384. + field2data[name] = vectors.float_vector.data, field_meta + else: + field2data[name] = ( + vectors.float_vector.data[start * dim : end * dim], + field_meta, + ) + continue + + if dtype == DataType.BINARY_VECTOR: + field2data[name] = ( + vectors.binary_vector[start * (dim // 8) : end * (dim // 8)], + field_meta, + ) + continue + # TODO(SPARSE): do we want to allow the user to specify the return format? + if dtype == DataType.SPARSE_FLOAT_VECTOR: + field2data[name] = ( + entity_helper.sparse_proto_to_rows(vectors.sparse_float_vector, start, end), + field_meta, + ) + continue + + if dtype == DataType.BFLOAT16_VECTOR: + field2data[name] = ( + vectors.bfloat16_vector[start * (dim * 2) : end * (dim * 2)], + field_meta, + ) + continue + + if dtype == DataType.FLOAT16_VECTOR: + field2data[name] = ( + vectors.float16_vector[start * (dim * 2) : end * (dim * 2)], + field_meta, + ) + continue + + if dtype == DataType.INT8_VECTOR: + field2data[name] = ( + vectors.int8_vector[start * dim : end * dim], + field_meta, + ) + continue + return field2data + + def get_session_ts(self): + """Iterator related inner method""" + # TODO(Goose): change it into properties + return self._session_ts + + def get_search_iterator_v2_results_info(self): + """Iterator related inner method""" + # TODO(Goose): Change it into properties + return self._search_iterator_v2_results + + +def get_field_data(field_data: FieldData): + if field_data.type == DataType.BOOL: + return field_data.scalars.bool_data.data + if field_data.type in {DataType.INT8, DataType.INT16, DataType.INT32}: + return field_data.scalars.int_data.data + if field_data.type == DataType.INT64: + return field_data.scalars.long_data.data + if field_data.type == DataType.FLOAT: + return field_data.scalars.float_data.data + if field_data.type == DataType.DOUBLE: + return field_data.scalars.double_data.data + if field_data.type in (DataType.VARCHAR, DataType.TIMESTAMPTZ): + return field_data.scalars.string_data.data + if field_data.type == DataType.GEOMETRY: + return field_data.scalars.geometry_wkt_data.data + if field_data.type == DataType.JSON: + return field_data.scalars.json_data.data + if field_data.type == DataType.ARRAY: + return field_data.scalars.array_data.data + if field_data.type == DataType.FLOAT_VECTOR: + return field_data.vectors.float_vector.data + if field_data.type == DataType.BINARY_VECTOR: + return field_data.vectors.binary_vector + if field_data.type == DataType.BFLOAT16_VECTOR: + return field_data.vectors.bfloat16_vector + if field_data.type == DataType.FLOAT16_VECTOR: + return field_data.vectors.float16_vector + if field_data.type == DataType.INT8_VECTOR: + return field_data.vectors.int8_vector + if field_data.type == DataType.SPARSE_FLOAT_VECTOR: + return field_data.vectors.sparse_float_vector + if field_data.type == DataType._ARRAY_OF_STRUCT: + return field_data.struct_arrays + if field_data.type == DataType._ARRAY_OF_VECTOR: + return field_data.vectors.vector_array + msg = f"Unsupported field type: {field_data.type}" + raise MilvusException(msg) + + +class Hits(list): + """List[Dict] Topk search result with pks, distances, and output fields. + + [ + {"id": 1, "distance": 0.3, "entity": {"vector": [1, 2, 3]}}, + {"id": 2, "distance": 0.2, "entity": {"vector": [4, 5, 6]}}, + {"id": 3, "distance": 0.1, "entity": {"vector": [7, 8, 9]}}, + ] + + Examples: + >>> res = client.search() + >>> hits = res[0] + >>> for hit in hits: + >>> print(hit) + {"id": 1, "distance": 0.3, "entity": {"vector": [1, 2, 3]}} + {"id": 2, "distance": 0.2, "entity": {"vector": [4, 5, 6]}} + {"id": 3, "distance": 0.1, "entity": {"vector": [7, 8, 9]}} + + Attributes: + ids(List[Union[str, int]]): topk primary keys + distances(List[float]): topk distances + """ + + ids: List[Union[str, int]] + distances: List[float] + + def __init__( + self, + topk: int, + pks: List[Union[int, str]], + distances: List[float], + fields: Dict[str, Tuple[List[Any], schema_pb2.FieldData]], + output_fields: List[str], + pk_name: str, + ): + """ + Args: + fields(Dict[str, Tuple[List[Any], schema_pb2.FieldData]]): + field name to a tuple of topk data and field meta + """ + self.ids = pks + self.distances = distances + + all_fields = list(fields.keys()) + dynamic_fields = list(set(output_fields) - set(all_fields)) + + top_k_res = [] + for i in range(topk): + entity = {} + for fname, (data, field_meta) in fields.items(): + if len(data) <= i: + entity[fname] = None + # Get dense vectors + if field_meta.type in ( + DataType.FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.INT8_VECTOR, + ): + dim = field_meta.vectors.dim + if field_meta.type in [DataType.BINARY_VECTOR]: + dim = dim // 8 + elif field_meta.type in [DataType.BFLOAT16_VECTOR, DataType.FLOAT16_VECTOR]: + dim = dim * 2 + entity[fname] = data[i * dim : (i + 1) * dim] + continue + + # Get dynamic fields + if field_meta.type == DataType.JSON and field_meta.is_dynamic: + if len(dynamic_fields) > 0: + entity.update({k: v for k, v in data[i].items() if k in dynamic_fields}) + continue + + if fname in output_fields: + entity.update(data[i]) + continue + + # sparse float vector and other fields + entity[fname] = data[i] + top_k_res.append( + Hit({pk_name: pks[i], "distance": distances[i], "entity": entity}, pk_name=pk_name) + ) + + super().__init__(top_k_res) + + def __str__(self) -> str: + """Only print at most 10 query results""" + reminder = f" ... and {len(self) - 10} entities remaining" if len(self) > 10 else "" + return f"{self[:10]}{reminder}" + + __repr__ = __str__ + + +from collections import UserDict + + +class Hit(UserDict): + """Enhanced result in dict that can get data in dict[dict] + + Examples: + >>> res = { + >>> "my_id": 1, + >>> "distance": 0.3, + >>> "entity": { + >>> "emb": [1, 2, 3], + >>> "desc": "a description" + >>> } + >>> } + >>> h = Hit(res, pk_name="my_id") + >>> h + {"my_id": 1, "distance": 0.3, "entity": {"emb": [1, 2, 3], "desc": "a description"}} + >>> h["my_id"] + 1 + >>> h["distance"] + 0.3 + >>> h["entity"]["emb"] + [1, 2, 3] + >>> h["entity"]["desc"] + "a description" + >>> h.get("emb") + [1, 2, 3] + """ + + def __init__(self, *args, pk_name: str = "", **kwargs): + super().__init__(*args, **kwargs) + + self._pk_name = pk_name + + def __getattr__(self, item: str): + """Patch for orm, will be deprecated soon""" + + # hit.entity return self + if item == "entity": + return self + + try: + return self.__getitem__(item) + except KeyError as exc: + raise AttributeError from exc + + def to_dict(self) -> Dict[str, Any]: + """Patch for orm, will be deprecated soon""" + return self + + @property + def id(self) -> Union[str, int]: + """Patch for orm, will be deprecated soon""" + return self.data.get(self._pk_name) + + @property + def distance(self) -> float: + """Patch for orm, will be deprecated soon""" + return self.data.get("distance") + + @property + def pk(self) -> Union[str, int]: + """Alias of id, will be deprecated soon""" + return self.id + + @property + def score(self) -> float: + """Alias of distance, will be deprecated soon""" + return self.distance + + @property + def fields(self) -> Dict[str, Any]: + """Patch for orm, will be deprecated soon""" + return self.get("entity") + + def __getitem__(self, key: str): + try: + return self.data[key] + except KeyError: + pass + return self.data["entity"][key] + + def get(self, key: Any, default: Any = None): + try: + return self.__getitem__(key) + except KeyError: + pass + return default + + +def extract_array_row_data( + scalars: List[schema_pb2.ScalarField], element_type: DataType +) -> List[List[Any]]: + row = [] + for ith_array in scalars: + if ith_array is None: + row.append(None) + continue + + if element_type == DataType.INT64: + row.append(ith_array.long_data.data) + continue + + if element_type == DataType.BOOL: + row.append(ith_array.bool_data.data) + continue + + if element_type in (DataType.INT8, DataType.INT16, DataType.INT32): + row.append(ith_array.int_data.data) + continue + + if element_type == DataType.FLOAT: + row.append(ith_array.float_data.data) + continue + + if element_type == DataType.DOUBLE: + row.append(ith_array.double_data.data) + continue + + if element_type in (DataType.STRING, DataType.VARCHAR): + row.append(ith_array.string_data.data) + continue + return row + + +def apply_valid_data( + data: List[Any], valid_data: Union[None, List[bool]], start: int, end: int +) -> List[Any]: + if valid_data: + for i, valid in enumerate(valid_data[start:end]): + if not valid: + data[i] = None + return data + + +def extract_struct_field_value(field_data: schema_pb2.FieldData, index: int) -> Any: + """Extract a single value from a struct field at the given index.""" + if field_data.type == DataType.BOOL: + if index < len(field_data.scalars.bool_data.data): + return field_data.scalars.bool_data.data[index] + elif field_data.type in (DataType.INT8, DataType.INT16, DataType.INT32): + if index < len(field_data.scalars.int_data.data): + return field_data.scalars.int_data.data[index] + elif field_data.type == DataType.INT64: + if index < len(field_data.scalars.long_data.data): + return field_data.scalars.long_data.data[index] + elif field_data.type == DataType.FLOAT: + if index < len(field_data.scalars.float_data.data): + return np.single(field_data.scalars.float_data.data[index]) + elif field_data.type == DataType.DOUBLE: + if index < len(field_data.scalars.double_data.data): + return field_data.scalars.double_data.data[index] + elif field_data.type == DataType.VARCHAR: + if index < len(field_data.scalars.string_data.data): + return field_data.scalars.string_data.data[index] + elif field_data.type == DataType.JSON: + if index < len(field_data.scalars.json_data.data): + return orjson.loads(field_data.scalars.json_data.data[index]) + elif field_data.type == DataType.FLOAT_VECTOR: + dim = field_data.vectors.dim + start_idx = index * dim + end_idx = start_idx + dim + if end_idx <= len(field_data.vectors.float_vector.data): + return field_data.vectors.float_vector.data[start_idx:end_idx] + elif field_data.type == DataType.BINARY_VECTOR: + dim = field_data.vectors.dim // 8 + start_idx = index * dim + end_idx = start_idx + dim + if end_idx <= len(field_data.vectors.binary_vector): + return field_data.vectors.binary_vector[start_idx:end_idx] + return None diff --git a/pymilvus/client/singleton_utils.py b/pymilvus/client/singleton_utils.py index 3a702dda7..a4597573b 100644 --- a/pymilvus/client/singleton_utils.py +++ b/pymilvus/client/singleton_utils.py @@ -1,13 +1,15 @@ import threading +from typing import ClassVar, Dict + class Singleton(type): - _ins = dict() - _lock = threading.Lock() + _ins: ClassVar[Dict] = {} + _lock = threading.Lock() - def __call__(cls, *args, **kwargs): - if cls not in cls._ins: - with cls._lock: - if cls not in cls._ins: - ins = super().__call__(*args, **kwargs) - cls._ins[cls] = ins - return cls._ins[cls] + def __call__(cls, *args, **kwargs): + if cls not in cls._ins: + with cls._lock: + if cls not in cls._ins: + ins = super().__call__(*args, **kwargs) + cls._ins[cls] = ins + return cls._ins[cls] diff --git a/pymilvus/client/stub.py b/pymilvus/client/stub.py deleted file mode 100644 index 47ea85f41..000000000 --- a/pymilvus/client/stub.py +++ /dev/null @@ -1,1047 +0,0 @@ -from urllib import parse - -from .grpc_handler import GrpcHandler -from .exceptions import BaseException, ParamError -from .types import CompactionState, CompactionPlans -from ..settings import DefaultConfig as config -from ..decorators import deprecated - -from .check import ( - is_legal_host, - is_legal_port, -) - - -class Milvus: - @deprecated - def __init__(self, host=None, port=config.GRPC_PORT, uri=config.GRPC_URI, channel=None, **kwargs): - self.uri = self.__set_uri(host, port, uri) - self._handler = GrpcHandler(self.uri, channel=channel) - - def __set_uri(self, host=None, port=config.GRPC_PORT, uri=config.GRPC_URI): - if host is None and uri is None: - raise ParamError('Host and uri cannot both be None') - - elif host is None: - try: - parsed_uri = parse.urlparse(uri, "tcp") - except (Exception) as e: - raise ParamError(f"Illegal uri [{uri}]: {e}") - - host, port = parsed_uri.hostname, parsed_uri.port - - host, port = str(host), str(port) - if not (is_legal_host(host) and is_legal_port(port)): - raise ParamError(f"Illegal host [{host}] or port [{port}]") - - return f"{host}:{port}" - - def _connection(self): - return self.handler - - @property - def name(self): - return self._name - - @property - def handler(self): - return self._handler - - def close(self): - if self._handler is None: - raise BaseException("Closing on closed handler") - self.handler.close() - self._handler = None - - # @retry_on_rpc_failure(retry_times=10, wait=1) - def create_collection(self, collection_name, fields, shards_num=2, timeout=None, **kwargs): - """ Creates a collection. - - :param collection_name: The name of the collection. A collection name can only include - numbers, letters, and underscores, and must not begin with a number. - :type collection_name: str - - :param fields: Field parameters. - :type fields: dict - - ` {"fields": [ - {"field": "A", "type": DataType.INT32} - {"field": "B", "type": DataType.INT64}, - {"field": "C", "type": DataType.FLOAT}, - {"field": "Vec", "type": DataType.FLOAT_VECTOR, - "params": {"dim": 128}} - ], - "auto_id": True}` - - :param shards_num: How wide to scale collection. Corresponds to how many active datanodes - can be used on insert. - :type shards_num: int - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :param kwargs: - * *consistency_level* (``str/int``) -- - Which consistency level to use when searching in the collection. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter can be overwritten by the same parameter specified in search. - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.create_collection(collection_name, fields, shards_num=shards_num, timeout=timeout, **kwargs) - - def drop_collection(self, collection_name, timeout=None): - """ - Delete a specified collection. - - :param collection_name: The name of the collection to delete. - :type collection_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.drop_collection(collection_name, timeout) - - def has_collection(self, collection_name, timeout=None): - """ - Checks whether a specified collection exists. - - :param collection_name: The name of the collection to check. - :type collection_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: If specified collection exists - :rtype: bool - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.has_collection(collection_name, timeout) - - def describe_collection(self, collection_name, timeout=None): - """ - Returns the schema of specified collection. - Example: {'collection_name': 'create_collection_eXgbpOtn', 'auto_id': True, 'description': '', - 'fields': [{'field_id': 100, 'name': 'INT32', 'description': '', 'type': 4, 'params': {}, - {'field_id': 101, 'name': 'FLOAT_VECTOR', 'description': '', 'type': 101, - 'params': {'dim': '128'}}]} - - :param collection_name: The name of the collection to describe. - :type collection_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: The schema of collection to describe. - :rtype: dict - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.describe_collection(collection_name, timeout) - - def load_collection(self, collection_name, timeout=None, **kwargs): - """ - Loads a specified collection from disk to memory. - - :param collection_name: The name of the collection to load. - :type collection_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.load_collection(collection_name=collection_name, timeout=timeout, **kwargs) - - def release_collection(self, collection_name, timeout=None): - """ - Clear collection data from memory. - - :param collection_name: The name of collection to release. - :type collection_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.release_collection(collection_name=collection_name, timeout=timeout) - - def get_collection_stats(self, collection_name, timeout=None, **kwargs): - """ - Returns collection statistics information. - Example: {"row_count": 10} - - :param collection_name: The name of collection. - :type collection_name: str. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: statistics information - :rtype: dict - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - stats = handler.get_collection_stats(collection_name, timeout, **kwargs) - result = {stat.key: stat.value for stat in stats} - result["row_count"] = int(result["row_count"]) - return result - - def list_collections(self, timeout=None): - """ - Returns a list of all collection names. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: List of collection names, return when operation is successful - :rtype: list[str] - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.list_collections(timeout) - - def create_partition(self, collection_name, partition_name, timeout=None): - """ - Creates a partition in a specified collection. You only need to import the - parameters of partition_name to create a partition. A collection cannot hold - partitions of the same tag, whilst you can insert the same tag in different collections. - - :param collection_name: The name of the collection to create partitions in. - :type collection_name: str - - :param partition_name: The tag name of the partition to create. - :type partition_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.create_partition(collection_name, partition_name, timeout) - - def drop_partition(self, collection_name, partition_name, timeout=None): - """ - Deletes the specified partition in a collection. Note that the default partition - '_default' is not permitted to delete. When a partition deleted, all data stored in it - will be deleted. - - :param collection_name: The name of the collection to delete partitions from. - :type collection_name: str - - :param partition_name: The tag name of the partition to delete. - :type partition_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.drop_partition(collection_name, partition_name, timeout) - - def has_partition(self, collection_name, partition_name, timeout=None): - """ - Checks if a specified partition exists in a collection. - - :param collection_name: The name of the collection to find the partition in. - :type collection_name: str - - :param partition_name: The tag name of the partition to check - :type partition_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: Whether a specified partition exists in a collection. - :rtype: bool - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.has_partition(collection_name, partition_name, timeout) - - def load_partitions(self, collection_name, partition_names, timeout=None): - """ - Load specified partitions from disk to memory. - - :param collection_name: The collection name which partitions belong to. - :type collection_name: str - - :param partition_names: The specified partitions to load. - :type partition_names: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.load_partitions(collection_name=collection_name, - partition_names=partition_names, timeout=timeout) - - def release_partitions(self, collection_name, partition_names, timeout=None): - """ - Clear partitions data from memory. - - :param collection_name: The collection name which partitions belong to. - :type collection_name: str - - :param partition_names: The specified partition to release. - :type partition_names: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.release_partitions(collection_name=collection_name, - partition_names=partition_names, timeout=timeout) - - def list_partitions(self, collection_name, timeout=None): - """ - Returns a list of all partition tags in a specified collection. - - :param collection_name: The name of the collection to retrieve partition tags from. - :type collection_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: A list of all partition tags in specified collection. - :rtype: list[str] - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.list_partitions(collection_name, timeout) - - def get_partition_stats(self, collection_name, partition_name, timeout=None, **kwargs): - """ - Returns partition statistics information. - Example: {"row_count": 10} - - :param collection_name: The name of collection. - :type collection_name: str. - - :param partition_name: The name of partition. - :type partition_name: str. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: statistics information - :rtype: dict - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - stats = handler.get_partition_stats(collection_name, partition_name, timeout, **kwargs) - result = {stat.key: stat.value for stat in stats} - result["row_count"] = int(result["row_count"]) - return result - - def create_alias(self, collection_name, alias, timeout=None, **kwargs): - """ - Specify alias for a collection. - Alias cannot be duplicated, you can't assign same alias to different collections. - But you can specify multiple aliases for a collection, for example: - before create_alias("collection_1", "bob"): - collection_1's aliases = ["tom"] - after create_alias("collection_1", "bob"): - collection_1's aliases = ["tom", "bob"] - - :param collection_name: The name of collection. - :type collection_name: str. - - :param alias: The alias of the collection. - :type alias: str. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.create_alias(collection_name, alias, timeout, **kwargs) - - def drop_alias(self, alias, timeout=None, **kwargs): - """ - Delete an alias. - This api no need to specify collection name because the milvus server knows which collection it belongs. - For example: - before drop_alias("bob"): - collection_1's aliases = ["tom", "bob"] - after drop_alias("bob"): - collection_1's aliases = ["tom"] - - :param alias: The alias to be deleted. - :type alias: str. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.drop_alias(alias, timeout, **kwargs) - - def alter_alias(self, collection_name, alias, timeout=None, **kwargs): - """ - Change alias of a collection to another collection. If the alias doesn't exist, the api will return error. - Alias cannot be duplicated, you can't assign same alias to different collections. - This api can change alias owner collection, for example: - before alter_alias("collection_2", "bob"): - collection_1's aliases = ["bob"] - collection_2's aliases = [] - after alter_alias("collection_2", "bob"): - collection_1's aliases = [] - collection_2's aliases = ["bob"] - - :param collection_name: The name of collection. - :type collection_name: str. - - :param alias: The new alias of the collection. - :type alias: str. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.alter_alias(collection_name, alias, timeout, **kwargs) - - def create_index(self, collection_name, field_name, params, timeout=None, **kwargs): - """ - Creates an index for a field in a specified collection. Milvus does not support creating multiple - indexes for a field. In a scenario where the field already has an index, if you create another one, - the server will replace the existing index files with the new ones. - - Note that you need to call load_collection() or load_partitions() to make the new index take effect - on searching tasks. - - :param collection_name: The name of the collection to create field indexes. - :type collection_name: str - - :param field_name: The name of the field to create an index for. - :type field_name: str - - :param params: Indexing parameters. - :type params: dict - There are examples of supported indexes: - - IVF_FLAT: - ` { - "metric_type":"L2", - "index_type": "IVF_FLAT", - "params":{"nlist": 1024} - }` - - IVF_PQ: - `{ - "metric_type": "L2", - "index_type": "IVF_PQ", - "params": {"nlist": 1024, "m": 8, "nbits": 8} - }` - - IVF_SQ8: - `{ - "metric_type": "L2", - "index_type": "IVF_SQ8", - "params": {"nlist": 1024} - }` - - BIN_IVF_FLAT: - `{ - "metric_type": "JACCARD", - "index_type": "BIN_IVF_FLAT", - "params": {"nlist": 1024} - }` - - HNSW: - `{ - "metric_type": "L2", - "index_type": "HNSW", - "params": {"M": 48, "efConstruction": 50} - }` - - RHNSW_FLAT: - `{ - "metric_type": "L2", - "index_type": "RHNSW_FLAT", - "params": {"M": 48, "efConstruction": 50} - }` - - RHNSW_PQ: - `{ - "metric_type": "L2", - "index_type": "RHNSW_PQ", - "params": {"M": 48, "efConstruction": 50, "PQM": 8} - }` - - RHNSW_SQ: - `{ - "metric_type": "L2", - "index_type": "RHNSW_SQ", - "params": {"M": 48, "efConstruction": 50} - }` - - ANNOY: - `{ - "metric_type": "L2", - "index_type": "ANNOY", - "params": {"n_trees": 8} - }` - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :param kwargs: - * *_async* (``bool``) -- - Indicate if invoke asynchronously. When value is true, method returns a IndexFuture object; - otherwise, method returns results from server. - * *_callback* (``function``) -- - The callback function which is invoked after server response successfully. It only take - effect when _async is set to True. - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.create_index(collection_name, field_name, params, timeout, **kwargs) - - def drop_index(self, collection_name, field_name, timeout=None): - """ - Removes the index of a field in a specified collection. - - :param collection_name: The name of the collection to remove the field index from. - :type collection_name: str - - :param field_name: The name of the field to remove the index of. - :type field_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.drop_index(collection_name=collection_name, - field_name=field_name, index_name="_default_idx", timeout=timeout) - - def describe_index(self, collection_name, index_name="", timeout=None): - """ - Returns the schema of index built on specified field. - Example: {'index_type': 'FLAT', 'metric_type': 'L2', 'params': {'nlist': 128}} - - :param collection_name: The name of the collection which field belong to. - :type collection_name: str - - :param field_name: The name of field to describe. - :type field_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: the schema of index built on specified field. - :rtype: dict - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.describe_index(collection_name, index_name, timeout) - - def insert(self, collection_name, entities, partition_name=None, timeout=None, **kwargs): - """ - Inserts entities in a specified collection. - - :param collection_name: The name of the collection to insert entities in. - :type collection_name: str. - - :param entities: The entities to insert. - :type entities: list - - :param partition_name: The name of the partition to insert entities in. The default value is - None. The server stores entities in the “_default” partition by default. - :type partition_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :param kwargs: - * *_async* (``bool``) -- - Indicate if invoke asynchronously. When value is true, method returns a MutationFuture object; - otherwise, method returns results from server. - * *_callback* (``function``) -- - The callback function which is invoked after server response successfully. It only take - effect when _async is set to True. - - :return: list of ids of the inserted vectors. - :rtype: list[int] - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.bulk_insert(collection_name, entities, partition_name, timeout, **kwargs) - - def delete(self, collection_name, expr, partition_name=None, timeout=None, **kwargs): - """ - Delete entities with an expression condition. - And return results to show which primary key is deleted successfully - - :param collection_name: Name of the collection to delete entities from - :type collection_name: str - - :param expr: The expression to specify entities to be deleted - :type expr: str - - :param partition_name: Name of partitions that contain entities - :type partition_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :return: list of ids of the deleted vectors. - :rtype: list - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.delete(collection_name, expr, partition_name, timeout, **kwargs) - - def flush(self, collection_names=None, timeout=None, **kwargs): - """ - Internally, Milvus organizes data into segments, and indexes are built in a per-segment manner. - By default, a segment will be sealed if it grows large enough (according to segment size configuration). - If any index is specified on certain field, the index-creating task will be triggered automatically - when a segment is sealed. - - The flush() call will seal all the growing segments immediately of the given collection, - and force trigger the index-creating tasks. - - :param collection_names: The name of collection to flush. - :type collection_names: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :param kwargs: - * *_async* (``bool``) -- - Indicate if invoke asynchronously. When value is true, method returns a FlushFuture object; - otherwise, method returns results from server. - * *_callback* (``function``) -- - The callback function which is invoked after server response successfully. It only take - effect when _async is set to True. - - :return: None - :rtype: NoneType - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.flush(collection_names, timeout, **kwargs) - - def search(self, collection_name, data, anns_field, param, limit, expression=None, partition_names=None, - output_fields=None, timeout=None, round_decimal=-1, **kwargs): - """ - Searches a collection based on the given expression and returns query results. - - :param collection_name: The name of the collection to search. - :type collection_name: str - :param data: The vectors of search data, the length of data is number of query (nq), the dim of every vector in - data must be equal to vector field's of collection. - :type data: list[list[float]] - :param anns_field: The vector field used to search of collection. - :type anns_field: str - :param param: The parameters of search, such as nprobe, etc. - :type param: dict - :param limit: The max number of returned record, we also called this parameter as topk. - :type limit: int - :param expression: The boolean expression used to filter attribute. - :type expression: str - :param partition_names: The names of partitions to search. - :type partition_names: list[str] - :param output_fields: The fields to return in the search result, not supported now. - :type output_fields: list[str] - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - :param round_decimal: The specified number of decimal places of returned distance - :type round_decimal: int - :param kwargs: - * *_async* (``bool``) -- - Indicate if invoke asynchronously. When value is true, method returns a SearchFuture object; - otherwise, method returns results from server. - * *_callback* (``function``) -- - The callback function which is invoked after server response successfully. It only take - effect when _async is set to True. - * *consistency_level* (``str/int``) -- - Which consistency level to use when searching in the collection. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter will overwrite the same parameter user specified when creating the collection, - if no consistency level was specified, search will use the consistency level defined when you create collection. - * *guarantee_timestamp* (``int``) -- - This function instructs Milvus to see all operations performed before a provided timestamp. If no - such timestamp is provided, then Milvus will search all operations performed to date. - Note: only used in Customized consistency level. - * *graceful_time* (``int``) -- - Only used in bounded consistency level. If graceful_time is set, PyMilvus will use current timestamp minus - the graceful_time as the `guarantee_timestamp`. This option is 5s by default if not set. - * *travel_timestamp* (``int``) -- - Users can specify a timestamp in a search to get results based on a data view - at a specified point in time. - - :return: Query result. QueryResult is iterable and is a 2d-array-like class, the first dimension is - the number of vectors to query (nq), the second dimension is the number of limit(topk). - :rtype: QueryResult - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.search(collection_name, data, anns_field, param, limit, expression, - partition_names, output_fields, timeout, round_decimal, **kwargs) - - def calc_distance(self, vectors_left, vectors_right, params=None, timeout=None, **kwargs): - """ - Calculate distance between two vector arrays. - - :param vectors_left: The vectors on the left of operator. - :type vectors_left: dict - `{"ids": [1, 2, 3, .... n], "collection": "c_1", "partition": "p_1", "field": "v_1"}` - or - `{"float_vectors": [[1.0, 2.0], [3.0, 4.0], ... [9.0, 10.0]]}` - or - `{"bin_vectors": [b'\x94', b'N', ... b'\xca']}` - - :param vectors_right: The vectors on the right of operator. - :type vectors_right: dict - `{"ids": [1, 2, 3, .... n], "collection": "col_1", "partition": "p_1", "field": "v_1"}` - or - `{"float_vectors": [[1.0, 2.0], [3.0, 4.0], ... [9.0, 10.0]]}` - or - `{"bin_vectors": [b'\x94', b'N', ... b'\xca']}` - - :param params: key-value pair parameters - Key: "metric_type"/"metric" Value: "L2"/"IP"/"HAMMING"/"TANIMOTO", default is "L2", - Key: "sqrt" Value: true or false, default is false Only for "L2" distance - Key: "dim" Value: set this value if dimension is not a multiple of 8, - otherwise the dimension will be calculted by list length, - only for "HAMMING" and "TANIMOTO" - :type params: dict - Examples of supported metric_type: - `{"metric_type": "L2", "sqrt": true}` - `{"metric_type": "IP"}` - `{"metric_type": "HAMMING", "dim": 17}` - `{"metric_type": "TANIMOTO"}` - Note: metric type are case insensitive - - :return: 2-d array distances - :rtype: list[list[int]] for "HAMMING" or list[list[float]] for others - Assume the vectors_left: L_1, L_2, L_3 - Assume the vectors_right: R_a, R_b - Distance between L_n and R_m we called "D_n_m" - The returned distances are arranged like this: - [D_1_a, D_1_b, D_2_a, D_2_b, D_3_a, D_3_b] - - """ - with self._connection() as handler: - return handler.calc_distance(vectors_left, vectors_right, params, timeout, **kwargs) - - def get_query_segment_info(self, collection_name, timeout=None, **kwargs): - """ - Notifies Proxy to return segments information from query nodes. - - :param collection_name: The name of the collection to get segments info. - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - - :return: QuerySegmentInfo: - QuerySegmentInfo is the growing segments's information in query cluster. - :rtype: QuerySegmentInfo - """ - with self._connection() as handler: - return handler.get_query_segment_info(collection_name, timeout, **kwargs) - - def load_collection_progress(self, collection_name, timeout=None): - with self._connection() as handler: - return handler.load_collection_progress(collection_name, timeout=timeout) - - def load_partitions_progress(self, collection_name, partition_names, timeout=None): - with self._connection() as handler: - return handler.load_partitions_progress(collection_name, partition_names, timeout=timeout) - - def wait_for_loading_collection_complete(self, collection_name, timeout=None): - with self._connection() as handler: - return handler.wait_for_loading_collection(collection_name, timeout=timeout) - - def wait_for_loading_partitions_complete(self, collection_name, partition_names, timeout=None): - with self._connection() as handler: - return handler.wait_for_loading_partitions(collection_name, partition_names, timeout=timeout) - - def get_index_build_progress(self, collection_name, index_name, timeout=None): - with self._connection() as handler: - return handler.get_index_build_progress(collection_name, index_name, timeout=timeout) - - def wait_for_creating_index(self, collection_name, index_name, timeout=None): - with self._connection() as handler: - return handler.wait_for_creating_index(collection_name, index_name, timeout=timeout) - - def dummy(self, request_type, timeout=None): - with self._connection() as handler: - return handler.dummy(request_type, timeout=timeout) - - def query(self, collection_name, expr, output_fields=None, partition_names=None, timeout=None, **kwargs): - """ - Query with a set of criteria, and results in a list of records that match the query exactly. - - :param collection_name: Name of the collection to retrieve entities from - :type collection_name: str - - :param expr: The query expression - :type expr: str - - :param output_fields: A list of fields to return - :type output_fields: list[str] - - :param partition_names: Name of partitions that contain entities - :type partition_names: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :return: A list that contains all results - :rtype: list - - :param kwargs: - * *consistency_level* (``str/int``) -- - Which consistency level to use during a query on the collection. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter will overwrite the same parameter user specified when creating the collection, - if no consistency level was specified, query will use the consistency level defined when you create collection. - * *guarantee_timestamp* (``int``) -- - This function instructs Milvus to see all operations performed before a provided timestamp. If no - such timestamp is specified, Milvus queries all operations performed to date. - Note: only used in Customized consistency level. - * *graceful_time* (``int``) -- - Only used in bounded consistency level. If graceful_time is set, PyMilvus will use current timestamp minus - the graceful_time as the `guarantee_timestamp`. This option is 5s by default if not set. - * *travel_timestamp* (``int``) -- - Users can specify a timestamp in a search to get results based on a data view - at a specified point in time. - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - """ - with self._connection() as handler: - return handler.query(collection_name, expr, output_fields, partition_names, timeout=timeout, **kwargs) - - def load_balance(self, src_node_id, dst_node_ids, sealed_segment_ids, timeout=None, **kwargs): - """ - Do load balancing operation from source query node to destination query node. - - :param src_node_id: The source query node id to balance. - :type src_node_id: int - - :param dst_node_ids: The destination query node ids to balance. - :type dst_node_ids: list[int] - - :param sealed_segment_ids: Sealed segment ids to balance. - :type sealed_segment_ids: list[int] - - :param timeout: The timeout for this method, unit: second - :type timeout: int - - :raises BaseException: If query nodes not exist. - :raises BaseException: If sealed segments not exist. - """ - with self._connection() as handler: - return handler.load_balance(src_node_id, dst_node_ids, sealed_segment_ids, timeout, **kwargs) - - def compact(self, collection_name, timeout=None, **kwargs) -> int: - """ - Do compaction for the collection. - - :param collection_name: The collection name to compact - :type collection_name: str - - :param timeout: The timeout for this method, unit: second - :type timeout: int - - :return: the compaction ID - :rtype: int - - :raises BaseException: If collection name not exist. - """ - with self._connection() as handler: - return handler.compact(collection_name, timeout, **kwargs) - - def get_compaction_state(self, compaction_id: int, timeout=None, **kwargs) -> CompactionState: - """ - Get compaction states of a targeted compaction id - - :param compaction_id: the id returned by compact - :type compaction_id: int - - :param timeout: The timeout for this method, unit: second - :type timeout: int - - :return: the state of the compaction - :rtype: CompactionState - - :raises BaseException: If compaction_id doesn't exist. - """ - - with self._connection() as handler: - return handler.get_compaction_state(compaction_id, timeout, **kwargs) - - def wait_for_compaction_completed(self, compaction_id: int, timeout=None, **kwargs) -> CompactionState: - with self._connection() as handler: - return handler.wait_for_compaction_completed(compaction_id, timeout=timeout, **kwargs) - - def get_compaction_plans(self, compaction_id: int, timeout=None, **kwargs) -> CompactionPlans: - """ - Get compaction states of a targeted compaction id - - :param compaction_id: the id returned by compact - :type compaction_id: int - - :param timeout: The timeout for this method, unit: second - :type timeout: int - - :return: the state of the compaction - :rtype: CompactionState - - :raises BaseException: If compaction_id doesn't exist. - """ - with self._connection() as handler: - return handler.get_compaction_plans(compaction_id, timeout, **kwargs) diff --git a/pymilvus/client/ts_utils.py b/pymilvus/client/ts_utils.py index 4904ecc0c..78fc1309e 100644 --- a/pymilvus/client/ts_utils.py +++ b/pymilvus/client/ts_utils.py @@ -1,29 +1,33 @@ -import threading import datetime +import threading +from typing import Any, Dict, Optional +from pymilvus.grpc_gen import common_pb2 + +from .constants import BOUNDED_TS, EVENTUALLY_TS, GUARANTEE_TIMESTAMP, ITERATOR_FIELD from .singleton_utils import Singleton -from .utils import hybridts_to_unixtime, mkts_from_unixtime -from .constants import DEFAULT_GRACEFUL_TIME, EVENTUALLY_TS +from .types import get_consistency_level +from .utils import hybridts_to_unixtime -from ..grpc_gen.common_pb2 import ConsistencyLevel +ConsistencyLevel = common_pb2.ConsistencyLevel class GTsDict(metaclass=Singleton): - def __init__(self): + def __init__(self) -> None: # collection id -> last write ts - self._last_write_ts_dict = dict() + self._last_write_ts_dict = {} self._last_write_ts_dict_lock = threading.Lock() - def __repr__(self): + def __repr__(self) -> str: return self._last_write_ts_dict.__repr__() - def update(self, collection, ts): + def update(self, collection: int, ts: int): # use lru later if necessary with self._last_write_ts_dict_lock: if ts > self._last_write_ts_dict.get(collection, 0): self._last_write_ts_dict[collection] = ts - def get(self, collection): + def get(self, collection: int): return self._last_write_ts_dict.get(collection, 0) @@ -33,61 +37,67 @@ def _get_gts_dict(): # Update the last write ts of collection. -def update_collection_ts(collection, ts): +def update_collection_ts(collection: int, ts: int): _get_gts_dict().update(collection, ts) -# Return a callback coresponding to the collection. -def update_ts_on_mutation(collection): - def _update(mutation_result): +# Return a callback corresponding to the collection. +def update_ts_on_mutation(collection: int): + def _update(mutation_result: Any): update_collection_ts(collection, mutation_result.timestamp) return _update # Get the last write ts of collection. -def get_collection_ts(collection): +def get_collection_ts(collection: int): return _get_gts_dict().get(collection) # Get the last write timestamp of collection. -def get_collection_timestamp(collection): +def get_collection_timestamp(collection: int): ts = _get_gts_dict().get(collection) return hybridts_to_unixtime(ts) # Get the last write datetime of collection. -def get_collection_datetime(collection, tz=None): +def get_collection_datetime(collection: int, tz: Optional[datetime.timezone] = None): timestamp = get_collection_timestamp(collection) return datetime.datetime.fromtimestamp(timestamp, tz=tz) -# Get the bounded timestamp according to the current timestamp. -# The default graceful time is 3000ms (greater than the time tick period, bigger enough). -def get_current_bounded_ts(graceful_time_in_ms=DEFAULT_GRACEFUL_TIME): - # Fortunately, we're in 21th century and we don't need to worry about that bounded_ts < 0. - current = datetime.datetime.now().timestamp() - return mkts_from_unixtime(current, -graceful_time_in_ms) - - def get_eventually_ts(): return EVENTUALLY_TS -def construct_guarantee_ts(consistency_level, collection_id, kwargs): +def get_bounded_ts(): + return BOUNDED_TS + + +def construct_guarantee_ts(collection_name: str, kwargs: Dict): + if kwargs.get(ITERATOR_FIELD) is not None: + return True + + consistency_level = kwargs.get("consistency_level") + use_default = consistency_level is None + if use_default: + # in case of the default consistency is Customized or Session, + # we set guarantee_timestamp to the cached mutation ts or 1 + kwargs[GUARANTEE_TIMESTAMP] = get_collection_ts(collection_name) or get_eventually_ts() + return True + consistency_level = get_consistency_level(consistency_level) + kwargs["consistency_level"] = consistency_level if consistency_level == ConsistencyLevel.Strong: # Milvus will assign a newest ts. - kwargs["guarantee_timestamp"] = 0 + kwargs[GUARANTEE_TIMESTAMP] = 0 elif consistency_level == ConsistencyLevel.Session: # Using the last write ts of the collection. - kwargs["guarantee_timestamp"] = get_collection_ts(collection_id) or get_eventually_ts() + # TODO: get a timestamp from server? + kwargs[GUARANTEE_TIMESTAMP] = get_collection_ts(collection_name) or get_eventually_ts() elif consistency_level == ConsistencyLevel.Bounded: - # Using a timestamp which is close to but less than the current epoch. - graceful_time = kwargs.get("graceful_time", DEFAULT_GRACEFUL_TIME) - kwargs["guarantee_timestamp"] = get_current_bounded_ts(graceful_time) or get_eventually_ts() - elif consistency_level == ConsistencyLevel.Eventually: - # Using a very small timestamp. - kwargs["guarantee_timestamp"] = get_eventually_ts() + # Milvus will assign ts according to the server timestamp and a configured time interval + kwargs[GUARANTEE_TIMESTAMP] = get_bounded_ts() else: # Users customize the consistency level, no modification on `guarantee_timestamp`. - pass + kwargs.setdefault(GUARANTEE_TIMESTAMP, get_eventually_ts()) + return use_default diff --git a/pymilvus/client/types.py b/pymilvus/client/types.py index 17804d80a..0a6d395db 100644 --- a/pymilvus/client/types.py +++ b/pymilvus/client/types.py @@ -1,6 +1,44 @@ +import logging +import time +from dataclasses import dataclass from enum import IntEnum -from ..grpc_gen.common_pb2 import ConsistencyLevel -from .exceptions import InvalidConsistencyLevel +from typing import Any, ClassVar, Dict, List, Optional, TypeVar, Union + +import numpy as np +import orjson + +from pymilvus.exceptions import ( + AutoIDException, + ExceptionsMessage, + InvalidConsistencyLevel, +) +from pymilvus.grpc_gen import common_pb2, rg_pb2, schema_pb2 +from pymilvus.grpc_gen import milvus_pb2 as milvus_types + +from . import utils + +Status = TypeVar("Status") +ConsistencyLevel = common_pb2.ConsistencyLevel + +logger = logging.getLogger(__name__) + +ALWAYS_KEEP_ZERO_KEYS = frozenset( + {"scanned_remote_bytes", "scanned_total_bytes", "cache_hit_ratio"} +) + + +# OmitZeroDict: ignore the key-value pairs with value as 0 when printing +class OmitZeroDict(dict): + def omit_zero_len(self): + return len({k: v for k, v in self.items() if v or k in ALWAYS_KEEP_ZERO_KEYS}) + + # keep zero for specific keys, omit other zero values + def __str__(self): + return str({k: v for k, v in self.items() if v or k in ALWAYS_KEEP_ZERO_KEYS}) + + # no filter + def __repr__(self): + return str(dict(self)) class Status: @@ -18,6 +56,7 @@ class Status: ILLEGAL_ARGUMENT = 5 ILLEGAL_RANGE = 6 ILLEGAL_DIMENSION = 7 + # TODO in new error code, 8 is for RATE_LIMIT, 9 for FORCE_DENY ILLEGAL_INDEX_TYPE = 8 ILLEGAL_COLLECTION_NAME = 9 ILLEGAL_TOPK = 10 @@ -38,49 +77,72 @@ class Status: INDEX_NOT_EXIST = 25 EMPTY_COLLECTION = 26 - def __init__(self, code=SUCCESS, message="Success"): + def __init__(self, code: int = SUCCESS, message: str = "Success") -> None: self.code = code self.message = message - def __repr__(self): - attr_list = ['%s=%r' % (key, value) - for key, value in self.__dict__.items()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(attr_list)) + def __repr__(self) -> str: + attr_list = [f"{key}={value}" for key, value in self.__dict__.items()] + return f"{self.__class__.__name__}({', '.join(attr_list)})" - def __eq__(self, other): - """ - Make Status comparable with self by code - """ + def __eq__(self, other: Union[int, Status]): + """Make Status comparable with self by code""" if isinstance(other, int): return self.code == other return isinstance(other, self.__class__) and self.code == other.code - def __ne__(self, other): - return self != other - def OK(self): return self.code == Status.SUCCESS class DataType(IntEnum): - NONE = 0 - BOOL = 1 - INT8 = 2 - INT16 = 3 - INT32 = 4 - INT64 = 5 + """ + String of DataType is str of its value, e.g.: str(DataType.BOOL) == "1" + """ - FLOAT = 10 - DOUBLE = 11 + NONE = 0 # schema_pb2.None, this is an invalid representation in python + BOOL = schema_pb2.Bool + INT8 = schema_pb2.Int8 + INT16 = schema_pb2.Int16 + INT32 = schema_pb2.Int32 + INT64 = schema_pb2.Int64 - STRING = 20 + FLOAT = schema_pb2.Float + DOUBLE = schema_pb2.Double - BINARY_VECTOR = 100 - FLOAT_VECTOR = 101 + STRING = schema_pb2.String + VARCHAR = schema_pb2.VarChar + ARRAY = schema_pb2.Array + JSON = schema_pb2.JSON + GEOMETRY = schema_pb2.Geometry + TIMESTAMPTZ = schema_pb2.Timestamptz + + BINARY_VECTOR = schema_pb2.BinaryVector + FLOAT_VECTOR = schema_pb2.FloatVector + FLOAT16_VECTOR = schema_pb2.Float16Vector + BFLOAT16_VECTOR = schema_pb2.BFloat16Vector + SPARSE_FLOAT_VECTOR = schema_pb2.SparseFloatVector + INT8_VECTOR = schema_pb2.Int8Vector + + STRUCT = schema_pb2.Struct + + # Internal use only - not exposed to users + _ARRAY_OF_VECTOR = schema_pb2.ArrayOfVector + _ARRAY_OF_STRUCT = schema_pb2.ArrayOfStruct UNKNOWN = 999 + def __str__(self) -> str: + return str(self.value) + + +class FunctionType(IntEnum): + UNKNOWN = 0 + BM25 = 1 + TEXTEMBEDDING = 2 + RERANK = 3 + class RangeType(IntEnum): LT = 0 # less than @@ -106,10 +168,10 @@ class IndexType(IntEnum): IVF_FLAT = IVFLAT IVF_SQ8_H = IVF_SQ8H - def __repr__(self): - return "<{}: {}>".format(self.__class__.__name__, self._name_) + def __repr__(self) -> str: + return f"<{self.__class__.__name__}: {self._name_}>" - def __str__(self): + def __str__(self) -> str: return self._name_ @@ -121,14 +183,13 @@ class MetricType(IntEnum): HAMMING = 3 JACCARD = 4 TANIMOTO = 5 - # SUBSTRUCTURE = 6 SUPERSTRUCTURE = 7 - def __repr__(self): - return "<{}: {}>".format(self.__class__.__name__, self._name_) + def __repr__(self) -> str: + return f"<{self.__class__.__name__}: {self._name_}>" - def __str__(self): + def __str__(self) -> str: return self._name_ @@ -141,38 +202,22 @@ class IndexState(IntEnum): Deleted = 5 -class ErrorCode(IntEnum): - Success = 0 - UnexpectedError = 1 - ConnectFailed = 2 - PermissionDenied = 3 - CollectionNotExists = 4 - IllegalArgument = 5 - IllegalDimension = 7 - IllegalIndexType = 8 - IllegalCollectionName = 9 - IllegalTOPK = 10 - IllegalRowRecord = 11 - IllegalVectorID = 12 - IllegalSearchResult = 13 - FileNotFound = 14 - MetaFailed = 15 - CacheFailed = 16 - CannotCreateFolder = 17 - CannotCreateFile = 18 - CannotDeleteFolder = 19 - CannotDeleteFile = 20 - BuildIndexError = 21 - IllegalNLIST = 22 - IllegalMetricType = 23 - OutOfMemory = 24 - IndexNotExist = 25 - - class PlaceholderType(IntEnum): NoneType = 0 BinaryVector = 100 FloatVector = 101 + FLOAT16_VECTOR = 102 + BFLOAT16_VECTOR = 103 + SparseFloatVector = 104 + Int8Vector = 105 + VARCHAR = 21 + + EmbListBinaryVector = 300 + EmbListFloatVector = 301 + EmbListFloat16Vector = 302 + EmbListBFloat16Vector = 303 + EmbListSparseFloatVector = 304 + EmbListInt8Vector = 305 class State(IntEnum): @@ -191,33 +236,63 @@ class State(IntEnum): def new(s: int): if s == State.Executing: return State.Executing - elif s == State.Completed: + if s == State.Completed: return State.Completed - else: - return State.UndefiedState + return State.UndefiedState - def __repr__(self): - return "<{}: {}>".format(self.__class__.__name__, self._name_) + def __repr__(self) -> str: + return f"<{self.__class__.__name__}: {self._name_}>" - def __str__(self): + def __str__(self) -> str: + return self._name_ + + +class LoadState(IntEnum): + """ + NotExist: collection or partition isn't existed + NotLoad: collection or partition isn't loaded + Loading: collection or partition is loading + Loaded: collection or partition is loaded + """ + + NotExist = 0 + NotLoad = 1 + Loading = 2 + Loaded = 3 + + def __repr__(self) -> str: + return f"<{self.__class__.__name__}: {self._name_}>" + + def __str__(self) -> str: return self._name_ class CompactionState: """ - in_executing: number of plans in executing - in_timeout: number of plans failed of timeout - completed: number of plans successfully completed + in_executing: number of plans in executing + in_timeout: number of plans failed of timeout + completed: number of plans successfully completed """ - def __init__(self, compaction_id: int, state: State, in_executing: int, in_timeout: int, completed: int): + def __init__( + self, + compaction_id: int, + state: State, + in_executing: int, + in_timeout: int, + completed: int, + ) -> None: self.compaction_id = compaction_id self.state = state self.in_executing = in_executing self.in_timeout = in_timeout self.completed = completed - def __repr__(self): + @property + def state_name(self): + return self.state.name + + def __repr__(self) -> str: return f""" CompactionState - compaction id: {self.compaction_id} @@ -229,11 +304,11 @@ def __repr__(self): class Plan: - def __init__(self, sources: list, target: int): + def __init__(self, sources: list, target: int) -> None: self.sources = sources self.target = target - def __repr__(self): + def __repr__(self) -> str: return f""" Plan: - sources: {self.sources} @@ -242,12 +317,12 @@ def __repr__(self): class CompactionPlans: - def __init__(self, compaction_id: int, state: int): + def __init__(self, compaction_id: int, state: int) -> None: self.compaction_id = compaction_id self.state = State.new(state) self.plans = [] - def __repr__(self): + def __repr__(self) -> str: return f""" Compaction Plans: - compaction id: {self.compaction_id} @@ -256,14 +331,1062 @@ def __repr__(self): """ -def get_consistency_level(consistency_level): +def cmp_consistency_level(l1: Union[str, int], l2: Union[str, int]): + if isinstance(l1, str): + try: + l1 = ConsistencyLevel.Value(l1) + except ValueError: + return False + + if isinstance(l2, str): + try: + l2 = ConsistencyLevel.Value(l2) + except ValueError: + return False + + if isinstance(l1, int) and l1 not in ConsistencyLevel.values(): + return False + + if isinstance(l2, int) and l2 not in ConsistencyLevel.values(): + return False + + return l1 == l2 + + +def get_consistency_level(consistency_level: Union[str, int]): if isinstance(consistency_level, int): if consistency_level in ConsistencyLevel.values(): return consistency_level - raise InvalidConsistencyLevel(0, f"invalid consistency level: {consistency_level}") + raise InvalidConsistencyLevel(message=f"invalid consistency level: {consistency_level}") if isinstance(consistency_level, str): try: return ConsistencyLevel.Value(consistency_level) except ValueError as e: - raise InvalidConsistencyLevel(0, f"invalid consistency level: {consistency_level}") from e - raise InvalidConsistencyLevel(0, "invalid consistency level") + raise InvalidConsistencyLevel( + message=f"invalid consistency level: {consistency_level}" + ) from e + raise InvalidConsistencyLevel(message="invalid consistency level") + + +class Shard: + def __init__(self, channel_name: str, shard_nodes: list, shard_leader: int) -> None: + self._channel_name = channel_name + self._shard_nodes = set(shard_nodes) + self._shard_leader = shard_leader + + def __repr__(self) -> str: + return ( + f"Shard: , " + f", " + ) + + @property + def channel_name(self) -> str: + return self._channel_name + + @property + def shard_nodes(self): + return self._shard_nodes + + @property + def shard_leader(self) -> int: + return self._shard_leader + + +class Group: + """ + This class represents replica info in orm format api, which is deprecated in milvus client api. + use `ReplicaInfo` instead. + """ + + def __init__( + self, + group_id: int, + shards: List[str], + group_nodes: List[tuple], + resource_group: str, + num_outbound_node: dict, + ) -> None: + self._id = group_id + self._shards = shards + self._group_nodes = tuple(group_nodes) + self._resource_group = resource_group + self._num_outbound_node = num_outbound_node + + def __repr__(self) -> str: + return ( + f"Group: , , " + f", , " + f"" + ) + + @property + def id(self): + return self._id + + @property + def group_nodes(self): + return self._group_nodes + + @property + def shards(self): + return self._shards + + @property + def resource_group(self): + return self._resource_group + + @property + def num_outbound_node(self): + return self._num_outbound_node + + +class Replica: + """ + This class represents replica info list in orm format api, + which is deprecated in milvus client api. + use `List[ReplicaInfo]` instead. + + Replica groups: + - Group: , , + , + , + , + ]> + - Group: , , + , + , + , + ]> + """ + + def __init__(self, groups: list) -> None: + self._groups = groups + + def __repr__(self) -> str: + s = "Replica groups:" + for g in self.groups: + s += f"\n- {g}" + return s + + @property + def groups(self): + return self._groups + + +class ReplicaInfo: + def __init__( + self, + replica_id: int, + shards: List[str], + nodes: List[tuple], + resource_group: str, + num_outbound_node: dict, + ) -> None: + self._id = replica_id + self._shards = shards + self._nodes = tuple(nodes) + self._resource_group = resource_group + self._num_outbound_node = num_outbound_node + + def __repr__(self) -> str: + return ( + f"ReplicaInfo: , , " + f", , " + f"" + ) + + @property + def id(self): + return self._id + + @property + def group_nodes(self): + return self._nodes + + @property + def shards(self): + return self._shards + + @property + def resource_group(self): + return self._resource_group + + @property + def num_outbound_node(self): + return self._num_outbound_node + + +class BulkInsertState: + """enum states of bulk insert task""" + + ImportPending = 0 + ImportFailed = 1 + ImportStarted = 2 + ImportPersisted = 5 + ImportCompleted = 6 + ImportFailedAndCleaned = 7 + ImportUnknownState = 100 + + """pre-defined keys of bulk insert task info""" + FAILED_REASON = "failed_reason" + IMPORT_FILES = "files" + IMPORT_COLLECTION = "collection" + IMPORT_PARTITION = "partition" + IMPORT_PROGRESS = "progress_percent" + + """ + Bulk insert state example: + - taskID : 44353845454358, + - state : "BulkLoadPersisted", + - row_count : 1000, + - infos : {"files": "rows.json", + "collection": "c1", + "partition": "", + "failed_reason": ""}, + - id_list : [44353845455401, 44353845456401] + - create_ts : 1661398759, + """ + + state_2_state: ClassVar[Dict] = { + common_pb2.ImportPending: ImportPending, + common_pb2.ImportFailed: ImportFailed, + common_pb2.ImportStarted: ImportStarted, + common_pb2.ImportPersisted: ImportPersisted, + common_pb2.ImportCompleted: ImportCompleted, + common_pb2.ImportFailedAndCleaned: ImportFailedAndCleaned, + } + + state_2_name: ClassVar[Dict] = { + ImportPending: "Pending", + ImportFailed: "Failed", + ImportStarted: "Started", + ImportPersisted: "Persisted", + ImportCompleted: "Completed", + ImportFailedAndCleaned: "Failed and cleaned", + ImportUnknownState: "Unknown", + } + + def __init__( + self, + task_id: int, + state: State, + row_count: int, + id_ranges: list, + infos: Dict, + create_ts: int, + ): + self._task_id = task_id + self._state = state + self._row_count = row_count + self._id_ranges = id_ranges + self._create_ts = create_ts + + self._infos = {kv.key: kv.value for kv in infos} + + def __repr__(self) -> str: + fmt = """""" + return fmt.format( + self._task_id, + self.state_name, + self.row_count, + self.infos, + self.id_ranges, + self.create_time_str, + ) + + @property + def task_id(self): + """ + Return unique id of this task. + """ + return self._task_id + + @property + def row_count(self): + """ + If the task is finished, this value is the number of rows imported. + If the task is not finished, this value is the number of rows parsed. + """ + return self._row_count + + @property + def state(self): + return self.state_2_state.get(self._state, BulkInsertState.ImportUnknownState) + + @property + def state_name(self) -> str: + return self.state_2_name.get(self._state, "unknown state") + + @property + def id_ranges(self): + """ + auto generated id ranges if the primary key is auto generated + + the id list of response is id ranges + for example, if the response return [1, 100, 200, 250] + the full id list should be [1, 2, 3 ... , 99, 100, 200, 201, 202 ... , 249, 250] + """ + return self._id_ranges + + @property + def ids(self): + """ + auto generated ids if the primary key is auto generated + + the id list of response is id ranges + for example, if the response return [1, 100, 200, 250], the id ranges: [1,100),[200,250) + the full id list should be [1, 2, 3 ... , 99, 200, 201, 202 ... , 249] + """ + + if len(self._id_ranges) % 2 != 0: + raise AutoIDException(message=ExceptionsMessage.AutoIDIllegalRanges) + + ids = [] + for i in range(int(len(self._id_ranges) / 2)): + begin = self._id_ranges[i * 2] + end = self._id_ranges[i * 2 + 1] + for j in range(begin, end): + ids.append(j) + + return ids + + @property + def infos(self): + """more informations about the task, progress percentage, file path, failed reason, etc.""" + return self._infos + + @property + def failed_reason(self): + """failed reason of the bulk insert task.""" + return self._infos.get(BulkInsertState.FAILED_REASON, "") + + @property + def files(self): + """data files of the bulk insert task.""" + return self._infos.get(BulkInsertState.IMPORT_FILES, "") + + @property + def collection_name(self): + """target collection's name of the bulk insert task.""" + return self._infos.get(BulkInsertState.IMPORT_COLLECTION, "") + + @property + def partition_name(self): + """target partition's name of the bulk insert task.""" + return self._infos.get(BulkInsertState.IMPORT_PARTITION, "") + + @property + def create_timestamp(self): + """the integer timestamp when this task is created.""" + return self._create_ts + + @property + def create_time_str(self): + """A readable string converted from the timestamp when this task is created.""" + ts = time.localtime(self._create_ts) + return time.strftime("%Y-%m-%d %H:%M:%S", ts) + + @property + def progress(self): + """working progress percent value.""" + percent = self._infos.get(BulkInsertState.IMPORT_PROGRESS, "0") + return int(percent) + + +class GrantItem: + def __init__(self, entity: Any) -> None: + self._object = entity.object.name + self._object_name = entity.object_name + self._db_name = entity.db_name + self._role_name = entity.role.name + self._grantor_name = entity.grantor.user.name + self._privilege = entity.grantor.privilege.name + + def __repr__(self) -> str: + return ( + f"GrantItem: , , " + f", " + f", , " + f"" + ) + + @property + def object(self): + return self._object + + @property + def object_name(self): + return self._object_name + + @property + def db_name(self): + return self._db_name + + @property + def role_name(self): + return self._role_name + + @property + def grantor_name(self): + return self._grantor_name + + @property + def privilege(self): + return self._privilege + + def __iter__(self): + yield "object_type", self.object + yield "object_name", self.object_name + if self.db_name: + yield "db_name", self.db_name + + yield "role_name", self.role_name + yield "privilege", self.privilege + if self.grantor_name: + yield "grantor_name", self.grantor_name + + +class GrantInfo: + """ + GrantInfo groups: + - GrantItem: , , , + , + - GrantItem: , , , + , + """ + + def __init__(self, entities: List[milvus_types.RoleEntity]) -> None: + groups = [] + for entity in entities: + if isinstance(entity, milvus_types.GrantEntity): + groups.append(GrantItem(entity)) + + self._groups = groups + + def __repr__(self) -> str: + s = "GrantInfo groups:" + for g in self.groups: + s += f"\n- {g}" + return s + + @property + def groups(self): + return self._groups + + +class PrivilegeGroupItem: + def __init__(self, privilege_group: str, privileges: List[milvus_types.PrivilegeEntity]): + self._privilege_group = privilege_group + privielges = [] + for privilege in privileges: + if isinstance(privilege, milvus_types.PrivilegeEntity): + privielges.append(privilege.name) + self._privileges = tuple(privielges) + + def __repr__(self) -> str: + return f"PrivilegeGroupItem: , " + + @property + def privilege_group(self): + return self._privilege_group + + @property + def privileges(self): + return self._privileges + + +class PrivilegeGroupInfo: + """ + PrivilegeGroupInfo groups: + - PrivilegeGroupItem: , + """ + + def __init__(self, results: List[milvus_types.PrivilegeGroupInfo]) -> None: + groups = [] + for result in results: + if isinstance(result, milvus_types.PrivilegeGroupInfo): + groups.append(PrivilegeGroupItem(result.group_name, result.privileges)) + self._groups = groups + + def __repr__(self) -> str: + s = "PrivilegeGroupInfo groups:" + for g in self.groups: + s += f"\n- {g}" + return s + + @property + def groups(self): + return self._groups + + +class UserItem: + def __init__(self, username: str, entities: List[milvus_types.RoleEntity]) -> None: + self._username = username + roles = [] + for entity in entities: + if isinstance(entity, milvus_types.RoleEntity): + roles.append(entity.name) + self._roles = tuple(roles) + + def __repr__(self) -> str: + return f"UserItem: , " + + @property + def username(self): + return self._username + + @property + def roles(self): + return self._roles + + +class UserInfo: + """ + UserInfo groups: + - UserItem: , + """ + + def __init__(self, results: List[milvus_types.UserResult]): + groups = [] + for result in results: + if isinstance(result, milvus_types.UserResult): + groups.append(UserItem(result.user.name, result.roles)) + + self._groups = groups + + def __repr__(self) -> str: + s = "UserInfo groups:" + for g in self.groups: + s += f"\n- {g}" + return s + + @property + def groups(self): + return self._groups + + +class RoleItem: + def __init__(self, role_name: str, entities: List[milvus_types.UserEntity]): + self._role_name = role_name + users = [] + for entity in entities: + if isinstance(entity, milvus_types.UserEntity): + users.append(entity.name) + self._users = tuple(users) + + def __repr__(self) -> str: + return f"RoleItem: , " + + @property + def role_name(self): + return self._role_name + + @property + def users(self): + return self._users + + +class RoleInfo: + """ + RoleInfo groups: + - UserItem: , + """ + + def __init__(self, results: List[milvus_types.RoleResult]) -> None: + groups = [] + for result in results: + if isinstance(result, milvus_types.RoleResult): + groups.append(RoleItem(result.role.name, result.users)) + + self._groups = groups + + def __repr__(self) -> str: + s = "RoleInfo groups:" + for g in self.groups: + s += f"\n- {g}" + return s + + @property + def groups(self): + return self._groups + + +class ResourceGroupInfo: + def __init__(self, resource_group: Any) -> None: + self._name = resource_group.name + self._capacity = resource_group.capacity + self._num_available_node = resource_group.num_available_node + self._num_loaded_replica = resource_group.num_loaded_replica + self._num_outgoing_node = resource_group.num_outgoing_node + self._num_incoming_node = resource_group.num_incoming_node + self._config = resource_group.config + self._nodes = [NodeInfo(node) for node in resource_group.nodes] + + def __repr__(self) -> str: + return f"""ResourceGroupInfo: +, +, +, +, +, +, +, +""" + + @property + def name(self): + return self._name + + @property + def capacity(self): + return self._capacity + + @property + def num_available_node(self): + return self._num_available_node + + @property + def num_loaded_replica(self): + return self._num_loaded_replica + + @property + def num_outgoing_node(self): + return self._num_outgoing_node + + @property + def num_incoming_node(self): + return self._num_incoming_node + + @property + def config(self): + return self._config + + @property + def nodes(self): + return self._nodes + + +class NodeInfo: + """ + Represents information about a node in the system. + Attributes: + node_id (int): The ID of the node. + address (str): The ip address of the node. + hostname (str): The hostname of the node. + Example: + NodeInfo( + node_id=1, + address="127.0.0.1", + hostname="localhost", + ) + """ + + def __init__(self, info: Any) -> None: + self._node_id = info.node_id + self._address = info.address + self._hostname = info.hostname + + def __repr__(self) -> str: + return f"""NodeInfo: +, +, +""" + + @property + def node_id(self) -> int: + return self._node_id + + @property + def address(self) -> str: + return self._address + + @property + def hostname(self) -> str: + return self._hostname + + +ResourceGroupConfig = rg_pb2.ResourceGroupConfig +""" +Represents the configuration of a resource group. +Attributes: + requests (ResourceGroupLimit): The requests of the resource group. + limits (ResourceGroupLimit): The limits of the resource group. + transfer_from (List[ResourceGroupTransfer]): The transfer config that resource group + can transfer node from the resource group of this field at high priority. + transfer_to (List[ResourceGroupTransfer]): The transfer config that resource group + can transfer node to the resource group of this field at high priority. +Example: + ResourceGroupConfig( + requests={"node_num": 1}, + limits={"node_num": 5}, + transfer_from=[{"resource_group": "__default_resource_group"}], + transfer_to=[{"resource_group": "resource_group_2"}], + ) +""" + +ResourceGroupLimit = rg_pb2.ResourceGroupLimit +""" +Represents the limit of a resource group. +Attributes: + node_num (int): The number of nodes that the resource group can hold. +""" + +ResourceGroupTransfer = rg_pb2.ResourceGroupTransfer +""" +Represents the transfer config of a resource group. +Attributes: + resource_group (str): The name of the resource group that can be transferred to or from. +""" + + +class HybridExtraList(list): + """ + A list that holds partially eager and partially lazy row data. + + - Primitive fields are extracted at initialization. + - Variable-length fields (array/string/json) are extracted lazily on access. + + Attributes: + extra (dict): Extra metadata associated with the result set. + """ + + def __init__( + self, + lazy_field_data: List[Any], # lazy extract fields + *args, + extra: Optional[Dict] = None, + dynamic_fields: Optional[List] = None, + strict_float32: bool = False, + **kwargs, + ) -> None: + super().__init__(*args, **kwargs) + self._lazy_field_data = lazy_field_data + self._dynamic_fields = dynamic_fields + self.extra = OmitZeroDict(extra or {}) + self._float_vector_np_array = {} + self._has_materialized_float_vector = False + self._strict_float32 = strict_float32 + self._materialized_bitmap = [False] * len(self) + + def _extract_lazy_fields(self, index: int, field_data: Any, row_data: Dict) -> Any: + if field_data.type == DataType.JSON: + if len(field_data.valid_data) > 0 and field_data.valid_data[index] is False: + row_data[field_data.field_name] = None + return + try: + json_dict = orjson.loads(field_data.scalars.json_data.data[index]) + except Exception as e: + logger.error( + f"HybridExtraList::_extract_lazy_fields::Failed to load JSON data: {e}, original data: {field_data.scalars.json_data.data[index]}" + ) + raise + if not field_data.is_dynamic: + row_data[field_data.field_name] = json_dict + return + if not self._dynamic_fields: + # Only update keys that don't exist in row_data + row_data.update({k: v for k, v in json_dict.items() if k not in row_data}) + return + # Only update keys that don't exist in row_data and are in dynamic_fields + row_data.update( + { + k: v + for k, v in json_dict.items() + if k in self._dynamic_fields and k not in row_data + } + ) + elif field_data.type == DataType.FLOAT_VECTOR: + dim = field_data.vectors.dim + start_pos = index * dim + end_pos = start_pos + dim + if len(field_data.vectors.float_vector.data) >= start_pos: + # Here we use numpy.array to convert the float64 values to numpy.float32 values, + # and return a list of numpy.float32 to users + # By using numpy.array, performance improved by 60% for topk=16384 dim=1536 case. + if self._strict_float32: + row_data[field_data.field_name] = self._float_vector_np_array[ + field_data.field_name + ][start_pos:end_pos] + else: + row_data[field_data.field_name] = field_data.vectors.float_vector.data[ + start_pos:end_pos + ] + elif field_data.type == DataType.BINARY_VECTOR: + dim = field_data.vectors.dim + bytes_per_vector = dim // 8 + start_pos = index * bytes_per_vector + end_pos = start_pos + bytes_per_vector + if len(field_data.vectors.binary_vector) >= start_pos: + row_data[field_data.field_name] = [ + field_data.vectors.binary_vector[start_pos:end_pos] + ] + elif field_data.type == DataType.BFLOAT16_VECTOR: + dim = field_data.vectors.dim + bytes_per_vector = dim * 2 + start_pos = index * bytes_per_vector + end_pos = start_pos + bytes_per_vector + if len(field_data.vectors.bfloat16_vector) >= start_pos: + row_data[field_data.field_name] = [ + field_data.vectors.bfloat16_vector[start_pos:end_pos] + ] + elif field_data.type == DataType.FLOAT16_VECTOR: + dim = field_data.vectors.dim + bytes_per_vector = dim * 2 + start_pos = index * bytes_per_vector + end_pos = start_pos + bytes_per_vector + if len(field_data.vectors.float16_vector) >= start_pos: + row_data[field_data.field_name] = [ + field_data.vectors.float16_vector[start_pos:end_pos] + ] + elif field_data.type == DataType.SPARSE_FLOAT_VECTOR: + row_data[field_data.field_name] = utils.sparse_parse_single_row( + field_data.vectors.sparse_float_vector.contents[index] + ) + elif field_data.type == DataType.INT8_VECTOR: + dim = field_data.vectors.dim + start_pos = index * dim + end_pos = start_pos + dim + if len(field_data.vectors.int8_vector) >= start_pos: + row_data[field_data.field_name] = [ + field_data.vectors.int8_vector[start_pos:end_pos] + ] + elif field_data.type == DataType._ARRAY_OF_VECTOR: + # Handle array of vectors + if hasattr(field_data, "vectors") and hasattr(field_data.vectors, "vector_array"): + if index < len(field_data.vectors.vector_array.data): + vector_data = field_data.vectors.vector_array.data[index] + dim = vector_data.dim + float_data = vector_data.float_vector.data + num_vectors = len(float_data) // dim + row_vectors = [] + for vec_idx in range(num_vectors): + vec_start = vec_idx * dim + vec_end = vec_start + dim + row_vectors.append(list(float_data[vec_start:vec_end])) + row_data[field_data.field_name] = row_vectors + else: + row_data[field_data.field_name] = [] + else: + row_data[field_data.field_name] = [] + elif field_data.type == DataType._ARRAY_OF_STRUCT: + # Handle struct arrays - convert column format back to array of structs + if hasattr(field_data, "struct_arrays") and field_data.struct_arrays: + # Import here to avoid circular imports + from .entity_helper import extract_struct_array_from_column_data # noqa: PLC0415 + + row_data[field_data.field_name] = extract_struct_array_from_column_data( + field_data.struct_arrays, index + ) + else: + row_data[field_data.field_name] = None + + def __getitem__(self, index: Union[int, slice]): + if isinstance(index, slice): + results = [] + for i in range(*index.indices(len(self))): + row = self[i] + results.append(row) + return results + + if self._materialized_bitmap[index]: + return super().__getitem__(index) + + self._pre_materialize_float_vector() + row = super().__getitem__(index) + for field_data in self._lazy_field_data: + self._extract_lazy_fields(index, field_data, row) + + self._materialized_bitmap[index] = True + return row + + def __iter__(self): + for i in range(len(self)): + yield self[i] + + def __str__(self) -> str: + preview = [str(self[i]) for i in range(min(10, len(self)))] + return f"data: {preview}{' ...' if len(self) > 10 else ''}, extra_info: {self.extra}" + + def _pre_materialize_float_vector(self): + if not self._strict_float32 or self._has_materialized_float_vector: + return + for field_data in self._lazy_field_data: + if field_data.type == DataType.FLOAT_VECTOR: + self._float_vector_np_array[field_data.field_name] = np.array( + field_data.vectors.float_vector.data, dtype=np.float32 + ) + self._has_materialized_float_vector = True + + def materialize(self): + """Materializes all lazy-loaded fields for all rows.""" + for i in range(len(self)): + # By simply accessing the item, __getitem__ will trigger + # the one-time materialization logic if it hasn't been done yet. + _ = self[i] + return self + + __repr__ = __str__ + + +class ExtraList(list): + """ + A list that can hold extra information. + Attributes: + extra (dict): The extra information of the list. + Example: + ExtraList([1, 2, 3], extra={"total": 3}) + """ + + def __init__(self, *args, extra: Optional[Dict] = None, **kwargs) -> None: + super().__init__(*args, **kwargs) + self.extra = OmitZeroDict(extra or {}) + + def __str__(self) -> str: + """Only print at most 10 query results""" + if self.extra and self.extra.omit_zero_len() != 0: + return f"data: {list(map(str, self[:10]))}{' ...' if len(self) > 10 else ''}, extra_info: {self.extra}" + return f"data: {list(map(str, self[:10]))}{' ...' if len(self) > 10 else ''}" + + __repr__ = __str__ + + +def get_cost_from_status(status: Optional[common_pb2.Status] = None): + return int( + status.extra_info["report_value"] + if status and status.extra_info and "report_value" in status.extra_info + else "0" + ) + + +def get_extra_info(status: Optional[common_pb2.Status] = None): + extra = {"cost": get_cost_from_status(status)} + if status and status.extra_info: + if "scanned_remote_bytes" in status.extra_info: + extra["scanned_remote_bytes"] = int(status.extra_info["scanned_remote_bytes"]) + if "scanned_total_bytes" in status.extra_info: + extra["scanned_total_bytes"] = int(status.extra_info["scanned_total_bytes"]) + if "cache_hit_ratio" in status.extra_info: + extra["cache_hit_ratio"] = float(status.extra_info["cache_hit_ratio"]) + return extra + + +class DatabaseInfo: + """ + Represents the information of a database. + Atributes: + name (str): The name of the database. + properties (dict): The properties of the database. + Example: + DatabaseInfo(name="test_db", id=1, properties={"key": "value"}) + """ + + @property + def name(self) -> str: + return self._name + + @property + def properties(self) -> Dict: + return self._properties + + def __init__(self, info: Any) -> None: + self._name = info.db_name + self._properties = {} + + for p in info.properties: + self.properties[p.key] = p.value + + def __str__(self) -> str: + return f"DatabaseInfo(name={self.name}, properties={self.properties})" + + def to_dict(self) -> Dict[str, Any]: + """Converts the DatabaseInfo instance to a dictionary.""" + result = {"name": self.name} + result.update(self.properties) + return result + + +class AnalyzeToken: + def __init__( + self, token: milvus_types.AnalyzerToken, with_hash: bool = False, with_detail: bool = False + ): + self.dict = {"token": token.token} + if with_detail: + self.dict["start_offset"] = token.start_offset + self.dict["end_offset"] = token.end_offset + self.dict["position"] = token.position + self.dict["position_length"] = token.position_length + if with_hash: + self.dict["hash"] = token.hash + + @property + def token(self): + return self.dict["token"] + + @property + def start_offset(self): + return self.dict["start_offset"] + + @property + def end_offset(self): + return self.dict["end_offset"] + + @property + def position(self): + return self.dict["position"] + + @property + def position_length(self): + return self.dict["position_length"] + + @property + def hash(self): + return self.dict["hash"] + + def __getitem__(self, key: str): + return self.dict[key] + + def __str__(self): + return str(self.dict) + + __repr__ = __str__ + + +class AnalyzeResult: + def __init__( + self, info: milvus_types.AnalyzerResult, with_hash: bool = False, with_detail: bool = False + ) -> None: + if not with_detail and not with_hash: + self.tokens = [token.token for token in info.tokens] + else: + self.tokens = [AnalyzeToken(token, with_hash, with_detail) for token in info.tokens] + + def __str__(self) -> str: + return str(self.tokens) + + __repr__ = __str__ + + +@dataclass +class SegmentInfo: + segment_id: int + collection_id: int + collection_name: str + num_rows: int + is_sorted: bool + state: common_pb2.SegmentState + level: common_pb2.SegmentLevel + storage_version: int + + +@dataclass +class LoadedSegmentInfo(SegmentInfo): + mem_size: int diff --git a/pymilvus/client/utils.py b/pymilvus/client/utils.py index 9369bf733..f10702e61 100644 --- a/pymilvus/client/utils.py +++ b/pymilvus/client/utils.py @@ -1,22 +1,37 @@ import datetime +import importlib.util +import struct +from copy import deepcopy +from datetime import timedelta +from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Tuple, Union + +import orjson +from dateutil.parser import isoparse + +from pymilvus.exceptions import MilvusException, ParamError +from pymilvus.grpc_gen.common_pb2 import Status +from pymilvus.settings import Config -from .types import DataType from .constants import LOGICAL_BITS, LOGICAL_BITS_MASK +from .types import DataType + +MILVUS = "milvus" +ZILLIZ = "zilliz" valid_index_types = [ + "GPU_IVF_FLAT", + "GPU_IVF_PQ", "FLAT", "IVF_FLAT", "IVF_SQ8", - # "IVF_SQ8_HYBRID", "IVF_PQ", "HNSW", - # "NSG", - "ANNOY", - "RHNSW_FLAT", - "RHNSW_PQ", - "RHNSW_SQ", "BIN_FLAT", - "BIN_IVF_FLAT" + "BIN_IVF_FLAT", + "DISKANN", + "AUTOINDEX", + "GPU_CAGRA", + "GPU_BRUTE_FORCE", ] valid_index_params_keys = [ @@ -26,12 +41,16 @@ "M", "efConstruction", "PQM", - "n_trees" + "n_trees", + "intermediate_graph_degree", + "graph_degree", + "build_algo", + "cache_dataset_on_device", ] valid_binary_index_types = [ "BIN_FLAT", - "BIN_IVF_FLAT" + "BIN_IVF_FLAT", ] valid_binary_metric_types = [ @@ -39,101 +58,481 @@ "HAMMING", "TANIMOTO", "SUBSTRUCTURE", - "SUPERSTRUCTURE" + "SUPERSTRUCTURE", ] -def hybridts_to_unixtime(ts): +def check_status(status: Status): + if status.code != 0 or status.error_code != 0: + raise MilvusException(status.code, status.reason, status.error_code) + + +def is_successful(status: Status): + return status.code == 0 and status.error_code == 0 + + +def hybridts_to_unixtime(ts: int): physical = ts >> LOGICAL_BITS return physical / 1000.0 -def mkts_from_hybridts(hybridts, milliseconds=0., delta=None): +def mkts_from_hybridts( + hybridts: int, + milliseconds: Union[float] = 0.0, + delta: Optional[timedelta] = None, +) -> int: if not isinstance(milliseconds, (int, float)): - raise Exception("parameter milliseconds should be type of int or float") + raise MilvusException(message="parameter milliseconds should be type of int or float") if isinstance(delta, datetime.timedelta): - milliseconds += (delta.microseconds / 1000.0) + milliseconds += delta.microseconds / 1000.0 elif delta is not None: - raise Exception("parameter delta should be type of datetime.timedelta") + raise MilvusException(message="parameter delta should be type of datetime.timedelta") if not isinstance(hybridts, int): - raise Exception("parameter hybridts should be type of int") + raise MilvusException(message="parameter hybridts should be type of int") logical = hybridts & LOGICAL_BITS_MASK physical = hybridts >> LOGICAL_BITS - new_ts = int((int((physical + milliseconds)) << LOGICAL_BITS) + logical) - return new_ts + return int((int(physical + milliseconds) << LOGICAL_BITS) + logical) -def mkts_from_unixtime(epoch, milliseconds=0., delta=None): +def mkts_from_unixtime( + epoch: Union[float], + milliseconds: Union[float] = 0.0, + delta: Optional[timedelta] = None, +) -> int: if not isinstance(epoch, (int, float)): - raise Exception("parameter epoch should be type of int or float") + raise MilvusException(message="parameter epoch should be type of int or float") if not isinstance(milliseconds, (int, float)): - raise Exception("parameter milliseconds should be type of int or float") + raise MilvusException(message="parameter milliseconds should be type of int or float") if isinstance(delta, datetime.timedelta): - milliseconds += (delta.microseconds / 1000.0) + milliseconds += delta.microseconds / 1000.0 elif delta is not None: - raise Exception("parameter delta should be type of datetime.timedelta") + raise MilvusException(message="parameter delta should be type of datetime.timedelta") - epoch += (milliseconds / 1000.0) + epoch += milliseconds / 1000.0 int_msecs = int(epoch * 1000 // 1) return int(int_msecs << LOGICAL_BITS) -def mkts_from_datetime(d_time, milliseconds=0., delta=None): +def mkts_from_datetime( + d_time: datetime.datetime, + milliseconds: Union[float] = 0.0, + delta: Optional[timedelta] = None, +) -> int: if not isinstance(d_time, datetime.datetime): - raise Exception("parameter d_time should be type of datetime.datetime") + raise MilvusException(message="parameter d_time should be type of datetime.datetime") return mkts_from_unixtime(d_time.timestamp(), milliseconds=milliseconds, delta=delta) -def check_invalid_binary_vector(entities): +def check_invalid_binary_vector(entities: List) -> bool: for entity in entities: - if entity['type'] == DataType.BINARY_VECTOR: - if not isinstance(entity['values'], list) and len(entity['values']) == 0: + if entity["type"] == DataType.BINARY_VECTOR: + if not isinstance(entity["values"], list) and len(entity["values"]) == 0: + return False + + dim = len(entity["values"][0]) * 8 + if dim == 0: return False - else: - dim = len(entity['values'][0]) * 8 - if dim == 0: + + for values in entity["values"]: + if len(values) * 8 != dim: + return False + if not isinstance(values, bytes): return False - for values in entity['values']: - if len(values) * 8 != dim: - return False - if not isinstance(values, bytes): - return False return True -def len_of(field_data) -> int: +def len_of(field_data: Any) -> int: if field_data.HasField("scalars"): if field_data.scalars.HasField("bool_data"): return len(field_data.scalars.bool_data.data) - elif field_data.scalars.HasField("int_data"): + + if field_data.scalars.HasField("int_data"): return len(field_data.scalars.int_data.data) - elif field_data.scalars.HasField("long_data"): + + if field_data.scalars.HasField("long_data"): return len(field_data.scalars.long_data.data) - elif field_data.scalars.HasField("float_data"): + + if field_data.scalars.HasField("float_data"): return len(field_data.scalars.float_data.data) - elif field_data.scalars.HasField("double_data"): + + if field_data.scalars.HasField("double_data"): return len(field_data.scalars.double_data.data) - elif field_data.scalars.HasField("string_data"): + + if field_data.scalars.HasField("timestamptz_data"): + return len(field_data.scalars.timestamptz_data.data) + + if field_data.scalars.HasField("string_data"): return len(field_data.scalars.string_data.data) - elif field_data.scalars.HasField("bytes_data"): + + if field_data.scalars.HasField("bytes_data"): return len(field_data.scalars.bytes_data.data) - else: - raise BaseException("Unsupported scalar type") - elif field_data.HasField("vectors"): + + if field_data.scalars.HasField("json_data"): + return len(field_data.scalars.json_data.data) + + if field_data.scalars.HasField("array_data"): + return len(field_data.scalars.array_data.data) + + if field_data.scalars.HasField("geometry_wkt_data"): + return len(field_data.scalars.geometry_wkt_data.data) + + raise MilvusException(message="Unsupported scalar type") + + if field_data.HasField("vectors"): dim = field_data.vectors.dim if field_data.vectors.HasField("float_vector"): total_len = len(field_data.vectors.float_vector.data) if total_len % dim != 0: - raise BaseException(f"Invalid vector length: total_len={total_len}, dim={dim}") + raise MilvusException( + message=f"Invalid vector length: total_len={total_len}, dim={dim}" + ) + return int(total_len / dim) + if field_data.vectors.HasField("bfloat16_vector") or field_data.vectors.HasField( + "float16_vector" + ): + total_len = ( + len(field_data.vectors.bfloat16_vector) + if field_data.vectors.HasField("bfloat16_vector") + else len(field_data.vectors.float16_vector) + ) + data_wide_in_bytes = 2 + if total_len % (dim * data_wide_in_bytes) != 0: + raise MilvusException( + message=f"Invalid bfloat16 or float16 vector length: total_len={total_len}, dim={dim}" + ) + return int(total_len / (dim * data_wide_in_bytes)) + if field_data.vectors.HasField("sparse_float_vector"): + return len(field_data.vectors.sparse_float_vector.contents) + if field_data.vectors.HasField("int8_vector"): + total_len = len(field_data.vectors.int8_vector) return int(total_len / dim) - else: - total_len = len(field_data.vectors.binary_vector) - return int(total_len / (dim / 8)) - raise BaseException("Unknown data type") + if field_data.vectors.HasField("vector_array"): + return len(field_data.vectors.vector_array.data) + + total_len = len(field_data.vectors.binary_vector) + return int(total_len / (dim / 8)) + + if field_data.HasField("struct_arrays"): + return len_of(field_data.struct_arrays.fields[0]) + + raise MilvusException(message="Unknown data type") + + +def traverse_rows_info(fields_info: Any, entities: List): + location, primary_key_loc, auto_id_loc = {}, None, None + + for i, field in enumerate(fields_info): + is_auto_id = False + is_dynamic = False + + if field.get("auto_id", False): + auto_id_loc = i + is_auto_id = True + + if field.get("is_primary", False): + primary_key_loc = i + + field_name = field["name"] + location[field_name] = i + + if field.get("is_dynamic", False): + is_dynamic = True + + for j, entity in enumerate(entities): + if is_auto_id: + if field_name in entity: + raise ParamError( + message=f"auto id enabled, {field_name} shouldn't in entities[{j}]" + ) + continue + + if is_dynamic and field_name in entity: + raise ParamError( + message=f"dynamic field enabled, {field_name} shouldn't in entities[{j}]" + ) + + # though impossible from sdk + if primary_key_loc is None: + raise ParamError(message="primary key not found") + + return location, primary_key_loc, auto_id_loc + + +def traverse_info(fields_info: Any): + location, primary_key_loc, auto_id_loc = {}, None, None + for i, field in enumerate(fields_info): + if field.get("is_primary", False): + primary_key_loc = i + + if field.get("auto_id", False): + auto_id_loc = i + continue + location[field["name"]] = i + + return location, primary_key_loc, auto_id_loc + + +def traverse_upsert_info(fields_info: Any): + location, primary_key_loc = {}, None + for i, field in enumerate(fields_info): + if field.get("is_primary", False): + primary_key_loc = i + + location[field["name"]] = i + + return location, primary_key_loc + + +def get_params(search_params: Dict): + # after 2.5.2, all parameters of search_params can be written into one layer + # no more parameters will be written searchParams.params + # to ensure compatibility and milvus can still get a json format parameter + # try to write all the parameters under searchParams into searchParams.Params + params = deepcopy(search_params.get("params", {})) + for key, value in search_params.items(): + if key in params: + if params[key] != value: + raise ParamError( + message=f"ambiguous parameter: {key}, in search_param: {value}, in search_param.params: {params[key]}" + ) + elif key != "params": + params[key] = value + + return params + + +def get_server_type(host: str): + return ZILLIZ if (isinstance(host, str) and "zilliz" in host.lower()) else MILVUS + + +def dumps(v: Union[dict, str]) -> str: + return orjson.dumps(v).decode(Config.EncodeProtocol) if isinstance(v, dict) else str(v) + + +class SciPyHelper: + _checked = False + + # whether scipy.sparse.*_matrix classes exists + _matrix_available = False + # whether scipy.sparse.*_array classes exists + _array_available = False + + @classmethod + def _init(cls): + if cls._checked: + return + scipy_spec = importlib.util.find_spec("scipy") + if scipy_spec is not None: + # when scipy is not installed, find_spec("scipy.sparse") directly + # throws exception instead of returning None. + sparse_spec = importlib.util.find_spec("scipy.sparse") + if sparse_spec is not None: + scipy_sparse = importlib.util.module_from_spec(sparse_spec) + sparse_spec.loader.exec_module(scipy_sparse) + # all scipy.sparse.*_matrix classes are introduced in the same scipy + # version, so we only need to check one of them. + cls._matrix_available = hasattr(scipy_sparse, "csr_matrix") + # all scipy.sparse.*_array classes are introduced in the same scipy + # version, so we only need to check one of them. + cls._array_available = hasattr(scipy_sparse, "csr_array") + + cls._checked = True + + @classmethod + def is_spmatrix(cls, data: Any): + cls._init() + if not cls._matrix_available: + return False + + # ruff: noqa: PLC0415 + from scipy.sparse import isspmatrix + + return isspmatrix(data) + + @classmethod + def is_sparray(cls, data: Any): + cls._init() + if not cls._array_available: + return False + + # ruff: noqa: PLC0415 + from scipy.sparse import issparse, isspmatrix + + return issparse(data) and not isspmatrix(data) + + @classmethod + def is_scipy_sparse(cls, data: Any): + return cls.is_spmatrix(data) or cls.is_sparray(data) + + +# in search results, if output fields includes a sparse float vector field, we +# will return a SparseRowOutputType for each entity. Using Dict for readability. +# TODO(SPARSE): to allow the user to specify output format. +SparseRowOutputType = Dict[int, float] + + +# this import will be called only during static type checking +if TYPE_CHECKING: + from scipy.sparse import ( + bsr_array, + coo_array, + csc_array, + csr_array, + dia_array, + dok_array, + lil_array, + spmatrix, + ) + +# we accept the following types as input for sparse matrix in user facing APIs +# such as insert, search, etc.: +# - scipy sparse array/matrix family: csr, csc, coo, bsr, dia, dok, lil +# - iterable of iterables, each element(iterable) is a sparse vector with index +# as key and value as float. +# dict example: [{2: 0.33, 98: 0.72, ...}, {4: 0.45, 198: 0.52, ...}, ...] +# list of tuple example: [[(2, 0.33), (98, 0.72), ...], [(4, 0.45), ...], ...] +# both index/value can be str numbers: {'2': '3.1'} +SparseMatrixInputType = Union[ + Iterable[ + Union[ + SparseRowOutputType, + Iterable[Tuple[int, float]], # only type hint, we accept int/float like types + ] + ], + "csc_array", + "coo_array", + "bsr_array", + "dia_array", + "dok_array", + "lil_array", + "csr_array", + "spmatrix", +] + + +def is_sparse_vector_type(data_type: DataType) -> bool: + return data_type == data_type.SPARSE_FLOAT_VECTOR + + +dense_float_vector_type_set = { + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, +} +dense_vector_type_set = { + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.INT8_VECTOR, +} + + +def is_dense_float_vector_type(data_type: DataType) -> bool: + return data_type in dense_float_vector_type_set + + +def is_float_vector_type(data_type: DataType): + return is_sparse_vector_type(data_type) or is_dense_float_vector_type(data_type) + + +def is_binary_vector_type(data_type: DataType): + return data_type == DataType.BINARY_VECTOR + + +def is_int_vector_type(data_type: DataType): + return data_type == DataType.INT8_VECTOR + + +def is_vector_type(data_type: DataType): + return ( + is_float_vector_type(data_type) + or is_binary_vector_type(data_type) + or is_int_vector_type(data_type) + ) + + +# parses plain bytes to a sparse float vector(SparseRowOutputType) +def sparse_parse_single_row(data: bytes) -> SparseRowOutputType: + if len(data) % 8 != 0: + raise ParamError(message=f"The length of data must be a multiple of 8, got {len(data)}") + + return { + struct.unpack("I", data[i : i + 4])[0]: struct.unpack("f", data[i + 4 : i + 8])[0] + for i in range(0, len(data), 8) + } + + +def convert_struct_fields_to_user_format(struct_array_fields: List[Dict]) -> List[Dict]: + """ + Convert internal struct_array_fields representation to user-friendly format. + + :param struct_array_fields: List of struct field info from server + :return: List of user-friendly field dictionaries + """ + converted_fields = [] + + for struct_field_info in struct_array_fields: + # Convert to user perspective: a field of type ARRAY with element_type STRUCT + user_struct_field = { + "field_id": struct_field_info.get("field_id"), + "name": struct_field_info["name"], + "description": struct_field_info.get("description", ""), + "type": DataType.ARRAY, + "element_type": DataType.STRUCT, + "params": {}, + } + + # Extract max_capacity from first field (all fields should have the same value) + max_capacity = None + for f in struct_field_info.get("fields", []): + params = f.get("params", {}) + if isinstance(params, dict) and params.get("max_capacity"): + max_capacity = params["max_capacity"] + break + + if max_capacity: + user_struct_field["params"]["max_capacity"] = max_capacity + + # Convert struct sub-fields to user-defined types + struct_fields = [] + for f in struct_field_info.get("fields", []): + # Struct fields are always ARRAY or ARRAY_OF_VECTOR, so element_type must exist + # Handle both cases: element_type as dict key or already converted DataType + user_field_type = f.get("element_type") + + if user_field_type: + struct_sub_field = { + "field_id": f.get("field_id"), + "name": f["name"], + "type": user_field_type, + "description": f.get("description", ""), + } + + params = f.get("params", {}) + if params and isinstance(params, dict): + cleaned_params = {k: v for k, v in params.items() if k != "max_capacity"} + if cleaned_params: + struct_sub_field["params"] = cleaned_params + + struct_fields.append(struct_sub_field) + + user_struct_field["struct_fields"] = struct_fields + converted_fields.append(user_struct_field) + + return converted_fields + + +def validate_iso_timestamp(s: str) -> bool: + try: + isoparse(s) + except (ValueError, TypeError): + return False + else: + return True diff --git a/pymilvus/decorators.py b/pymilvus/decorators.py index df0b108fc..240ad3b6a 100644 --- a/pymilvus/decorators.py +++ b/pymilvus/decorators.py @@ -1,87 +1,364 @@ -import time +import asyncio import datetime -import logging import functools +import logging +import time +import traceback +from typing import Any, Callable, Optional import grpc -from .client.exceptions import CollectionNotExistException, BaseException -from .client.types import ErrorCode, Status +from .exceptions import ErrorCode, MilvusException +from .grpc_gen import common_pb2 LOGGER = logging.getLogger(__name__) +WARNING_COLOR = "\033[93m{}\033[0m" -def check_has_collection(func): - @functools.wraps(func) - def handler(self, *args, **kwargs): - collection_name = args[0] - if not self.has_collection(collection_name): - raise CollectionNotExistException(ErrorCode.CollectionNotExists, - f"collection {collection_name} doesn't exist!") - return func(self, *args, **kwargs) - return handler - - -def deprecated(func): +def deprecated(func: Any): @functools.wraps(func) def inner(*args, **kwargs): - dup_msg = f"[WARNING] PyMilvus: class Milvus will be deprecated soon, please use Collection/utility instead" - LOGGER.warning(f"\033[93m{dup_msg}\033[0m") + LOGGER.warning( + WARNING_COLOR.format( + "[WARNING] PyMilvus: ", + "class Milvus will be deprecated soon, please use Collection/utility instead", + ) + ) return func(*args, **kwargs) + return inner -def retry_on_rpc_failure(retry_times=10, wait=1, retry_on_deadline=True): - def wrapper(func): +# Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code +IGNORE_RETRY_CODES = ( + grpc.StatusCode.DEADLINE_EXCEEDED, + grpc.StatusCode.PERMISSION_DENIED, + grpc.StatusCode.UNAUTHENTICATED, + grpc.StatusCode.INVALID_ARGUMENT, + grpc.StatusCode.ALREADY_EXISTS, + grpc.StatusCode.RESOURCE_EXHAUSTED, + grpc.StatusCode.UNIMPLEMENTED, +) + + +def retry_on_rpc_failure( + *, + retry_times: int = 75, + initial_back_off: float = 0.01, + max_back_off: float = 3, + back_off_multiplier: int = 3, +): + def wrapper(func: Any): + if asyncio.iscoroutinefunction(func): + + @functools.wraps(func) + @error_handler(func_name=func.__name__) + @tracing_request() + async def async_handler(*args, **kwargs): + _timeout = kwargs.get("timeout") + _retry_times = kwargs.get("retry_times") + _retry_on_rate_limit = kwargs.get("retry_on_rate_limit", True) + + retry_timeout = ( + _timeout + if _timeout is not None and isinstance(_timeout, (int, float)) + else None + ) + final_retry_times = ( + _retry_times + if _retry_times is not None and isinstance(_retry_times, int) + else retry_times + ) + counter = 1 + back_off = initial_back_off + start_time = time.time() + + def is_timeout(start_time: Optional[float] = None) -> bool: + if retry_timeout is not None: + return time.time() - start_time >= retry_timeout + return counter > final_retry_times + + to_msg = ( + f"[{func.__name__}] Retry timeout: {retry_timeout}s" + if retry_timeout is not None + else f"[{func.__name__}] Retry run out of {final_retry_times} retry times" + ) + + while True: + try: + return await func(*args, **kwargs) + except grpc.RpcError as e: + if e.code() in IGNORE_RETRY_CODES: + raise e from e + if is_timeout(start_time): + raise MilvusException( + e.code(), f"{to_msg}, message={e.details()}" + ) from e + + if counter > 3: + retry_msg = ( + f"[{func.__name__}] retry:{counter}, cost: {back_off:.2f}s, " + f"reason: <{e.__class__.__name__}: {e.code()}, {e.details()}>" + ) + LOGGER.info(retry_msg) + + await asyncio.sleep(back_off) + back_off = min(back_off * back_off_multiplier, max_back_off) + except MilvusException as e: + if is_timeout(start_time): + LOGGER.warning(WARNING_COLOR.format(to_msg)) + raise MilvusException( + code=e.code, message=f"{to_msg}, message={e.message}" + ) from e + if _retry_on_rate_limit and ( + e.code == ErrorCode.RATE_LIMIT + or e.compatible_code == common_pb2.RateLimit + ): + await asyncio.sleep(back_off) + back_off = min(back_off * back_off_multiplier, max_back_off) + else: + raise e from e + except Exception as e: + raise e from e + finally: + counter += 1 + + return async_handler + @functools.wraps(func) - def handler(self, *args, **kwargs): + @error_handler(func_name=func.__name__) + @tracing_request() + def handler(*args, **kwargs): + # This has to make sure every timeout parameter is passing + # throught kwargs form as `timeout=10` + _timeout = kwargs.get("timeout") + _retry_times = kwargs.get("retry_times") + _retry_on_rate_limit = kwargs.get("retry_on_rate_limit", True) + + retry_timeout = ( + _timeout if _timeout is not None and isinstance(_timeout, (int, float)) else None + ) + final_retry_times = ( + _retry_times + if _retry_times is not None and isinstance(_retry_times, int) + else retry_times + ) counter = 1 + back_off = initial_back_off + start_time = time.time() + + def timeout(start_time: Optional[float] = None) -> bool: + """If timeout is valid, use timeout as the retry limits, + If timeout is None, use final_retry_times as the retry limits. + """ + if retry_timeout is not None: + return time.time() - start_time >= retry_timeout + return counter > final_retry_times + + to_msg = ( + f"[{func.__name__}] Retry timeout: {retry_timeout}s" + if retry_timeout is not None + else f"[{func.__name__}] Retry run out of {final_retry_times} retry times" + ) + while True: try: - return func(self, *args, **kwargs) + return func(*args, **kwargs) except grpc.RpcError as e: - # DEADLINE_EXCEEDED means that the task wat not completed - # UNAVAILABLE means that the service is not reachable currently - # Reference: https://grpc.github.io/grpc/python/grpc.html#grpc-status-code - if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED and e.code() != grpc.StatusCode.UNAVAILABLE: - raise e - if not retry_on_deadline and e.code() == grpc.StatusCode.DEADLINE_EXCEEDED: - raise e - if counter >= retry_times: - if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED: - raise BaseException(Status.UNEXPECTED_ERROR, "rpc timeout") - raise e - time.sleep(wait) + # Do not retry on these codes + if e.code() in IGNORE_RETRY_CODES: + raise e from e + if timeout(start_time): + raise MilvusException(e.code, f"{to_msg}, message={e.details()}") from e + + if counter > 3: + retry_msg = ( + f"[{func.__name__}] retry:{counter}, cost: {back_off:.2f}s, " + f"reason: <{e.__class__.__name__}: {e.code()}, {e.details()}>" + ) + # retry msg uses info level + LOGGER.info(retry_msg) + + time.sleep(back_off) + back_off = min(back_off * back_off_multiplier, max_back_off) + except MilvusException as e: + if timeout(start_time): + LOGGER.warning(WARNING_COLOR.format(to_msg)) + raise MilvusException( + code=e.code, message=f"{to_msg}, message={e.message}" + ) from e + if _retry_on_rate_limit and ( + e.code == ErrorCode.RATE_LIMIT or e.compatible_code == common_pb2.RateLimit + ): + time.sleep(back_off) + back_off = min(back_off * back_off_multiplier, max_back_off) + else: + raise e from e except Exception as e: - raise e + raise e from e finally: counter += 1 return handler + + return wrapper + + +def error_handler(func_name: str = ""): + def wrapper(func: Callable): + if asyncio.iscoroutinefunction(func): + + @functools.wraps(func) + async def async_handler(*args, **kwargs): + inner_name = func_name or func.__name__ + record_dict = {} + try: + record_dict["RPC start"] = str(datetime.datetime.now()) + return await func(*args, **kwargs) + except MilvusException as e: + record_dict["RPC error"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"RPC error: [{inner_name}], {e}, \n" + f"Traceback:\n{tb_str}" + ) + raise e from e + except grpc.FutureTimeoutError as e: + record_dict["gRPC timeout"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"grpc Timeout: [{inner_name}], <{e.__class__.__name__}: " + f"{e.code()}, {e.details()}>, \n" + f"Traceback:\n{tb_str}" + ) + raise e from e + except grpc.RpcError as e: + record_dict["gRPC error"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"grpc RpcError: [{inner_name}], <{e.__class__.__name__}: " + f"{e.code()}, {e.details()}>, \n" + f"Traceback:\n{tb_str}" + ) + raise e from e + except Exception as e: + record_dict["Exception"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"Unexpected error: [{inner_name}], {e}, \n" + f"Traceback:\n{tb_str}" + ) + raise MilvusException(message=f"Unexpected error, message=<{e!s}>") from e + + return async_handler + + @functools.wraps(func) + def handler(*args, **kwargs): + inner_name = func_name + if inner_name == "": + inner_name = func.__name__ + record_dict = {} + try: + record_dict["RPC start"] = str(datetime.datetime.now()) + return func(*args, **kwargs) + except MilvusException as e: + record_dict["RPC error"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"RPC error: [{inner_name}], {e}, \n" + f"Traceback:\n{tb_str}" + ) + raise e from e + except grpc.FutureTimeoutError as e: + record_dict["gRPC timeout"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"grpc Timeout: [{inner_name}], <{e.__class__.__name__}: " + f"{e.code()}, {e.details()}>, \n" + f"Traceback:\n{tb_str}" + ) + raise e from e + except grpc.RpcError as e: + record_dict["gRPC error"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"grpc RpcError: [{inner_name}], <{e.__class__.__name__}: " + f"{e.code()}, {e.details()}>, \n" + f"Traceback:\n{tb_str}" + ) + raise e from e + except Exception as e: + record_dict["Exception"] = str(datetime.datetime.now()) + tb_str = traceback.format_exc() + LOGGER.error( + f"Unexpected error: [{inner_name}], {e}, \n" + f"Traceback:\n{tb_str}" + ) + raise MilvusException(message=f"Unexpected error, message=<{e!s}>") from e + + return handler + return wrapper -def error_handler(func): +def tracing_request(): + def wrapper(func: Callable): + if asyncio.iscoroutinefunction(func): + + @functools.wraps(func) + async def async_handler(self: Callable, *args, **kwargs): + level = kwargs.get("log-level", kwargs.get("log_level")) + if level: + self.set_onetime_loglevel(level) + return await func(self, *args, **kwargs) + + return async_handler + + @functools.wraps(func) + def handler(self: Callable, *args, **kwargs): + level = kwargs.get("log-level", kwargs.get("log_level")) + if level: + self.set_onetime_loglevel(level) + return func(self, *args, **kwargs) + + return handler + + return wrapper + + +def ignore_unimplemented(default_return_value: Any): + def wrapper(func: Callable): + @functools.wraps(func) + def handler(*args, **kwargs): + try: + return func(*args, **kwargs) + except grpc.RpcError as e: + if e.code() == grpc.StatusCode.UNIMPLEMENTED: + LOGGER.debug(f"{func.__name__} unimplemented, ignore it") + return default_return_value + raise e from e + except Exception as e: + raise e from e + + return handler + + return wrapper + + +def upgrade_reminder(func: Callable): @functools.wraps(func) def handler(*args, **kwargs): - record_dict = {} try: - record_dict["RPC start"] = str(datetime.datetime.now()) return func(*args, **kwargs) - except BaseException as e: - record_dict["RPC error"] = str(datetime.datetime.now()) - LOGGER.error(f"RPC error: [{func.__name__}], {e}, ") - raise e - except grpc.FutureTimeoutError as e: - record_dict["RPC timeout"] = str(datetime.datetime.now()) - LOGGER.error(f"Request timeout: {func.__name__}{record_dict}") - raise e except grpc.RpcError as e: - record_dict["RPC error"] = str(datetime.datetime.now()) - LOGGER.error(f"RPC error: {func.__name__}{record_dict}") - raise e + if e.code() == grpc.StatusCode.UNIMPLEMENTED: + msg = ( + "Incorrect port or sdk is incompatible with server, " + "please check your port or downgrade your sdk or upgrade your server" + ) + raise MilvusException(message=msg) from e + raise e from e except Exception as e: - record_dict["Exception"] = str(datetime.datetime.now()) - LOGGER.error(f"UnExcepted error: {func.__name__}{record_dict}") - raise e + raise e from e + return handler diff --git a/pymilvus/exceptions.py b/pymilvus/exceptions.py new file mode 100644 index 000000000..85d6d0da8 --- /dev/null +++ b/pymilvus/exceptions.py @@ -0,0 +1,283 @@ +# Copyright (C) 2019-2021 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +from enum import IntEnum + +from .grpc_gen import common_pb2 + + +class ErrorCode(IntEnum): + SUCCESS = 0 + UNEXPECTED_ERROR = 1 + RATE_LIMIT = 8 + FORCE_DENY = 9 + COLLECTION_NOT_FOUND = 100 + INDEX_NOT_FOUND = 700 + + +class MilvusException(Exception): + def __init__( + self, + code: int = ErrorCode.UNEXPECTED_ERROR, + message: str = "", + compatible_code: int = common_pb2.UnexpectedError, + ) -> None: + super().__init__() + self._code = code + self._message = message + # for compatibility, remove it after 2.4.0 + self._compatible_code = compatible_code + + @property + def code(self): + return self._code + + @property + def message(self): + return self._message + + @property + def compatible_code(self): + return self._compatible_code + + def __str__(self) -> str: + return f"<{type(self).__name__}: (code={self.code}, message={self.message})>" + + +class ParamError(MilvusException): + """Raise when params are incorrect""" + + +class ConnectError(MilvusException): + """Connect server fail""" + + +class MilvusUnavailableException(MilvusException): + """Raise when server's Unavaliable""" + + +class CollectionNotExistException(MilvusException): + """Raise when collections doesn't exist""" + + +class DescribeCollectionException(MilvusException): + """Raise when fail to describe collection""" + + +class PartitionAlreadyExistException(MilvusException): + """Raise when create an exsiting partition""" + + +class IndexNotExistException(MilvusException): + """Raise when index doesn't exist""" + + +class AmbiguousIndexName(MilvusException): + """Raise multiple index exist, need specify index_name""" + + +class CannotInferSchemaException(MilvusException): + """Raise when cannot trasfer dataframe to schema""" + + +class SchemaNotReadyException(MilvusException): + """Raise when schema is wrong""" + + +class DataTypeNotMatchException(MilvusException): + """Raise when datatype dosen't match""" + + +class DataTypeNotSupportException(MilvusException): + """Raise when datatype isn't supported""" + + +class DataNotMatchException(MilvusException): + """Raise when insert data isn't match with schema""" + + +class ConnectionNotExistException(MilvusException): + """Raise when connections doesn't exist""" + + +class ConnectionConfigException(MilvusException): + """Raise when configs of connection are invalid""" + + +class PrimaryKeyException(MilvusException): + """Raise when primarykey are invalid""" + + +class PartitionKeyException(MilvusException): + """Raise when partitionkey are invalid""" + + +class ClusteringKeyException(MilvusException): + """Raise when clusteringkey are invalid""" + + +class FieldsTypeException(MilvusException): + """Raise when fields is invalid""" + + +class FunctionsTypeException(MilvusException): + """Raise when functions are invalid""" + + +class FieldTypeException(MilvusException): + """Raise when one field is invalid""" + + +class AutoIDException(MilvusException): + """Raise when autoID is invalid""" + + +class InvalidConsistencyLevel(MilvusException): + """Raise when consistency level is invalid""" + + +class ServerVersionIncompatibleException(MilvusException): + """Raise when server version is incompatible""" + + +class ExceptionsMessage: + NoHostPort = "connection configuration must contain 'host' and 'port'." + HostType = "Type of 'host' must be str." + PortType = "Type of 'port' must be str or int." + ConnDiffConf = ( + "Alias of %r already creating connections, " + "but the configure is not the same as passed in." + ) + AliasType = "Alias should be string, but %r is given." + ConnLackConf = "You need to pass in the configuration of the connection named %r ." + ConnectFirst = "should create connection first." + CollectionNotExistNoSchema = "Collection %r not exist, or you can pass in schema to create one." + NoSchema = "Should be passed into the schema." + EmptySchema = "The field of the schema cannot be empty." + SchemaType = "Schema type must be schema.CollectionSchema." + SchemaInconsistent = ( + "The collection already exist, but the schema is not the same as the schema passed in." + ) + AutoIDWithData = "Auto_id is True, primary field should not have data." + AutoIDType = "Param auto_id must be bool type." + NumPartitionsType = "Param num_partitions must be int type." + AutoIDInconsistent = ( + "The auto_id of the collection is inconsistent " + "with the auto_id of the primary key field." + ) + AutoIDIllegalRanges = "The auto-generated id ranges should be pairs." + ConsistencyLevelInconsistent = ( + "The parameter consistency_level is inconsistent with that of existed collection." + ) + AutoIDOnlyOnPK = "The auto_id can only be specified on the primary key field" + AutoIDFieldType = ( + "The auto_id can only be specified on field with DataType.INT64 and DataType.VARCHAR." + ) + NumberRowsInvalid = "Must pass in at least one column" + FieldsNumInconsistent = "The data fields number is not match with schema." + NoVector = "No vector field is found." + NoneDataFrame = "Dataframe can not be None." + DataFrameType = "Data type must be pandas.DataFrame." + NoPrimaryKey = "Schema must have a primary key field." + PrimaryKeyNotExist = "Primary field must in dataframe." + PrimaryKeyOnlyOne = "Expected only one primary key field, got [%s, %s, ...]." + PartitionKeyOnlyOne = "Expected only one partition key field, got [%s, %s, ...]." + PrimaryKeyType = "Primary key type must be DataType.INT64 or DataType.VARCHAR." + PartitionKeyType = "Partition key field type must be DataType.INT64 or DataType.VARCHAR." + PartitionKeyNotPrimary = "Partition key field should not be primary field" + IsPrimaryType = "Param is_primary must be bool type." + PrimaryFieldType = "Param primary_field must be int or str type." + PartitionKeyFieldType = "Param partition_key_field must be str type." + PartitionKeyFieldNotExist = "the specified partition key field {%s} not exist" + IsPartitionKeyType = "Param is_partition_key must be bool type." + DataTypeInconsistent = ( + "The Input data type is inconsistent with defined schema, please check it." + ) + FieldDataInconsistent = "The Input data type is inconsistent with defined schema, {%s} field should be a %s, but got a {%s} instead." + DataTypeNotSupport = "Data type is not support." + DataLengthsInconsistent = "Arrays must all be same length." + DataFrameInvalid = "Cannot infer schema from empty dataframe." + NdArrayNotSupport = "Data type not support numpy.ndarray." + TypeOfDataAndSchemaInconsistent = "The types of schema and data do not match." + PartitionAlreadyExist = "Partition already exist." + IndexNotExist = "Index doesn't exist." + CollectionType = "The type of collection must be pymilvus.Collection." + FieldsType = "The fields of schema must be type list." + FunctionsType = "The functions of collection must be type list." + FunctionIncorrectInputOutputType = "The type of function input and output must be str." + FunctionInvalidOutputField = ( + "The output field must not be primary key, partition key, clustering key." + ) + FunctionDuplicateInputs = "Duplicate input field names are not allowed in function." + FunctionDuplicateOutputs = "Duplicate output field names are not allowed in function." + FunctionCommonInputOutput = "Input and output field names must be different." + BM25FunctionIncorrectInputOutputCount = ( + "BM25 function must have exact 1 input and 1 output field." + ) + TextEmbeddingFunctionIncorrectInputOutputCount = ( + "TextEmbedding function must have exact 1 input and 1 output field." + ) + TextEmbeddingFunctionIncorrectInputFieldType = ( + "TextEmbedding function input field must be VARCHAR." + ) + TextEmbeddingFunctionIncorrectOutputFieldType = ( + "TextEmbedding function output field must be FLOAT_VECTOR or INT8_VECTOR." + ) + BM25FunctionIncorrectInputFieldType = "BM25 function input field must be VARCHAR." + BM25FunctionIncorrectOutputFieldType = "BM25 function output field must be SPARSE_FLOAT_VECTOR." + FunctionMissingInputField = "Function input field not found in collection schema." + FunctionMissingOutputField = "Function output field not found in collection schema." + UnknownFunctionType = "Unknown function type." + FunctionIncorrectType = "The function of schema type must be Function." + FieldType = "The field of schema type must be FieldSchema." + FieldDtype = "Field dtype must be of DataType" + ExprType = "The type of expr must be string ,but %r is given." + EnvConfigErr = "Environment variable %s has a wrong format, please check it: %s" + AmbiguousIndexName = "There are multiple indexes, please specify the index_name." + InsertUnexpectedField = ( + "Attempt to insert an unexpected field `%s` to collection without enabling dynamic field" + ) + InsertUnexpectedFunctionOutputField = ( + "Attempt to insert an unexpected function output field `%s` to collection" + ) + InsertMissedField = ( + "Insert missed an field `%s` to collection without set nullable==true or set default_value" + ) + InsertFieldsLenInconsistent = ( + "The data fields length is inconsistent. previous length is %d, current length is %d" + ) + UpsertAutoIDTrue = "Upsert don't support autoid == true" + AmbiguousDeleteFilterParam = ( + "Ambiguous filter parameter, only one deletion condition can be specified." + ) + AmbiguousQueryFilterParam = ( + "Ambiguous parameter, either ids or filter should be specified, cannot support both." + ) + JSONKeyMustBeStr = "JSON key must be str." + ClusteringKeyType = ( + "Clustering key field type must be DataType.INT8, DataType.INT16, " + "DataType.INT32, DataType.INT64, DataType.FLOAT, DataType.DOUBLE, " + "DataType.VARCHAR, DataType.FLOAT_VECTOR." + ) + ClusteringKeyFieldNotExist = "the specified clustering key field {%s} not exist" + ClusteringKeyOnlyOne = "Expected only one clustering key field, got [%s, %s, ...]." + IsClusteringKeyType = "Param is_clustering_key must be bool type." + ClusteringKeyFieldType = "Param clustering_key_field must be str type." + UpsertPrimaryKeyEmpty = "Upsert need to assign pk." + DefaultValueInvalid = ( + "Default value cannot be None for a field that is defined as nullable == false." + ) + SearchIteratorV2FallbackWarning = """ + The server does not support Search Iterator V2. The search_iterator (v1) is used instead. + Please upgrade your Milvus server version to 2.5.2 and later, + or use a pymilvus version before 2.5.3 (excluded) to avoid this issue. + """ diff --git a/pymilvus/grpc_gen/__init__.py b/pymilvus/grpc_gen/__init__.py index b99f6fb47..1243d0194 100644 --- a/pymilvus/grpc_gen/__init__.py +++ b/pymilvus/grpc_gen/__init__.py @@ -1,8 +1,9 @@ -# -*- coding: utf-8 -*- +from . import schema_pb2, milvus_pb2, common_pb2, feder_pb2, milvus_pb2_grpc __all__ = [ - 'milvus_pb2', - 'common_pb2', - 'schema_pb2', - 'milvus_pb2_grpc', + "milvus_pb2", + "common_pb2", + "feder_pb2", + "schema_pb2", + "milvus_pb2_grpc", ] diff --git a/pymilvus/grpc_gen/common_pb2.py b/pymilvus/grpc_gen/common_pb2.py index f6d2fd4d0..3fedcf0ba 100644 --- a/pymilvus/grpc_gen/common_pb2.py +++ b/pymilvus/grpc_gen/common_pb2.py @@ -1,1167 +1,146 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: common.proto +# Protobuf Python Version: 5.27.2 """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'common.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='common.proto', - package='milvus.proto.common', - syntax='proto3', - serialized_options=b'Z3github.com/milvus-io/milvus/internal/proto/commonpb', - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x0c\x63ommon.proto\x12\x13milvus.proto.common\"L\n\x06Status\x12\x32\n\nerror_code\x18\x01 \x01(\x0e\x32\x1e.milvus.proto.common.ErrorCode\x12\x0e\n\x06reason\x18\x02 \x01(\t\"*\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"(\n\x0bKeyDataPair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x15\n\x04\x42lob\x12\r\n\x05value\x18\x01 \x01(\x0c\"#\n\x07\x41\x64\x64ress\x12\n\n\x02ip\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x03\"m\n\x07MsgBase\x12.\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1c.milvus.proto.common.MsgType\x12\r\n\x05msgID\x18\x02 \x01(\x03\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12\x10\n\x08sourceID\x18\x04 \x01(\x03\"7\n\tMsgHeader\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\"M\n\x0c\x44MLMsgHeader\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tshardName\x18\x02 \x01(\t*\xba\x04\n\tErrorCode\x12\x0b\n\x07Success\x10\x00\x12\x13\n\x0fUnexpectedError\x10\x01\x12\x11\n\rConnectFailed\x10\x02\x12\x14\n\x10PermissionDenied\x10\x03\x12\x17\n\x13\x43ollectionNotExists\x10\x04\x12\x13\n\x0fIllegalArgument\x10\x05\x12\x14\n\x10IllegalDimension\x10\x07\x12\x14\n\x10IllegalIndexType\x10\x08\x12\x19\n\x15IllegalCollectionName\x10\t\x12\x0f\n\x0bIllegalTOPK\x10\n\x12\x14\n\x10IllegalRowRecord\x10\x0b\x12\x13\n\x0fIllegalVectorID\x10\x0c\x12\x17\n\x13IllegalSearchResult\x10\r\x12\x10\n\x0c\x46ileNotFound\x10\x0e\x12\x0e\n\nMetaFailed\x10\x0f\x12\x0f\n\x0b\x43\x61\x63heFailed\x10\x10\x12\x16\n\x12\x43\x61nnotCreateFolder\x10\x11\x12\x14\n\x10\x43\x61nnotCreateFile\x10\x12\x12\x16\n\x12\x43\x61nnotDeleteFolder\x10\x13\x12\x14\n\x10\x43\x61nnotDeleteFile\x10\x14\x12\x13\n\x0f\x42uildIndexError\x10\x15\x12\x10\n\x0cIllegalNLIST\x10\x16\x12\x15\n\x11IllegalMetricType\x10\x17\x12\x0f\n\x0bOutOfMemory\x10\x18\x12\x11\n\rIndexNotExist\x10\x19\x12\x13\n\x0f\x45mptyCollection\x10\x1a\x12\x12\n\rDDRequestRace\x10\xe8\x07*X\n\nIndexState\x12\x12\n\x0eIndexStateNone\x10\x00\x12\x0c\n\x08Unissued\x10\x01\x12\x0e\n\nInProgress\x10\x02\x12\x0c\n\x08\x46inished\x10\x03\x12\n\n\x06\x46\x61iled\x10\x04*s\n\x0cSegmentState\x12\x14\n\x10SegmentStateNone\x10\x00\x12\x0c\n\x08NotExist\x10\x01\x12\x0b\n\x07Growing\x10\x02\x12\n\n\x06Sealed\x10\x03\x12\x0b\n\x07\x46lushed\x10\x04\x12\x0c\n\x08\x46lushing\x10\x05\x12\x0b\n\x07\x44ropped\x10\x06*\x93\t\n\x07MsgType\x12\r\n\tUndefined\x10\x00\x12\x14\n\x10\x43reateCollection\x10\x64\x12\x12\n\x0e\x44ropCollection\x10\x65\x12\x11\n\rHasCollection\x10\x66\x12\x16\n\x12\x44\x65scribeCollection\x10g\x12\x13\n\x0fShowCollections\x10h\x12\x14\n\x10GetSystemConfigs\x10i\x12\x12\n\x0eLoadCollection\x10j\x12\x15\n\x11ReleaseCollection\x10k\x12\x0f\n\x0b\x43reateAlias\x10l\x12\r\n\tDropAlias\x10m\x12\x0e\n\nAlterAlias\x10n\x12\x14\n\x0f\x43reatePartition\x10\xc8\x01\x12\x12\n\rDropPartition\x10\xc9\x01\x12\x11\n\x0cHasPartition\x10\xca\x01\x12\x16\n\x11\x44\x65scribePartition\x10\xcb\x01\x12\x13\n\x0eShowPartitions\x10\xcc\x01\x12\x13\n\x0eLoadPartitions\x10\xcd\x01\x12\x16\n\x11ReleasePartitions\x10\xce\x01\x12\x11\n\x0cShowSegments\x10\xfa\x01\x12\x14\n\x0f\x44\x65scribeSegment\x10\xfb\x01\x12\x11\n\x0cLoadSegments\x10\xfc\x01\x12\x14\n\x0fReleaseSegments\x10\xfd\x01\x12\x14\n\x0fHandoffSegments\x10\xfe\x01\x12\x18\n\x13LoadBalanceSegments\x10\xff\x01\x12\x10\n\x0b\x43reateIndex\x10\xac\x02\x12\x12\n\rDescribeIndex\x10\xad\x02\x12\x0e\n\tDropIndex\x10\xae\x02\x12\x0b\n\x06Insert\x10\x90\x03\x12\x0b\n\x06\x44\x65lete\x10\x91\x03\x12\n\n\x05\x46lush\x10\x92\x03\x12\x0b\n\x06Search\x10\xf4\x03\x12\x11\n\x0cSearchResult\x10\xf5\x03\x12\x12\n\rGetIndexState\x10\xf6\x03\x12\x1a\n\x15GetIndexBuildProgress\x10\xf7\x03\x12\x1c\n\x17GetCollectionStatistics\x10\xf8\x03\x12\x1b\n\x16GetPartitionStatistics\x10\xf9\x03\x12\r\n\x08Retrieve\x10\xfa\x03\x12\x13\n\x0eRetrieveResult\x10\xfb\x03\x12\x14\n\x0fWatchDmChannels\x10\xfc\x03\x12\x15\n\x10RemoveDmChannels\x10\xfd\x03\x12\x17\n\x12WatchQueryChannels\x10\xfe\x03\x12\x18\n\x13RemoveQueryChannels\x10\xff\x03\x12\x1d\n\x18SealedSegmentsChangeInfo\x10\x80\x04\x12\x17\n\x12WatchDeltaChannels\x10\x81\x04\x12\x10\n\x0bSegmentInfo\x10\xd8\x04\x12\x0f\n\nSystemInfo\x10\xd9\x04\x12\x14\n\x0fGetRecoveryInfo\x10\xda\x04\x12\r\n\x08TimeTick\x10\xb0\t\x12\x13\n\x0eQueryNodeStats\x10\xb1\t\x12\x0e\n\tLoadIndex\x10\xb2\t\x12\x0e\n\tRequestID\x10\xb3\t\x12\x0f\n\nRequestTSO\x10\xb4\t\x12\x14\n\x0f\x41llocateSegment\x10\xb5\t\x12\x16\n\x11SegmentStatistics\x10\xb6\t\x12\x15\n\x10SegmentFlushDone\x10\xb7\t\x12\x0f\n\nDataNodeTt\x10\xb8\t*\"\n\x07\x44slType\x12\x07\n\x03\x44sl\x10\x00\x12\x0e\n\nBoolExprV1\x10\x01*B\n\x0f\x43ompactionState\x12\x11\n\rUndefiedState\x10\x00\x12\r\n\tExecuting\x10\x01\x12\r\n\tCompleted\x10\x02*X\n\x10\x43onsistencyLevel\x12\n\n\x06Strong\x10\x00\x12\x0b\n\x07Session\x10\x01\x12\x0b\n\x07\x42ounded\x10\x02\x12\x0e\n\nEventually\x10\x03\x12\x0e\n\nCustomized\x10\x04\x42\x35Z3github.com/milvus-io/milvus/internal/proto/commonpbb\x06proto3' -) - -_ERRORCODE = _descriptor.EnumDescriptor( - name='ErrorCode', - full_name='milvus.proto.common.ErrorCode', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='Success', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='UnexpectedError', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ConnectFailed', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='PermissionDenied', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CollectionNotExists', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalArgument', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalDimension', index=6, number=7, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalIndexType', index=7, number=8, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalCollectionName', index=8, number=9, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalTOPK', index=9, number=10, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalRowRecord', index=10, number=11, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalVectorID', index=11, number=12, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalSearchResult', index=12, number=13, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FileNotFound', index=13, number=14, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MetaFailed', index=14, number=15, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CacheFailed', index=15, number=16, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CannotCreateFolder', index=16, number=17, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CannotCreateFile', index=17, number=18, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CannotDeleteFolder', index=18, number=19, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CannotDeleteFile', index=19, number=20, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='BuildIndexError', index=20, number=21, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalNLIST', index=21, number=22, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IllegalMetricType', index=22, number=23, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='OutOfMemory', index=23, number=24, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IndexNotExist', index=24, number=25, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='EmptyCollection', index=25, number=26, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DDRequestRace', index=26, number=1000, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=509, - serialized_end=1079, -) -_sym_db.RegisterEnumDescriptor(_ERRORCODE) - -ErrorCode = enum_type_wrapper.EnumTypeWrapper(_ERRORCODE) -_INDEXSTATE = _descriptor.EnumDescriptor( - name='IndexState', - full_name='milvus.proto.common.IndexState', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='IndexStateNone', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Unissued', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='InProgress', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Finished', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Failed', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=1081, - serialized_end=1169, -) -_sym_db.RegisterEnumDescriptor(_INDEXSTATE) - -IndexState = enum_type_wrapper.EnumTypeWrapper(_INDEXSTATE) -_SEGMENTSTATE = _descriptor.EnumDescriptor( - name='SegmentState', - full_name='milvus.proto.common.SegmentState', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='SegmentStateNone', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='NotExist', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Growing', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Sealed', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Flushed', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Flushing', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Dropped', index=6, number=6, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=1171, - serialized_end=1286, -) -_sym_db.RegisterEnumDescriptor(_SEGMENTSTATE) - -SegmentState = enum_type_wrapper.EnumTypeWrapper(_SEGMENTSTATE) -_MSGTYPE = _descriptor.EnumDescriptor( - name='MsgType', - full_name='milvus.proto.common.MsgType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='Undefined', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CreateCollection', index=1, number=100, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DropCollection', index=2, number=101, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='HasCollection', index=3, number=102, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DescribeCollection', index=4, number=103, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ShowCollections', index=5, number=104, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='GetSystemConfigs', index=6, number=105, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='LoadCollection', index=7, number=106, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ReleaseCollection', index=8, number=107, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CreateAlias', index=9, number=108, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DropAlias', index=10, number=109, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='AlterAlias', index=11, number=110, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CreatePartition', index=12, number=200, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DropPartition', index=13, number=201, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='HasPartition', index=14, number=202, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DescribePartition', index=15, number=203, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ShowPartitions', index=16, number=204, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='LoadPartitions', index=17, number=205, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ReleasePartitions', index=18, number=206, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ShowSegments', index=19, number=250, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DescribeSegment', index=20, number=251, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='LoadSegments', index=21, number=252, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ReleaseSegments', index=22, number=253, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='HandoffSegments', index=23, number=254, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='LoadBalanceSegments', index=24, number=255, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='CreateIndex', index=25, number=300, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DescribeIndex', index=26, number=301, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DropIndex', index=27, number=302, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Insert', index=28, number=400, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Delete', index=29, number=401, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Flush', index=30, number=402, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Search', index=31, number=500, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SearchResult', index=32, number=501, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='GetIndexState', index=33, number=502, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='GetIndexBuildProgress', index=34, number=503, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='GetCollectionStatistics', index=35, number=504, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='GetPartitionStatistics', index=36, number=505, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Retrieve', index=37, number=506, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RetrieveResult', index=38, number=507, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WatchDmChannels', index=39, number=508, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RemoveDmChannels', index=40, number=509, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WatchQueryChannels', index=41, number=510, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RemoveQueryChannels', index=42, number=511, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SealedSegmentsChangeInfo', index=43, number=512, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WatchDeltaChannels', index=44, number=513, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SegmentInfo', index=45, number=600, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SystemInfo', index=46, number=601, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='GetRecoveryInfo', index=47, number=602, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='TimeTick', index=48, number=1200, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='QueryNodeStats', index=49, number=1201, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='LoadIndex', index=50, number=1202, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RequestID', index=51, number=1203, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RequestTSO', index=52, number=1204, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='AllocateSegment', index=53, number=1205, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SegmentStatistics', index=54, number=1206, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='SegmentFlushDone', index=55, number=1207, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DataNodeTt', index=56, number=1208, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=1289, - serialized_end=2460, -) -_sym_db.RegisterEnumDescriptor(_MSGTYPE) - -MsgType = enum_type_wrapper.EnumTypeWrapper(_MSGTYPE) -_DSLTYPE = _descriptor.EnumDescriptor( - name='DslType', - full_name='milvus.proto.common.DslType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='Dsl', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='BoolExprV1', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2462, - serialized_end=2496, -) -_sym_db.RegisterEnumDescriptor(_DSLTYPE) - -DslType = enum_type_wrapper.EnumTypeWrapper(_DSLTYPE) -_COMPACTIONSTATE = _descriptor.EnumDescriptor( - name='CompactionState', - full_name='milvus.proto.common.CompactionState', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='UndefiedState', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Executing', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Completed', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2498, - serialized_end=2564, -) -_sym_db.RegisterEnumDescriptor(_COMPACTIONSTATE) - -CompactionState = enum_type_wrapper.EnumTypeWrapper(_COMPACTIONSTATE) -_CONSISTENCYLEVEL = _descriptor.EnumDescriptor( - name='ConsistencyLevel', - full_name='milvus.proto.common.ConsistencyLevel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='Strong', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Session', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Bounded', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Eventually', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Customized', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2566, - serialized_end=2654, -) -_sym_db.RegisterEnumDescriptor(_CONSISTENCYLEVEL) - -ConsistencyLevel = enum_type_wrapper.EnumTypeWrapper(_CONSISTENCYLEVEL) -Success = 0 -UnexpectedError = 1 -ConnectFailed = 2 -PermissionDenied = 3 -CollectionNotExists = 4 -IllegalArgument = 5 -IllegalDimension = 7 -IllegalIndexType = 8 -IllegalCollectionName = 9 -IllegalTOPK = 10 -IllegalRowRecord = 11 -IllegalVectorID = 12 -IllegalSearchResult = 13 -FileNotFound = 14 -MetaFailed = 15 -CacheFailed = 16 -CannotCreateFolder = 17 -CannotCreateFile = 18 -CannotDeleteFolder = 19 -CannotDeleteFile = 20 -BuildIndexError = 21 -IllegalNLIST = 22 -IllegalMetricType = 23 -OutOfMemory = 24 -IndexNotExist = 25 -EmptyCollection = 26 -DDRequestRace = 1000 -IndexStateNone = 0 -Unissued = 1 -InProgress = 2 -Finished = 3 -Failed = 4 -SegmentStateNone = 0 -NotExist = 1 -Growing = 2 -Sealed = 3 -Flushed = 4 -Flushing = 5 -Dropped = 6 -Undefined = 0 -CreateCollection = 100 -DropCollection = 101 -HasCollection = 102 -DescribeCollection = 103 -ShowCollections = 104 -GetSystemConfigs = 105 -LoadCollection = 106 -ReleaseCollection = 107 -CreateAlias = 108 -DropAlias = 109 -AlterAlias = 110 -CreatePartition = 200 -DropPartition = 201 -HasPartition = 202 -DescribePartition = 203 -ShowPartitions = 204 -LoadPartitions = 205 -ReleasePartitions = 206 -ShowSegments = 250 -DescribeSegment = 251 -LoadSegments = 252 -ReleaseSegments = 253 -HandoffSegments = 254 -LoadBalanceSegments = 255 -CreateIndex = 300 -DescribeIndex = 301 -DropIndex = 302 -Insert = 400 -Delete = 401 -Flush = 402 -Search = 500 -SearchResult = 501 -GetIndexState = 502 -GetIndexBuildProgress = 503 -GetCollectionStatistics = 504 -GetPartitionStatistics = 505 -Retrieve = 506 -RetrieveResult = 507 -WatchDmChannels = 508 -RemoveDmChannels = 509 -WatchQueryChannels = 510 -RemoveQueryChannels = 511 -SealedSegmentsChangeInfo = 512 -WatchDeltaChannels = 513 -SegmentInfo = 600 -SystemInfo = 601 -GetRecoveryInfo = 602 -TimeTick = 1200 -QueryNodeStats = 1201 -LoadIndex = 1202 -RequestID = 1203 -RequestTSO = 1204 -AllocateSegment = 1205 -SegmentStatistics = 1206 -SegmentFlushDone = 1207 -DataNodeTt = 1208 -Dsl = 0 -BoolExprV1 = 1 -UndefiedState = 0 -Executing = 1 -Completed = 2 -Strong = 0 -Session = 1 -Bounded = 2 -Eventually = 3 -Customized = 4 - - - -_STATUS = _descriptor.Descriptor( - name='Status', - full_name='milvus.proto.common.Status', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='error_code', full_name='milvus.proto.common.Status.error_code', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='reason', full_name='milvus.proto.common.Status.reason', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=37, - serialized_end=113, -) - - -_KEYVALUEPAIR = _descriptor.Descriptor( - name='KeyValuePair', - full_name='milvus.proto.common.KeyValuePair', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='milvus.proto.common.KeyValuePair.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='milvus.proto.common.KeyValuePair.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=115, - serialized_end=157, -) - - -_KEYDATAPAIR = _descriptor.Descriptor( - name='KeyDataPair', - full_name='milvus.proto.common.KeyDataPair', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='milvus.proto.common.KeyDataPair.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.common.KeyDataPair.data', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=159, - serialized_end=199, -) - - -_BLOB = _descriptor.Descriptor( - name='Blob', - full_name='milvus.proto.common.Blob', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='value', full_name='milvus.proto.common.Blob.value', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=201, - serialized_end=222, -) - - -_ADDRESS = _descriptor.Descriptor( - name='Address', - full_name='milvus.proto.common.Address', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='ip', full_name='milvus.proto.common.Address.ip', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port', full_name='milvus.proto.common.Address.port', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=224, - serialized_end=259, -) - - -_MSGBASE = _descriptor.Descriptor( - name='MsgBase', - full_name='milvus.proto.common.MsgBase', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='msg_type', full_name='milvus.proto.common.MsgBase.msg_type', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='msgID', full_name='milvus.proto.common.MsgBase.msgID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='milvus.proto.common.MsgBase.timestamp', index=2, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='sourceID', full_name='milvus.proto.common.MsgBase.sourceID', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=261, - serialized_end=370, -) - - -_MSGHEADER = _descriptor.Descriptor( - name='MsgHeader', - full_name='milvus.proto.common.MsgHeader', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.common.MsgHeader.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=372, - serialized_end=427, -) - - -_DMLMSGHEADER = _descriptor.Descriptor( - name='DMLMsgHeader', - full_name='milvus.proto.common.DMLMsgHeader', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.common.DMLMsgHeader.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='shardName', full_name='milvus.proto.common.DMLMsgHeader.shardName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=429, - serialized_end=506, -) - -_STATUS.fields_by_name['error_code'].enum_type = _ERRORCODE -_MSGBASE.fields_by_name['msg_type'].enum_type = _MSGTYPE -_MSGHEADER.fields_by_name['base'].message_type = _MSGBASE -_DMLMSGHEADER.fields_by_name['base'].message_type = _MSGBASE -DESCRIPTOR.message_types_by_name['Status'] = _STATUS -DESCRIPTOR.message_types_by_name['KeyValuePair'] = _KEYVALUEPAIR -DESCRIPTOR.message_types_by_name['KeyDataPair'] = _KEYDATAPAIR -DESCRIPTOR.message_types_by_name['Blob'] = _BLOB -DESCRIPTOR.message_types_by_name['Address'] = _ADDRESS -DESCRIPTOR.message_types_by_name['MsgBase'] = _MSGBASE -DESCRIPTOR.message_types_by_name['MsgHeader'] = _MSGHEADER -DESCRIPTOR.message_types_by_name['DMLMsgHeader'] = _DMLMSGHEADER -DESCRIPTOR.enum_types_by_name['ErrorCode'] = _ERRORCODE -DESCRIPTOR.enum_types_by_name['IndexState'] = _INDEXSTATE -DESCRIPTOR.enum_types_by_name['SegmentState'] = _SEGMENTSTATE -DESCRIPTOR.enum_types_by_name['MsgType'] = _MSGTYPE -DESCRIPTOR.enum_types_by_name['DslType'] = _DSLTYPE -DESCRIPTOR.enum_types_by_name['CompactionState'] = _COMPACTIONSTATE -DESCRIPTOR.enum_types_by_name['ConsistencyLevel'] = _CONSISTENCYLEVEL -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), { - 'DESCRIPTOR' : _STATUS, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.Status) - }) -_sym_db.RegisterMessage(Status) - -KeyValuePair = _reflection.GeneratedProtocolMessageType('KeyValuePair', (_message.Message,), { - 'DESCRIPTOR' : _KEYVALUEPAIR, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.KeyValuePair) - }) -_sym_db.RegisterMessage(KeyValuePair) - -KeyDataPair = _reflection.GeneratedProtocolMessageType('KeyDataPair', (_message.Message,), { - 'DESCRIPTOR' : _KEYDATAPAIR, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.KeyDataPair) - }) -_sym_db.RegisterMessage(KeyDataPair) - -Blob = _reflection.GeneratedProtocolMessageType('Blob', (_message.Message,), { - 'DESCRIPTOR' : _BLOB, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.Blob) - }) -_sym_db.RegisterMessage(Blob) - -Address = _reflection.GeneratedProtocolMessageType('Address', (_message.Message,), { - 'DESCRIPTOR' : _ADDRESS, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.Address) - }) -_sym_db.RegisterMessage(Address) - -MsgBase = _reflection.GeneratedProtocolMessageType('MsgBase', (_message.Message,), { - 'DESCRIPTOR' : _MSGBASE, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.MsgBase) - }) -_sym_db.RegisterMessage(MsgBase) - -MsgHeader = _reflection.GeneratedProtocolMessageType('MsgHeader', (_message.Message,), { - 'DESCRIPTOR' : _MSGHEADER, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.MsgHeader) - }) -_sym_db.RegisterMessage(MsgHeader) - -DMLMsgHeader = _reflection.GeneratedProtocolMessageType('DMLMsgHeader', (_message.Message,), { - 'DESCRIPTOR' : _DMLMSGHEADER, - '__module__' : 'common_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.common.DMLMsgHeader) - }) -_sym_db.RegisterMessage(DMLMsgHeader) - - -DESCRIPTOR._options = None +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x63ommon.proto\x12\x13milvus.proto.common\x1a google/protobuf/descriptor.proto\"\xf3\x01\n\x06Status\x12\x36\n\nerror_code\x18\x01 \x01(\x0e\x32\x1e.milvus.proto.common.ErrorCodeB\x02\x18\x01\x12\x0e\n\x06reason\x18\x02 \x01(\t\x12\x0c\n\x04\x63ode\x18\x03 \x01(\x05\x12\x11\n\tretriable\x18\x04 \x01(\x08\x12\x0e\n\x06\x64\x65tail\x18\x05 \x01(\t\x12>\n\nextra_info\x18\x06 \x03(\x0b\x32*.milvus.proto.common.Status.ExtraInfoEntry\x1a\x30\n\x0e\x45xtraInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"*\n\x0cKeyValuePair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"(\n\x0bKeyDataPair\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x15\n\x04\x42lob\x12\r\n\x05value\x18\x01 \x01(\x0c\"c\n\x10PlaceholderValue\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x32\n\x04type\x18\x02 \x01(\x0e\x32$.milvus.proto.common.PlaceholderType\x12\x0e\n\x06values\x18\x03 \x03(\x0c\"O\n\x10PlaceholderGroup\x12;\n\x0cplaceholders\x18\x01 \x03(\x0b\x32%.milvus.proto.common.PlaceholderValue\"#\n\x07\x41\x64\x64ress\x12\n\n\x02ip\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\x03\"\xaf\x02\n\x07MsgBase\x12.\n\x08msg_type\x18\x01 \x01(\x0e\x32\x1c.milvus.proto.common.MsgType\x12\r\n\x05msgID\x18\x02 \x01(\x03\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12\x10\n\x08sourceID\x18\x04 \x01(\x03\x12\x10\n\x08targetID\x18\x05 \x01(\x03\x12@\n\nproperties\x18\x06 \x03(\x0b\x32,.milvus.proto.common.MsgBase.PropertiesEntry\x12\x39\n\rreplicateInfo\x18\x07 \x01(\x0b\x32\".milvus.proto.common.ReplicateInfo\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"O\n\rReplicateInfo\x12\x13\n\x0bisReplicate\x18\x01 \x01(\x08\x12\x14\n\x0cmsgTimestamp\x18\x02 \x01(\x04\x12\x13\n\x0breplicateID\x18\x03 \x01(\t\"7\n\tMsgHeader\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\"M\n\x0c\x44MLMsgHeader\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tshardName\x18\x02 \x01(\t\"\xbb\x01\n\x0cPrivilegeExt\x12\x34\n\x0bobject_type\x18\x01 \x01(\x0e\x32\x1f.milvus.proto.common.ObjectType\x12>\n\x10object_privilege\x18\x02 \x01(\x0e\x32$.milvus.proto.common.ObjectPrivilege\x12\x19\n\x11object_name_index\x18\x03 \x01(\x05\x12\x1a\n\x12object_name_indexs\x18\x04 \x01(\x05\"2\n\x0cSegmentStats\x12\x11\n\tSegmentID\x18\x01 \x01(\x03\x12\x0f\n\x07NumRows\x18\x02 \x01(\x03\"\xd5\x01\n\nClientInfo\x12\x10\n\x08sdk_type\x18\x01 \x01(\t\x12\x13\n\x0bsdk_version\x18\x02 \x01(\t\x12\x12\n\nlocal_time\x18\x03 \x01(\t\x12\x0c\n\x04user\x18\x04 \x01(\t\x12\x0c\n\x04host\x18\x05 \x01(\t\x12?\n\x08reserved\x18\x06 \x03(\x0b\x32-.milvus.proto.common.ClientInfo.ReservedEntry\x1a/\n\rReservedEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xe3\x01\n\nServerInfo\x12\x12\n\nbuild_tags\x18\x01 \x01(\t\x12\x12\n\nbuild_time\x18\x02 \x01(\t\x12\x12\n\ngit_commit\x18\x03 \x01(\t\x12\x12\n\ngo_version\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65ploy_mode\x18\x05 \x01(\t\x12?\n\x08reserved\x18\x06 \x03(\x0b\x32-.milvus.proto.common.ServerInfo.ReservedEntry\x1a/\n\rReservedEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\">\n\x08NodeInfo\x12\x0f\n\x07node_id\x18\x01 \x01(\x03\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x10\n\x08hostname\x18\x03 \x01(\t\"\x99\x01\n\x16ReplicateConfiguration\x12\x34\n\x08\x63lusters\x18\x01 \x03(\x0b\x32\".milvus.proto.common.MilvusCluster\x12I\n\x16\x63ross_cluster_topology\x18\x02 \x03(\x0b\x32).milvus.proto.common.CrossClusterTopology\"-\n\x0f\x43onnectionParam\x12\x0b\n\x03uri\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\"v\n\rMilvusCluster\x12\x12\n\ncluster_id\x18\x01 \x01(\t\x12>\n\x10\x63onnection_param\x18\x02 \x01(\x0b\x32$.milvus.proto.common.ConnectionParam\x12\x11\n\tpchannels\x18\x03 \x03(\t\"L\n\x14\x43rossClusterTopology\x12\x19\n\x11source_cluster_id\x18\x01 \x01(\t\x12\x19\n\x11target_cluster_id\x18\x02 \x01(\t\"G\n\tMessageID\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\x08WAL_name\x18\x02 \x01(\x0e\x32\x1c.milvus.proto.common.WALName\"\xcd\x01\n\x10ImmutableMessage\x12*\n\x02id\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.common.MessageID\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12I\n\nproperties\x18\x03 \x03(\x0b\x32\x35.milvus.proto.common.ImmutableMessage.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x82\x01\n\x13ReplicateCheckpoint\x12\x12\n\ncluster_id\x18\x01 \x01(\t\x12\x10\n\x08pchannel\x18\x02 \x01(\t\x12\x32\n\nmessage_id\x18\x03 \x01(\x0b\x32\x1e.milvus.proto.common.MessageID\x12\x11\n\ttime_tick\x18\x04 \x01(\x04\"\"\n\rHighlightData\x12\x11\n\tfragments\x18\x01 \x03(\t\"X\n\x0fHighlightResult\x12\x12\n\nfield_name\x18\x01 \x01(\t\x12\x31\n\x05\x64\x61tas\x18\x02 \x03(\x0b\x32\".milvus.proto.common.HighlightData\"r\n\x0bHighlighter\x12\x30\n\x04type\x18\x01 \x01(\x0e\x32\".milvus.proto.common.HighlightType\x12\x31\n\x06params\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair*\xdd\x0b\n\tErrorCode\x12\x0b\n\x07Success\x10\x00\x12\x13\n\x0fUnexpectedError\x10\x01\x12\x11\n\rConnectFailed\x10\x02\x12\x14\n\x10PermissionDenied\x10\x03\x12\x17\n\x13\x43ollectionNotExists\x10\x04\x12\x13\n\x0fIllegalArgument\x10\x05\x12\x14\n\x10IllegalDimension\x10\x07\x12\x14\n\x10IllegalIndexType\x10\x08\x12\x19\n\x15IllegalCollectionName\x10\t\x12\x0f\n\x0bIllegalTOPK\x10\n\x12\x14\n\x10IllegalRowRecord\x10\x0b\x12\x13\n\x0fIllegalVectorID\x10\x0c\x12\x17\n\x13IllegalSearchResult\x10\r\x12\x10\n\x0c\x46ileNotFound\x10\x0e\x12\x0e\n\nMetaFailed\x10\x0f\x12\x0f\n\x0b\x43\x61\x63heFailed\x10\x10\x12\x16\n\x12\x43\x61nnotCreateFolder\x10\x11\x12\x14\n\x10\x43\x61nnotCreateFile\x10\x12\x12\x16\n\x12\x43\x61nnotDeleteFolder\x10\x13\x12\x14\n\x10\x43\x61nnotDeleteFile\x10\x14\x12\x13\n\x0f\x42uildIndexError\x10\x15\x12\x10\n\x0cIllegalNLIST\x10\x16\x12\x15\n\x11IllegalMetricType\x10\x17\x12\x0f\n\x0bOutOfMemory\x10\x18\x12\x11\n\rIndexNotExist\x10\x19\x12\x13\n\x0f\x45mptyCollection\x10\x1a\x12\x1b\n\x17UpdateImportTaskFailure\x10\x1b\x12\x1a\n\x16\x43ollectionNameNotFound\x10\x1c\x12\x1b\n\x17\x43reateCredentialFailure\x10\x1d\x12\x1b\n\x17UpdateCredentialFailure\x10\x1e\x12\x1b\n\x17\x44\x65leteCredentialFailure\x10\x1f\x12\x18\n\x14GetCredentialFailure\x10 \x12\x18\n\x14ListCredUsersFailure\x10!\x12\x12\n\x0eGetUserFailure\x10\"\x12\x15\n\x11\x43reateRoleFailure\x10#\x12\x13\n\x0f\x44ropRoleFailure\x10$\x12\x1a\n\x16OperateUserRoleFailure\x10%\x12\x15\n\x11SelectRoleFailure\x10&\x12\x15\n\x11SelectUserFailure\x10\'\x12\x19\n\x15SelectResourceFailure\x10(\x12\x1b\n\x17OperatePrivilegeFailure\x10)\x12\x16\n\x12SelectGrantFailure\x10*\x12!\n\x1dRefreshPolicyInfoCacheFailure\x10+\x12\x15\n\x11ListPolicyFailure\x10,\x12\x12\n\x0eNotShardLeader\x10-\x12\x16\n\x12NoReplicaAvailable\x10.\x12\x13\n\x0fSegmentNotFound\x10/\x12\r\n\tForceDeny\x10\x30\x12\r\n\tRateLimit\x10\x31\x12\x12\n\x0eNodeIDNotMatch\x10\x32\x12\x14\n\x10UpsertAutoIDTrue\x10\x33\x12\x1c\n\x18InsufficientMemoryToLoad\x10\x34\x12\x18\n\x14MemoryQuotaExhausted\x10\x35\x12\x16\n\x12\x44iskQuotaExhausted\x10\x36\x12\x15\n\x11TimeTickLongDelay\x10\x37\x12\x11\n\rNotReadyServe\x10\x38\x12\x1b\n\x17NotReadyCoordActivating\x10\x39\x12\x1f\n\x1b\x43reatePrivilegeGroupFailure\x10:\x12\x1d\n\x19\x44ropPrivilegeGroupFailure\x10;\x12\x1e\n\x1aListPrivilegeGroupsFailure\x10<\x12 \n\x1cOperatePrivilegeGroupFailure\x10=\x12\x12\n\x0eSchemaMismatch\x10>\x12\x0f\n\x0b\x44\x61taCoordNA\x10\x64\x12\x12\n\rDDRequestRace\x10\xe8\x07\x1a\x02\x18\x01*c\n\nIndexState\x12\x12\n\x0eIndexStateNone\x10\x00\x12\x0c\n\x08Unissued\x10\x01\x12\x0e\n\nInProgress\x10\x02\x12\x0c\n\x08\x46inished\x10\x03\x12\n\n\x06\x46\x61iled\x10\x04\x12\t\n\x05Retry\x10\x05*\x82\x01\n\x0cSegmentState\x12\x14\n\x10SegmentStateNone\x10\x00\x12\x0c\n\x08NotExist\x10\x01\x12\x0b\n\x07Growing\x10\x02\x12\n\n\x06Sealed\x10\x03\x12\x0b\n\x07\x46lushed\x10\x04\x12\x0c\n\x08\x46lushing\x10\x05\x12\x0b\n\x07\x44ropped\x10\x06\x12\r\n\tImporting\x10\x07*2\n\x0cSegmentLevel\x12\n\n\x06Legacy\x10\x00\x12\x06\n\x02L0\x10\x01\x12\x06\n\x02L1\x10\x02\x12\x06\n\x02L2\x10\x03*\xc5\x02\n\x0fPlaceholderType\x12\x08\n\x04None\x10\x00\x12\x10\n\x0c\x42inaryVector\x10\x64\x12\x0f\n\x0b\x46loatVector\x10\x65\x12\x11\n\rFloat16Vector\x10\x66\x12\x12\n\x0e\x42\x46loat16Vector\x10g\x12\x15\n\x11SparseFloatVector\x10h\x12\x0e\n\nInt8Vector\x10i\x12\t\n\x05Int64\x10\x05\x12\x0b\n\x07VarChar\x10\x15\x12\x18\n\x13\x45mbListBinaryVector\x10\xac\x02\x12\x17\n\x12\x45mbListFloatVector\x10\xad\x02\x12\x19\n\x14\x45mbListFloat16Vector\x10\xae\x02\x12\x1a\n\x15\x45mbListBFloat16Vector\x10\xaf\x02\x12\x1d\n\x18\x45mbListSparseFloatVector\x10\xb0\x02\x12\x16\n\x11\x45mbListInt8Vector\x10\xb1\x02*\x8c\x14\n\x07MsgType\x12\r\n\tUndefined\x10\x00\x12\x14\n\x10\x43reateCollection\x10\x64\x12\x12\n\x0e\x44ropCollection\x10\x65\x12\x11\n\rHasCollection\x10\x66\x12\x16\n\x12\x44\x65scribeCollection\x10g\x12\x13\n\x0fShowCollections\x10h\x12\x14\n\x10GetSystemConfigs\x10i\x12\x12\n\x0eLoadCollection\x10j\x12\x15\n\x11ReleaseCollection\x10k\x12\x0f\n\x0b\x43reateAlias\x10l\x12\r\n\tDropAlias\x10m\x12\x0e\n\nAlterAlias\x10n\x12\x13\n\x0f\x41lterCollection\x10o\x12\x14\n\x10RenameCollection\x10p\x12\x11\n\rDescribeAlias\x10q\x12\x0f\n\x0bListAliases\x10r\x12\x18\n\x14\x41lterCollectionField\x10s\x12\x19\n\x15\x41\x64\x64\x43ollectionFunction\x10t\x12\x1b\n\x17\x41lterCollectionFunction\x10u\x12\x1a\n\x16\x44ropCollectionFunction\x10v\x12\x14\n\x0f\x43reatePartition\x10\xc8\x01\x12\x12\n\rDropPartition\x10\xc9\x01\x12\x11\n\x0cHasPartition\x10\xca\x01\x12\x16\n\x11\x44\x65scribePartition\x10\xcb\x01\x12\x13\n\x0eShowPartitions\x10\xcc\x01\x12\x13\n\x0eLoadPartitions\x10\xcd\x01\x12\x16\n\x11ReleasePartitions\x10\xce\x01\x12\x11\n\x0cShowSegments\x10\xfa\x01\x12\x14\n\x0f\x44\x65scribeSegment\x10\xfb\x01\x12\x11\n\x0cLoadSegments\x10\xfc\x01\x12\x14\n\x0fReleaseSegments\x10\xfd\x01\x12\x14\n\x0fHandoffSegments\x10\xfe\x01\x12\x18\n\x13LoadBalanceSegments\x10\xff\x01\x12\x15\n\x10\x44\x65scribeSegments\x10\x80\x02\x12\x1c\n\x17\x46\x65\x64\x65rListIndexedSegment\x10\x81\x02\x12\"\n\x1d\x46\x65\x64\x65rDescribeSegmentIndexData\x10\x82\x02\x12\x10\n\x0b\x43reateIndex\x10\xac\x02\x12\x12\n\rDescribeIndex\x10\xad\x02\x12\x0e\n\tDropIndex\x10\xae\x02\x12\x17\n\x12GetIndexStatistics\x10\xaf\x02\x12\x0f\n\nAlterIndex\x10\xb0\x02\x12\x0b\n\x06Insert\x10\x90\x03\x12\x0b\n\x06\x44\x65lete\x10\x91\x03\x12\n\n\x05\x46lush\x10\x92\x03\x12\x17\n\x12ResendSegmentStats\x10\x93\x03\x12\x0b\n\x06Upsert\x10\x94\x03\x12\x10\n\x0bManualFlush\x10\x95\x03\x12\x11\n\x0c\x46lushSegment\x10\x96\x03\x12\x12\n\rCreateSegment\x10\x97\x03\x12\x0b\n\x06Import\x10\x98\x03\x12\x0b\n\x06Search\x10\xf4\x03\x12\x11\n\x0cSearchResult\x10\xf5\x03\x12\x12\n\rGetIndexState\x10\xf6\x03\x12\x1a\n\x15GetIndexBuildProgress\x10\xf7\x03\x12\x1c\n\x17GetCollectionStatistics\x10\xf8\x03\x12\x1b\n\x16GetPartitionStatistics\x10\xf9\x03\x12\r\n\x08Retrieve\x10\xfa\x03\x12\x13\n\x0eRetrieveResult\x10\xfb\x03\x12\x14\n\x0fWatchDmChannels\x10\xfc\x03\x12\x15\n\x10RemoveDmChannels\x10\xfd\x03\x12\x17\n\x12WatchQueryChannels\x10\xfe\x03\x12\x18\n\x13RemoveQueryChannels\x10\xff\x03\x12\x1d\n\x18SealedSegmentsChangeInfo\x10\x80\x04\x12\x17\n\x12WatchDeltaChannels\x10\x81\x04\x12\x14\n\x0fGetShardLeaders\x10\x82\x04\x12\x10\n\x0bGetReplicas\x10\x83\x04\x12\x13\n\x0eUnsubDmChannel\x10\x84\x04\x12\x14\n\x0fGetDistribution\x10\x85\x04\x12\x15\n\x10SyncDistribution\x10\x86\x04\x12\x10\n\x0bRunAnalyzer\x10\x87\x04\x12\x10\n\x0bSegmentInfo\x10\xd8\x04\x12\x0f\n\nSystemInfo\x10\xd9\x04\x12\x14\n\x0fGetRecoveryInfo\x10\xda\x04\x12\x14\n\x0fGetSegmentState\x10\xdb\x04\x12\r\n\x08TimeTick\x10\xb0\t\x12\x13\n\x0eQueryNodeStats\x10\xb1\t\x12\x0e\n\tLoadIndex\x10\xb2\t\x12\x0e\n\tRequestID\x10\xb3\t\x12\x0f\n\nRequestTSO\x10\xb4\t\x12\x14\n\x0f\x41llocateSegment\x10\xb5\t\x12\x16\n\x11SegmentStatistics\x10\xb6\t\x12\x15\n\x10SegmentFlushDone\x10\xb7\t\x12\x0f\n\nDataNodeTt\x10\xb8\t\x12\x0c\n\x07\x43onnect\x10\xb9\t\x12\x14\n\x0fListClientInfos\x10\xba\t\x12\x13\n\x0e\x41llocTimestamp\x10\xbb\t\x12\x0e\n\tReplicate\x10\xbc\t\x12\x15\n\x10\x43reateCredential\x10\xdc\x0b\x12\x12\n\rGetCredential\x10\xdd\x0b\x12\x15\n\x10\x44\x65leteCredential\x10\xde\x0b\x12\x15\n\x10UpdateCredential\x10\xdf\x0b\x12\x16\n\x11ListCredUsernames\x10\xe0\x0b\x12\x0f\n\nCreateRole\x10\xc0\x0c\x12\r\n\x08\x44ropRole\x10\xc1\x0c\x12\x14\n\x0fOperateUserRole\x10\xc2\x0c\x12\x0f\n\nSelectRole\x10\xc3\x0c\x12\x0f\n\nSelectUser\x10\xc4\x0c\x12\x13\n\x0eSelectResource\x10\xc5\x0c\x12\x15\n\x10OperatePrivilege\x10\xc6\x0c\x12\x10\n\x0bSelectGrant\x10\xc7\x0c\x12\x1b\n\x16RefreshPolicyInfoCache\x10\xc8\x0c\x12\x0f\n\nListPolicy\x10\xc9\x0c\x12\x19\n\x14\x43reatePrivilegeGroup\x10\xca\x0c\x12\x17\n\x12\x44ropPrivilegeGroup\x10\xcb\x0c\x12\x18\n\x13ListPrivilegeGroups\x10\xcc\x0c\x12\x1a\n\x15OperatePrivilegeGroup\x10\xcd\x0c\x12\x17\n\x12OperatePrivilegeV2\x10\xce\x0c\x12\x18\n\x13\x43reateResourceGroup\x10\xa4\r\x12\x16\n\x11\x44ropResourceGroup\x10\xa5\r\x12\x17\n\x12ListResourceGroups\x10\xa6\r\x12\x1a\n\x15\x44\x65scribeResourceGroup\x10\xa7\r\x12\x11\n\x0cTransferNode\x10\xa8\r\x12\x14\n\x0fTransferReplica\x10\xa9\r\x12\x19\n\x14UpdateResourceGroups\x10\xaa\r\x12\x13\n\x0e\x43reateDatabase\x10\x89\x0e\x12\x11\n\x0c\x44ropDatabase\x10\x8a\x0e\x12\x12\n\rListDatabases\x10\x8b\x0e\x12\x12\n\rAlterDatabase\x10\x8c\x0e\x12\x15\n\x10\x44\x65scribeDatabase\x10\x8d\x0e\x12\x17\n\x12\x41\x64\x64\x43ollectionField\x10\xec\x0e\x12\r\n\x08\x41lterWAL\x10\xd0\x0f*\"\n\x07\x44slType\x12\x07\n\x03\x44sl\x10\x00\x12\x0e\n\nBoolExprV1\x10\x01*B\n\x0f\x43ompactionState\x12\x11\n\rUndefiedState\x10\x00\x12\r\n\tExecuting\x10\x01\x12\r\n\tCompleted\x10\x02*X\n\x10\x43onsistencyLevel\x12\n\n\x06Strong\x10\x00\x12\x0b\n\x07Session\x10\x01\x12\x0b\n\x07\x42ounded\x10\x02\x12\x0e\n\nEventually\x10\x03\x12\x0e\n\nCustomized\x10\x04*\x9e\x01\n\x0bImportState\x12\x11\n\rImportPending\x10\x00\x12\x10\n\x0cImportFailed\x10\x01\x12\x11\n\rImportStarted\x10\x02\x12\x13\n\x0fImportPersisted\x10\x05\x12\x11\n\rImportFlushed\x10\x08\x12\x13\n\x0fImportCompleted\x10\x06\x12\x1a\n\x16ImportFailedAndCleaned\x10\x07*2\n\nObjectType\x12\x0e\n\nCollection\x10\x00\x12\n\n\x06Global\x10\x01\x12\x08\n\x04User\x10\x02*\x98\x12\n\x0fObjectPrivilege\x12\x10\n\x0cPrivilegeAll\x10\x00\x12\x1d\n\x19PrivilegeCreateCollection\x10\x01\x12\x1b\n\x17PrivilegeDropCollection\x10\x02\x12\x1f\n\x1bPrivilegeDescribeCollection\x10\x03\x12\x1c\n\x18PrivilegeShowCollections\x10\x04\x12\x11\n\rPrivilegeLoad\x10\x05\x12\x14\n\x10PrivilegeRelease\x10\x06\x12\x17\n\x13PrivilegeCompaction\x10\x07\x12\x13\n\x0fPrivilegeInsert\x10\x08\x12\x13\n\x0fPrivilegeDelete\x10\t\x12\x1a\n\x16PrivilegeGetStatistics\x10\n\x12\x18\n\x14PrivilegeCreateIndex\x10\x0b\x12\x18\n\x14PrivilegeIndexDetail\x10\x0c\x12\x16\n\x12PrivilegeDropIndex\x10\r\x12\x13\n\x0fPrivilegeSearch\x10\x0e\x12\x12\n\x0ePrivilegeFlush\x10\x0f\x12\x12\n\x0ePrivilegeQuery\x10\x10\x12\x18\n\x14PrivilegeLoadBalance\x10\x11\x12\x13\n\x0fPrivilegeImport\x10\x12\x12\x1c\n\x18PrivilegeCreateOwnership\x10\x13\x12\x17\n\x13PrivilegeUpdateUser\x10\x14\x12\x1a\n\x16PrivilegeDropOwnership\x10\x15\x12\x1c\n\x18PrivilegeSelectOwnership\x10\x16\x12\x1c\n\x18PrivilegeManageOwnership\x10\x17\x12\x17\n\x13PrivilegeSelectUser\x10\x18\x12\x13\n\x0fPrivilegeUpsert\x10\x19\x12 \n\x1cPrivilegeCreateResourceGroup\x10\x1a\x12\x1e\n\x1aPrivilegeDropResourceGroup\x10\x1b\x12\"\n\x1ePrivilegeDescribeResourceGroup\x10\x1c\x12\x1f\n\x1bPrivilegeListResourceGroups\x10\x1d\x12\x19\n\x15PrivilegeTransferNode\x10\x1e\x12\x1c\n\x18PrivilegeTransferReplica\x10\x1f\x12\x1f\n\x1bPrivilegeGetLoadingProgress\x10 \x12\x19\n\x15PrivilegeGetLoadState\x10!\x12\x1d\n\x19PrivilegeRenameCollection\x10\"\x12\x1b\n\x17PrivilegeCreateDatabase\x10#\x12\x19\n\x15PrivilegeDropDatabase\x10$\x12\x1a\n\x16PrivilegeListDatabases\x10%\x12\x15\n\x11PrivilegeFlushAll\x10&\x12\x1c\n\x18PrivilegeCreatePartition\x10\'\x12\x1a\n\x16PrivilegeDropPartition\x10(\x12\x1b\n\x17PrivilegeShowPartitions\x10)\x12\x19\n\x15PrivilegeHasPartition\x10*\x12\x1a\n\x16PrivilegeGetFlushState\x10+\x12\x18\n\x14PrivilegeCreateAlias\x10,\x12\x16\n\x12PrivilegeDropAlias\x10-\x12\x1a\n\x16PrivilegeDescribeAlias\x10.\x12\x18\n\x14PrivilegeListAliases\x10/\x12!\n\x1dPrivilegeUpdateResourceGroups\x10\x30\x12\x1a\n\x16PrivilegeAlterDatabase\x10\x31\x12\x1d\n\x19PrivilegeDescribeDatabase\x10\x32\x12\x17\n\x13PrivilegeBackupRBAC\x10\x33\x12\x18\n\x14PrivilegeRestoreRBAC\x10\x34\x12\x1a\n\x16PrivilegeGroupReadOnly\x10\x35\x12\x1b\n\x17PrivilegeGroupReadWrite\x10\x36\x12\x17\n\x13PrivilegeGroupAdmin\x10\x37\x12!\n\x1dPrivilegeCreatePrivilegeGroup\x10\x38\x12\x1f\n\x1bPrivilegeDropPrivilegeGroup\x10\x39\x12 \n\x1cPrivilegeListPrivilegeGroups\x10:\x12\"\n\x1ePrivilegeOperatePrivilegeGroup\x10;\x12!\n\x1dPrivilegeGroupClusterReadOnly\x10<\x12\"\n\x1ePrivilegeGroupClusterReadWrite\x10=\x12\x1e\n\x1aPrivilegeGroupClusterAdmin\x10>\x12\"\n\x1ePrivilegeGroupDatabaseReadOnly\x10?\x12#\n\x1fPrivilegeGroupDatabaseReadWrite\x10@\x12\x1f\n\x1bPrivilegeGroupDatabaseAdmin\x10\x41\x12$\n PrivilegeGroupCollectionReadOnly\x10\x42\x12%\n!PrivilegeGroupCollectionReadWrite\x10\x43\x12!\n\x1dPrivilegeGroupCollectionAdmin\x10\x44\x12\x1e\n\x1aPrivilegeGetImportProgress\x10\x45\x12\x17\n\x13PrivilegeListImport\x10\x46\x12\x1f\n\x1bPrivilegeAddCollectionField\x10G\x12\x1c\n\x18PrivilegeAddFileResource\x10H\x12\x1f\n\x1bPrivilegeRemoveFileResource\x10I\x12\x1e\n\x1aPrivilegeListFileResources\x10J\x12\"\n\x1ePrivilegeAddCollectionFunction\x10K\x12$\n PrivilegeAlterCollectionFunction\x10L\x12#\n\x1fPrivilegeDropCollectionFunction\x10M\x12)\n%PrivilegeUpdateReplicateConfiguration\x10N*S\n\tStateCode\x12\x10\n\x0cInitializing\x10\x00\x12\x0b\n\x07Healthy\x10\x01\x12\x0c\n\x08\x41\x62normal\x10\x02\x12\x0b\n\x07StandBy\x10\x03\x12\x0c\n\x08Stopping\x10\x04*c\n\tLoadState\x12\x15\n\x11LoadStateNotExist\x10\x00\x12\x14\n\x10LoadStateNotLoad\x10\x01\x12\x14\n\x10LoadStateLoading\x10\x02\x12\x13\n\x0fLoadStateLoaded\x10\x03*!\n\x0cLoadPriority\x12\x08\n\x04HIGH\x10\x00\x12\x07\n\x03LOW\x10\x01*U\n\x07WALName\x12\x0b\n\x07Unknown\x10\x00\x12\x0b\n\x07RocksMQ\x10\x01\x12\n\n\x06Pulsar\x10\x02\x12\t\n\x05Kafka\x10\x03\x12\x0e\n\nWoodPecker\x10\x04\x12\t\n\x04Test\x10\xe7\x07**\n\rHighlightType\x12\x0b\n\x07Lexical\x10\x00\x12\x0c\n\x08Semantic\x10\x01:^\n\x11privilege_ext_obj\x12\x1f.google.protobuf.MessageOptions\x18\xe9\x07 \x01(\x0b\x32!.milvus.proto.common.PrivilegeExtBm\n\x0eio.milvus.grpcB\x0b\x43ommonProtoP\x01Z4github.com/milvus-io/milvus-proto/go-api/v2/commonpb\xa0\x01\x01\xaa\x02\x12Milvus.Client.Grpcb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'common_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\016io.milvus.grpcB\013CommonProtoP\001Z4github.com/milvus-io/milvus-proto/go-api/v2/commonpb\240\001\001\252\002\022Milvus.Client.Grpc' + _globals['_ERRORCODE']._loaded_options = None + _globals['_ERRORCODE']._serialized_options = b'\030\001' + _globals['_STATUS_EXTRAINFOENTRY']._loaded_options = None + _globals['_STATUS_EXTRAINFOENTRY']._serialized_options = b'8\001' + _globals['_STATUS'].fields_by_name['error_code']._loaded_options = None + _globals['_STATUS'].fields_by_name['error_code']._serialized_options = b'\030\001' + _globals['_MSGBASE_PROPERTIESENTRY']._loaded_options = None + _globals['_MSGBASE_PROPERTIESENTRY']._serialized_options = b'8\001' + _globals['_CLIENTINFO_RESERVEDENTRY']._loaded_options = None + _globals['_CLIENTINFO_RESERVEDENTRY']._serialized_options = b'8\001' + _globals['_SERVERINFO_RESERVEDENTRY']._loaded_options = None + _globals['_SERVERINFO_RESERVEDENTRY']._serialized_options = b'8\001' + _globals['_IMMUTABLEMESSAGE_PROPERTIESENTRY']._loaded_options = None + _globals['_IMMUTABLEMESSAGE_PROPERTIESENTRY']._serialized_options = b'8\001' + _globals['_ERRORCODE']._serialized_start=2978 + _globals['_ERRORCODE']._serialized_end=4479 + _globals['_INDEXSTATE']._serialized_start=4481 + _globals['_INDEXSTATE']._serialized_end=4580 + _globals['_SEGMENTSTATE']._serialized_start=4583 + _globals['_SEGMENTSTATE']._serialized_end=4713 + _globals['_SEGMENTLEVEL']._serialized_start=4715 + _globals['_SEGMENTLEVEL']._serialized_end=4765 + _globals['_PLACEHOLDERTYPE']._serialized_start=4768 + _globals['_PLACEHOLDERTYPE']._serialized_end=5093 + _globals['_MSGTYPE']._serialized_start=5096 + _globals['_MSGTYPE']._serialized_end=7668 + _globals['_DSLTYPE']._serialized_start=7670 + _globals['_DSLTYPE']._serialized_end=7704 + _globals['_COMPACTIONSTATE']._serialized_start=7706 + _globals['_COMPACTIONSTATE']._serialized_end=7772 + _globals['_CONSISTENCYLEVEL']._serialized_start=7774 + _globals['_CONSISTENCYLEVEL']._serialized_end=7862 + _globals['_IMPORTSTATE']._serialized_start=7865 + _globals['_IMPORTSTATE']._serialized_end=8023 + _globals['_OBJECTTYPE']._serialized_start=8025 + _globals['_OBJECTTYPE']._serialized_end=8075 + _globals['_OBJECTPRIVILEGE']._serialized_start=8078 + _globals['_OBJECTPRIVILEGE']._serialized_end=10406 + _globals['_STATECODE']._serialized_start=10408 + _globals['_STATECODE']._serialized_end=10491 + _globals['_LOADSTATE']._serialized_start=10493 + _globals['_LOADSTATE']._serialized_end=10592 + _globals['_LOADPRIORITY']._serialized_start=10594 + _globals['_LOADPRIORITY']._serialized_end=10627 + _globals['_WALNAME']._serialized_start=10629 + _globals['_WALNAME']._serialized_end=10714 + _globals['_HIGHLIGHTTYPE']._serialized_start=10716 + _globals['_HIGHLIGHTTYPE']._serialized_end=10758 + _globals['_STATUS']._serialized_start=72 + _globals['_STATUS']._serialized_end=315 + _globals['_STATUS_EXTRAINFOENTRY']._serialized_start=267 + _globals['_STATUS_EXTRAINFOENTRY']._serialized_end=315 + _globals['_KEYVALUEPAIR']._serialized_start=317 + _globals['_KEYVALUEPAIR']._serialized_end=359 + _globals['_KEYDATAPAIR']._serialized_start=361 + _globals['_KEYDATAPAIR']._serialized_end=401 + _globals['_BLOB']._serialized_start=403 + _globals['_BLOB']._serialized_end=424 + _globals['_PLACEHOLDERVALUE']._serialized_start=426 + _globals['_PLACEHOLDERVALUE']._serialized_end=525 + _globals['_PLACEHOLDERGROUP']._serialized_start=527 + _globals['_PLACEHOLDERGROUP']._serialized_end=606 + _globals['_ADDRESS']._serialized_start=608 + _globals['_ADDRESS']._serialized_end=643 + _globals['_MSGBASE']._serialized_start=646 + _globals['_MSGBASE']._serialized_end=949 + _globals['_MSGBASE_PROPERTIESENTRY']._serialized_start=900 + _globals['_MSGBASE_PROPERTIESENTRY']._serialized_end=949 + _globals['_REPLICATEINFO']._serialized_start=951 + _globals['_REPLICATEINFO']._serialized_end=1030 + _globals['_MSGHEADER']._serialized_start=1032 + _globals['_MSGHEADER']._serialized_end=1087 + _globals['_DMLMSGHEADER']._serialized_start=1089 + _globals['_DMLMSGHEADER']._serialized_end=1166 + _globals['_PRIVILEGEEXT']._serialized_start=1169 + _globals['_PRIVILEGEEXT']._serialized_end=1356 + _globals['_SEGMENTSTATS']._serialized_start=1358 + _globals['_SEGMENTSTATS']._serialized_end=1408 + _globals['_CLIENTINFO']._serialized_start=1411 + _globals['_CLIENTINFO']._serialized_end=1624 + _globals['_CLIENTINFO_RESERVEDENTRY']._serialized_start=1577 + _globals['_CLIENTINFO_RESERVEDENTRY']._serialized_end=1624 + _globals['_SERVERINFO']._serialized_start=1627 + _globals['_SERVERINFO']._serialized_end=1854 + _globals['_SERVERINFO_RESERVEDENTRY']._serialized_start=1577 + _globals['_SERVERINFO_RESERVEDENTRY']._serialized_end=1624 + _globals['_NODEINFO']._serialized_start=1856 + _globals['_NODEINFO']._serialized_end=1918 + _globals['_REPLICATECONFIGURATION']._serialized_start=1921 + _globals['_REPLICATECONFIGURATION']._serialized_end=2074 + _globals['_CONNECTIONPARAM']._serialized_start=2076 + _globals['_CONNECTIONPARAM']._serialized_end=2121 + _globals['_MILVUSCLUSTER']._serialized_start=2123 + _globals['_MILVUSCLUSTER']._serialized_end=2241 + _globals['_CROSSCLUSTERTOPOLOGY']._serialized_start=2243 + _globals['_CROSSCLUSTERTOPOLOGY']._serialized_end=2319 + _globals['_MESSAGEID']._serialized_start=2321 + _globals['_MESSAGEID']._serialized_end=2392 + _globals['_IMMUTABLEMESSAGE']._serialized_start=2395 + _globals['_IMMUTABLEMESSAGE']._serialized_end=2600 + _globals['_IMMUTABLEMESSAGE_PROPERTIESENTRY']._serialized_start=900 + _globals['_IMMUTABLEMESSAGE_PROPERTIESENTRY']._serialized_end=949 + _globals['_REPLICATECHECKPOINT']._serialized_start=2603 + _globals['_REPLICATECHECKPOINT']._serialized_end=2733 + _globals['_HIGHLIGHTDATA']._serialized_start=2735 + _globals['_HIGHLIGHTDATA']._serialized_end=2769 + _globals['_HIGHLIGHTRESULT']._serialized_start=2771 + _globals['_HIGHLIGHTRESULT']._serialized_end=2859 + _globals['_HIGHLIGHTER']._serialized_start=2861 + _globals['_HIGHLIGHTER']._serialized_end=2975 # @@protoc_insertion_point(module_scope) diff --git a/pymilvus/grpc_gen/common_pb2.pyi b/pymilvus/grpc_gen/common_pb2.pyi new file mode 100644 index 000000000..729670a5a --- /dev/null +++ b/pymilvus/grpc_gen/common_pb2.pyi @@ -0,0 +1,1020 @@ +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ErrorCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Success: _ClassVar[ErrorCode] + UnexpectedError: _ClassVar[ErrorCode] + ConnectFailed: _ClassVar[ErrorCode] + PermissionDenied: _ClassVar[ErrorCode] + CollectionNotExists: _ClassVar[ErrorCode] + IllegalArgument: _ClassVar[ErrorCode] + IllegalDimension: _ClassVar[ErrorCode] + IllegalIndexType: _ClassVar[ErrorCode] + IllegalCollectionName: _ClassVar[ErrorCode] + IllegalTOPK: _ClassVar[ErrorCode] + IllegalRowRecord: _ClassVar[ErrorCode] + IllegalVectorID: _ClassVar[ErrorCode] + IllegalSearchResult: _ClassVar[ErrorCode] + FileNotFound: _ClassVar[ErrorCode] + MetaFailed: _ClassVar[ErrorCode] + CacheFailed: _ClassVar[ErrorCode] + CannotCreateFolder: _ClassVar[ErrorCode] + CannotCreateFile: _ClassVar[ErrorCode] + CannotDeleteFolder: _ClassVar[ErrorCode] + CannotDeleteFile: _ClassVar[ErrorCode] + BuildIndexError: _ClassVar[ErrorCode] + IllegalNLIST: _ClassVar[ErrorCode] + IllegalMetricType: _ClassVar[ErrorCode] + OutOfMemory: _ClassVar[ErrorCode] + IndexNotExist: _ClassVar[ErrorCode] + EmptyCollection: _ClassVar[ErrorCode] + UpdateImportTaskFailure: _ClassVar[ErrorCode] + CollectionNameNotFound: _ClassVar[ErrorCode] + CreateCredentialFailure: _ClassVar[ErrorCode] + UpdateCredentialFailure: _ClassVar[ErrorCode] + DeleteCredentialFailure: _ClassVar[ErrorCode] + GetCredentialFailure: _ClassVar[ErrorCode] + ListCredUsersFailure: _ClassVar[ErrorCode] + GetUserFailure: _ClassVar[ErrorCode] + CreateRoleFailure: _ClassVar[ErrorCode] + DropRoleFailure: _ClassVar[ErrorCode] + OperateUserRoleFailure: _ClassVar[ErrorCode] + SelectRoleFailure: _ClassVar[ErrorCode] + SelectUserFailure: _ClassVar[ErrorCode] + SelectResourceFailure: _ClassVar[ErrorCode] + OperatePrivilegeFailure: _ClassVar[ErrorCode] + SelectGrantFailure: _ClassVar[ErrorCode] + RefreshPolicyInfoCacheFailure: _ClassVar[ErrorCode] + ListPolicyFailure: _ClassVar[ErrorCode] + NotShardLeader: _ClassVar[ErrorCode] + NoReplicaAvailable: _ClassVar[ErrorCode] + SegmentNotFound: _ClassVar[ErrorCode] + ForceDeny: _ClassVar[ErrorCode] + RateLimit: _ClassVar[ErrorCode] + NodeIDNotMatch: _ClassVar[ErrorCode] + UpsertAutoIDTrue: _ClassVar[ErrorCode] + InsufficientMemoryToLoad: _ClassVar[ErrorCode] + MemoryQuotaExhausted: _ClassVar[ErrorCode] + DiskQuotaExhausted: _ClassVar[ErrorCode] + TimeTickLongDelay: _ClassVar[ErrorCode] + NotReadyServe: _ClassVar[ErrorCode] + NotReadyCoordActivating: _ClassVar[ErrorCode] + CreatePrivilegeGroupFailure: _ClassVar[ErrorCode] + DropPrivilegeGroupFailure: _ClassVar[ErrorCode] + ListPrivilegeGroupsFailure: _ClassVar[ErrorCode] + OperatePrivilegeGroupFailure: _ClassVar[ErrorCode] + SchemaMismatch: _ClassVar[ErrorCode] + DataCoordNA: _ClassVar[ErrorCode] + DDRequestRace: _ClassVar[ErrorCode] + +class IndexState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + IndexStateNone: _ClassVar[IndexState] + Unissued: _ClassVar[IndexState] + InProgress: _ClassVar[IndexState] + Finished: _ClassVar[IndexState] + Failed: _ClassVar[IndexState] + Retry: _ClassVar[IndexState] + +class SegmentState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + SegmentStateNone: _ClassVar[SegmentState] + NotExist: _ClassVar[SegmentState] + Growing: _ClassVar[SegmentState] + Sealed: _ClassVar[SegmentState] + Flushed: _ClassVar[SegmentState] + Flushing: _ClassVar[SegmentState] + Dropped: _ClassVar[SegmentState] + Importing: _ClassVar[SegmentState] + +class SegmentLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Legacy: _ClassVar[SegmentLevel] + L0: _ClassVar[SegmentLevel] + L1: _ClassVar[SegmentLevel] + L2: _ClassVar[SegmentLevel] + +class PlaceholderType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + None: _ClassVar[PlaceholderType] + BinaryVector: _ClassVar[PlaceholderType] + FloatVector: _ClassVar[PlaceholderType] + Float16Vector: _ClassVar[PlaceholderType] + BFloat16Vector: _ClassVar[PlaceholderType] + SparseFloatVector: _ClassVar[PlaceholderType] + Int8Vector: _ClassVar[PlaceholderType] + Int64: _ClassVar[PlaceholderType] + VarChar: _ClassVar[PlaceholderType] + EmbListBinaryVector: _ClassVar[PlaceholderType] + EmbListFloatVector: _ClassVar[PlaceholderType] + EmbListFloat16Vector: _ClassVar[PlaceholderType] + EmbListBFloat16Vector: _ClassVar[PlaceholderType] + EmbListSparseFloatVector: _ClassVar[PlaceholderType] + EmbListInt8Vector: _ClassVar[PlaceholderType] + +class MsgType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Undefined: _ClassVar[MsgType] + CreateCollection: _ClassVar[MsgType] + DropCollection: _ClassVar[MsgType] + HasCollection: _ClassVar[MsgType] + DescribeCollection: _ClassVar[MsgType] + ShowCollections: _ClassVar[MsgType] + GetSystemConfigs: _ClassVar[MsgType] + LoadCollection: _ClassVar[MsgType] + ReleaseCollection: _ClassVar[MsgType] + CreateAlias: _ClassVar[MsgType] + DropAlias: _ClassVar[MsgType] + AlterAlias: _ClassVar[MsgType] + AlterCollection: _ClassVar[MsgType] + RenameCollection: _ClassVar[MsgType] + DescribeAlias: _ClassVar[MsgType] + ListAliases: _ClassVar[MsgType] + AlterCollectionField: _ClassVar[MsgType] + AddCollectionFunction: _ClassVar[MsgType] + AlterCollectionFunction: _ClassVar[MsgType] + DropCollectionFunction: _ClassVar[MsgType] + CreatePartition: _ClassVar[MsgType] + DropPartition: _ClassVar[MsgType] + HasPartition: _ClassVar[MsgType] + DescribePartition: _ClassVar[MsgType] + ShowPartitions: _ClassVar[MsgType] + LoadPartitions: _ClassVar[MsgType] + ReleasePartitions: _ClassVar[MsgType] + ShowSegments: _ClassVar[MsgType] + DescribeSegment: _ClassVar[MsgType] + LoadSegments: _ClassVar[MsgType] + ReleaseSegments: _ClassVar[MsgType] + HandoffSegments: _ClassVar[MsgType] + LoadBalanceSegments: _ClassVar[MsgType] + DescribeSegments: _ClassVar[MsgType] + FederListIndexedSegment: _ClassVar[MsgType] + FederDescribeSegmentIndexData: _ClassVar[MsgType] + CreateIndex: _ClassVar[MsgType] + DescribeIndex: _ClassVar[MsgType] + DropIndex: _ClassVar[MsgType] + GetIndexStatistics: _ClassVar[MsgType] + AlterIndex: _ClassVar[MsgType] + Insert: _ClassVar[MsgType] + Delete: _ClassVar[MsgType] + Flush: _ClassVar[MsgType] + ResendSegmentStats: _ClassVar[MsgType] + Upsert: _ClassVar[MsgType] + ManualFlush: _ClassVar[MsgType] + FlushSegment: _ClassVar[MsgType] + CreateSegment: _ClassVar[MsgType] + Import: _ClassVar[MsgType] + Search: _ClassVar[MsgType] + SearchResult: _ClassVar[MsgType] + GetIndexState: _ClassVar[MsgType] + GetIndexBuildProgress: _ClassVar[MsgType] + GetCollectionStatistics: _ClassVar[MsgType] + GetPartitionStatistics: _ClassVar[MsgType] + Retrieve: _ClassVar[MsgType] + RetrieveResult: _ClassVar[MsgType] + WatchDmChannels: _ClassVar[MsgType] + RemoveDmChannels: _ClassVar[MsgType] + WatchQueryChannels: _ClassVar[MsgType] + RemoveQueryChannels: _ClassVar[MsgType] + SealedSegmentsChangeInfo: _ClassVar[MsgType] + WatchDeltaChannels: _ClassVar[MsgType] + GetShardLeaders: _ClassVar[MsgType] + GetReplicas: _ClassVar[MsgType] + UnsubDmChannel: _ClassVar[MsgType] + GetDistribution: _ClassVar[MsgType] + SyncDistribution: _ClassVar[MsgType] + RunAnalyzer: _ClassVar[MsgType] + SegmentInfo: _ClassVar[MsgType] + SystemInfo: _ClassVar[MsgType] + GetRecoveryInfo: _ClassVar[MsgType] + GetSegmentState: _ClassVar[MsgType] + TimeTick: _ClassVar[MsgType] + QueryNodeStats: _ClassVar[MsgType] + LoadIndex: _ClassVar[MsgType] + RequestID: _ClassVar[MsgType] + RequestTSO: _ClassVar[MsgType] + AllocateSegment: _ClassVar[MsgType] + SegmentStatistics: _ClassVar[MsgType] + SegmentFlushDone: _ClassVar[MsgType] + DataNodeTt: _ClassVar[MsgType] + Connect: _ClassVar[MsgType] + ListClientInfos: _ClassVar[MsgType] + AllocTimestamp: _ClassVar[MsgType] + Replicate: _ClassVar[MsgType] + CreateCredential: _ClassVar[MsgType] + GetCredential: _ClassVar[MsgType] + DeleteCredential: _ClassVar[MsgType] + UpdateCredential: _ClassVar[MsgType] + ListCredUsernames: _ClassVar[MsgType] + CreateRole: _ClassVar[MsgType] + DropRole: _ClassVar[MsgType] + OperateUserRole: _ClassVar[MsgType] + SelectRole: _ClassVar[MsgType] + SelectUser: _ClassVar[MsgType] + SelectResource: _ClassVar[MsgType] + OperatePrivilege: _ClassVar[MsgType] + SelectGrant: _ClassVar[MsgType] + RefreshPolicyInfoCache: _ClassVar[MsgType] + ListPolicy: _ClassVar[MsgType] + CreatePrivilegeGroup: _ClassVar[MsgType] + DropPrivilegeGroup: _ClassVar[MsgType] + ListPrivilegeGroups: _ClassVar[MsgType] + OperatePrivilegeGroup: _ClassVar[MsgType] + OperatePrivilegeV2: _ClassVar[MsgType] + CreateResourceGroup: _ClassVar[MsgType] + DropResourceGroup: _ClassVar[MsgType] + ListResourceGroups: _ClassVar[MsgType] + DescribeResourceGroup: _ClassVar[MsgType] + TransferNode: _ClassVar[MsgType] + TransferReplica: _ClassVar[MsgType] + UpdateResourceGroups: _ClassVar[MsgType] + CreateDatabase: _ClassVar[MsgType] + DropDatabase: _ClassVar[MsgType] + ListDatabases: _ClassVar[MsgType] + AlterDatabase: _ClassVar[MsgType] + DescribeDatabase: _ClassVar[MsgType] + AddCollectionField: _ClassVar[MsgType] + AlterWAL: _ClassVar[MsgType] + +class DslType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Dsl: _ClassVar[DslType] + BoolExprV1: _ClassVar[DslType] + +class CompactionState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + UndefiedState: _ClassVar[CompactionState] + Executing: _ClassVar[CompactionState] + Completed: _ClassVar[CompactionState] + +class ConsistencyLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Strong: _ClassVar[ConsistencyLevel] + Session: _ClassVar[ConsistencyLevel] + Bounded: _ClassVar[ConsistencyLevel] + Eventually: _ClassVar[ConsistencyLevel] + Customized: _ClassVar[ConsistencyLevel] + +class ImportState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + ImportPending: _ClassVar[ImportState] + ImportFailed: _ClassVar[ImportState] + ImportStarted: _ClassVar[ImportState] + ImportPersisted: _ClassVar[ImportState] + ImportFlushed: _ClassVar[ImportState] + ImportCompleted: _ClassVar[ImportState] + ImportFailedAndCleaned: _ClassVar[ImportState] + +class ObjectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Collection: _ClassVar[ObjectType] + Global: _ClassVar[ObjectType] + User: _ClassVar[ObjectType] + +class ObjectPrivilege(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + PrivilegeAll: _ClassVar[ObjectPrivilege] + PrivilegeCreateCollection: _ClassVar[ObjectPrivilege] + PrivilegeDropCollection: _ClassVar[ObjectPrivilege] + PrivilegeDescribeCollection: _ClassVar[ObjectPrivilege] + PrivilegeShowCollections: _ClassVar[ObjectPrivilege] + PrivilegeLoad: _ClassVar[ObjectPrivilege] + PrivilegeRelease: _ClassVar[ObjectPrivilege] + PrivilegeCompaction: _ClassVar[ObjectPrivilege] + PrivilegeInsert: _ClassVar[ObjectPrivilege] + PrivilegeDelete: _ClassVar[ObjectPrivilege] + PrivilegeGetStatistics: _ClassVar[ObjectPrivilege] + PrivilegeCreateIndex: _ClassVar[ObjectPrivilege] + PrivilegeIndexDetail: _ClassVar[ObjectPrivilege] + PrivilegeDropIndex: _ClassVar[ObjectPrivilege] + PrivilegeSearch: _ClassVar[ObjectPrivilege] + PrivilegeFlush: _ClassVar[ObjectPrivilege] + PrivilegeQuery: _ClassVar[ObjectPrivilege] + PrivilegeLoadBalance: _ClassVar[ObjectPrivilege] + PrivilegeImport: _ClassVar[ObjectPrivilege] + PrivilegeCreateOwnership: _ClassVar[ObjectPrivilege] + PrivilegeUpdateUser: _ClassVar[ObjectPrivilege] + PrivilegeDropOwnership: _ClassVar[ObjectPrivilege] + PrivilegeSelectOwnership: _ClassVar[ObjectPrivilege] + PrivilegeManageOwnership: _ClassVar[ObjectPrivilege] + PrivilegeSelectUser: _ClassVar[ObjectPrivilege] + PrivilegeUpsert: _ClassVar[ObjectPrivilege] + PrivilegeCreateResourceGroup: _ClassVar[ObjectPrivilege] + PrivilegeDropResourceGroup: _ClassVar[ObjectPrivilege] + PrivilegeDescribeResourceGroup: _ClassVar[ObjectPrivilege] + PrivilegeListResourceGroups: _ClassVar[ObjectPrivilege] + PrivilegeTransferNode: _ClassVar[ObjectPrivilege] + PrivilegeTransferReplica: _ClassVar[ObjectPrivilege] + PrivilegeGetLoadingProgress: _ClassVar[ObjectPrivilege] + PrivilegeGetLoadState: _ClassVar[ObjectPrivilege] + PrivilegeRenameCollection: _ClassVar[ObjectPrivilege] + PrivilegeCreateDatabase: _ClassVar[ObjectPrivilege] + PrivilegeDropDatabase: _ClassVar[ObjectPrivilege] + PrivilegeListDatabases: _ClassVar[ObjectPrivilege] + PrivilegeFlushAll: _ClassVar[ObjectPrivilege] + PrivilegeCreatePartition: _ClassVar[ObjectPrivilege] + PrivilegeDropPartition: _ClassVar[ObjectPrivilege] + PrivilegeShowPartitions: _ClassVar[ObjectPrivilege] + PrivilegeHasPartition: _ClassVar[ObjectPrivilege] + PrivilegeGetFlushState: _ClassVar[ObjectPrivilege] + PrivilegeCreateAlias: _ClassVar[ObjectPrivilege] + PrivilegeDropAlias: _ClassVar[ObjectPrivilege] + PrivilegeDescribeAlias: _ClassVar[ObjectPrivilege] + PrivilegeListAliases: _ClassVar[ObjectPrivilege] + PrivilegeUpdateResourceGroups: _ClassVar[ObjectPrivilege] + PrivilegeAlterDatabase: _ClassVar[ObjectPrivilege] + PrivilegeDescribeDatabase: _ClassVar[ObjectPrivilege] + PrivilegeBackupRBAC: _ClassVar[ObjectPrivilege] + PrivilegeRestoreRBAC: _ClassVar[ObjectPrivilege] + PrivilegeGroupReadOnly: _ClassVar[ObjectPrivilege] + PrivilegeGroupReadWrite: _ClassVar[ObjectPrivilege] + PrivilegeGroupAdmin: _ClassVar[ObjectPrivilege] + PrivilegeCreatePrivilegeGroup: _ClassVar[ObjectPrivilege] + PrivilegeDropPrivilegeGroup: _ClassVar[ObjectPrivilege] + PrivilegeListPrivilegeGroups: _ClassVar[ObjectPrivilege] + PrivilegeOperatePrivilegeGroup: _ClassVar[ObjectPrivilege] + PrivilegeGroupClusterReadOnly: _ClassVar[ObjectPrivilege] + PrivilegeGroupClusterReadWrite: _ClassVar[ObjectPrivilege] + PrivilegeGroupClusterAdmin: _ClassVar[ObjectPrivilege] + PrivilegeGroupDatabaseReadOnly: _ClassVar[ObjectPrivilege] + PrivilegeGroupDatabaseReadWrite: _ClassVar[ObjectPrivilege] + PrivilegeGroupDatabaseAdmin: _ClassVar[ObjectPrivilege] + PrivilegeGroupCollectionReadOnly: _ClassVar[ObjectPrivilege] + PrivilegeGroupCollectionReadWrite: _ClassVar[ObjectPrivilege] + PrivilegeGroupCollectionAdmin: _ClassVar[ObjectPrivilege] + PrivilegeGetImportProgress: _ClassVar[ObjectPrivilege] + PrivilegeListImport: _ClassVar[ObjectPrivilege] + PrivilegeAddCollectionField: _ClassVar[ObjectPrivilege] + PrivilegeAddFileResource: _ClassVar[ObjectPrivilege] + PrivilegeRemoveFileResource: _ClassVar[ObjectPrivilege] + PrivilegeListFileResources: _ClassVar[ObjectPrivilege] + PrivilegeAddCollectionFunction: _ClassVar[ObjectPrivilege] + PrivilegeAlterCollectionFunction: _ClassVar[ObjectPrivilege] + PrivilegeDropCollectionFunction: _ClassVar[ObjectPrivilege] + PrivilegeUpdateReplicateConfiguration: _ClassVar[ObjectPrivilege] + +class StateCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Initializing: _ClassVar[StateCode] + Healthy: _ClassVar[StateCode] + Abnormal: _ClassVar[StateCode] + StandBy: _ClassVar[StateCode] + Stopping: _ClassVar[StateCode] + +class LoadState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + LoadStateNotExist: _ClassVar[LoadState] + LoadStateNotLoad: _ClassVar[LoadState] + LoadStateLoading: _ClassVar[LoadState] + LoadStateLoaded: _ClassVar[LoadState] + +class LoadPriority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + HIGH: _ClassVar[LoadPriority] + LOW: _ClassVar[LoadPriority] + +class WALName(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Unknown: _ClassVar[WALName] + RocksMQ: _ClassVar[WALName] + Pulsar: _ClassVar[WALName] + Kafka: _ClassVar[WALName] + WoodPecker: _ClassVar[WALName] + Test: _ClassVar[WALName] + +class HighlightType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Lexical: _ClassVar[HighlightType] + Semantic: _ClassVar[HighlightType] +Success: ErrorCode +UnexpectedError: ErrorCode +ConnectFailed: ErrorCode +PermissionDenied: ErrorCode +CollectionNotExists: ErrorCode +IllegalArgument: ErrorCode +IllegalDimension: ErrorCode +IllegalIndexType: ErrorCode +IllegalCollectionName: ErrorCode +IllegalTOPK: ErrorCode +IllegalRowRecord: ErrorCode +IllegalVectorID: ErrorCode +IllegalSearchResult: ErrorCode +FileNotFound: ErrorCode +MetaFailed: ErrorCode +CacheFailed: ErrorCode +CannotCreateFolder: ErrorCode +CannotCreateFile: ErrorCode +CannotDeleteFolder: ErrorCode +CannotDeleteFile: ErrorCode +BuildIndexError: ErrorCode +IllegalNLIST: ErrorCode +IllegalMetricType: ErrorCode +OutOfMemory: ErrorCode +IndexNotExist: ErrorCode +EmptyCollection: ErrorCode +UpdateImportTaskFailure: ErrorCode +CollectionNameNotFound: ErrorCode +CreateCredentialFailure: ErrorCode +UpdateCredentialFailure: ErrorCode +DeleteCredentialFailure: ErrorCode +GetCredentialFailure: ErrorCode +ListCredUsersFailure: ErrorCode +GetUserFailure: ErrorCode +CreateRoleFailure: ErrorCode +DropRoleFailure: ErrorCode +OperateUserRoleFailure: ErrorCode +SelectRoleFailure: ErrorCode +SelectUserFailure: ErrorCode +SelectResourceFailure: ErrorCode +OperatePrivilegeFailure: ErrorCode +SelectGrantFailure: ErrorCode +RefreshPolicyInfoCacheFailure: ErrorCode +ListPolicyFailure: ErrorCode +NotShardLeader: ErrorCode +NoReplicaAvailable: ErrorCode +SegmentNotFound: ErrorCode +ForceDeny: ErrorCode +RateLimit: ErrorCode +NodeIDNotMatch: ErrorCode +UpsertAutoIDTrue: ErrorCode +InsufficientMemoryToLoad: ErrorCode +MemoryQuotaExhausted: ErrorCode +DiskQuotaExhausted: ErrorCode +TimeTickLongDelay: ErrorCode +NotReadyServe: ErrorCode +NotReadyCoordActivating: ErrorCode +CreatePrivilegeGroupFailure: ErrorCode +DropPrivilegeGroupFailure: ErrorCode +ListPrivilegeGroupsFailure: ErrorCode +OperatePrivilegeGroupFailure: ErrorCode +SchemaMismatch: ErrorCode +DataCoordNA: ErrorCode +DDRequestRace: ErrorCode +IndexStateNone: IndexState +Unissued: IndexState +InProgress: IndexState +Finished: IndexState +Failed: IndexState +Retry: IndexState +SegmentStateNone: SegmentState +NotExist: SegmentState +Growing: SegmentState +Sealed: SegmentState +Flushed: SegmentState +Flushing: SegmentState +Dropped: SegmentState +Importing: SegmentState +Legacy: SegmentLevel +L0: SegmentLevel +L1: SegmentLevel +L2: SegmentLevel +None: PlaceholderType +BinaryVector: PlaceholderType +FloatVector: PlaceholderType +Float16Vector: PlaceholderType +BFloat16Vector: PlaceholderType +SparseFloatVector: PlaceholderType +Int8Vector: PlaceholderType +Int64: PlaceholderType +VarChar: PlaceholderType +EmbListBinaryVector: PlaceholderType +EmbListFloatVector: PlaceholderType +EmbListFloat16Vector: PlaceholderType +EmbListBFloat16Vector: PlaceholderType +EmbListSparseFloatVector: PlaceholderType +EmbListInt8Vector: PlaceholderType +Undefined: MsgType +CreateCollection: MsgType +DropCollection: MsgType +HasCollection: MsgType +DescribeCollection: MsgType +ShowCollections: MsgType +GetSystemConfigs: MsgType +LoadCollection: MsgType +ReleaseCollection: MsgType +CreateAlias: MsgType +DropAlias: MsgType +AlterAlias: MsgType +AlterCollection: MsgType +RenameCollection: MsgType +DescribeAlias: MsgType +ListAliases: MsgType +AlterCollectionField: MsgType +AddCollectionFunction: MsgType +AlterCollectionFunction: MsgType +DropCollectionFunction: MsgType +CreatePartition: MsgType +DropPartition: MsgType +HasPartition: MsgType +DescribePartition: MsgType +ShowPartitions: MsgType +LoadPartitions: MsgType +ReleasePartitions: MsgType +ShowSegments: MsgType +DescribeSegment: MsgType +LoadSegments: MsgType +ReleaseSegments: MsgType +HandoffSegments: MsgType +LoadBalanceSegments: MsgType +DescribeSegments: MsgType +FederListIndexedSegment: MsgType +FederDescribeSegmentIndexData: MsgType +CreateIndex: MsgType +DescribeIndex: MsgType +DropIndex: MsgType +GetIndexStatistics: MsgType +AlterIndex: MsgType +Insert: MsgType +Delete: MsgType +Flush: MsgType +ResendSegmentStats: MsgType +Upsert: MsgType +ManualFlush: MsgType +FlushSegment: MsgType +CreateSegment: MsgType +Import: MsgType +Search: MsgType +SearchResult: MsgType +GetIndexState: MsgType +GetIndexBuildProgress: MsgType +GetCollectionStatistics: MsgType +GetPartitionStatistics: MsgType +Retrieve: MsgType +RetrieveResult: MsgType +WatchDmChannels: MsgType +RemoveDmChannels: MsgType +WatchQueryChannels: MsgType +RemoveQueryChannels: MsgType +SealedSegmentsChangeInfo: MsgType +WatchDeltaChannels: MsgType +GetShardLeaders: MsgType +GetReplicas: MsgType +UnsubDmChannel: MsgType +GetDistribution: MsgType +SyncDistribution: MsgType +RunAnalyzer: MsgType +SegmentInfo: MsgType +SystemInfo: MsgType +GetRecoveryInfo: MsgType +GetSegmentState: MsgType +TimeTick: MsgType +QueryNodeStats: MsgType +LoadIndex: MsgType +RequestID: MsgType +RequestTSO: MsgType +AllocateSegment: MsgType +SegmentStatistics: MsgType +SegmentFlushDone: MsgType +DataNodeTt: MsgType +Connect: MsgType +ListClientInfos: MsgType +AllocTimestamp: MsgType +Replicate: MsgType +CreateCredential: MsgType +GetCredential: MsgType +DeleteCredential: MsgType +UpdateCredential: MsgType +ListCredUsernames: MsgType +CreateRole: MsgType +DropRole: MsgType +OperateUserRole: MsgType +SelectRole: MsgType +SelectUser: MsgType +SelectResource: MsgType +OperatePrivilege: MsgType +SelectGrant: MsgType +RefreshPolicyInfoCache: MsgType +ListPolicy: MsgType +CreatePrivilegeGroup: MsgType +DropPrivilegeGroup: MsgType +ListPrivilegeGroups: MsgType +OperatePrivilegeGroup: MsgType +OperatePrivilegeV2: MsgType +CreateResourceGroup: MsgType +DropResourceGroup: MsgType +ListResourceGroups: MsgType +DescribeResourceGroup: MsgType +TransferNode: MsgType +TransferReplica: MsgType +UpdateResourceGroups: MsgType +CreateDatabase: MsgType +DropDatabase: MsgType +ListDatabases: MsgType +AlterDatabase: MsgType +DescribeDatabase: MsgType +AddCollectionField: MsgType +AlterWAL: MsgType +Dsl: DslType +BoolExprV1: DslType +UndefiedState: CompactionState +Executing: CompactionState +Completed: CompactionState +Strong: ConsistencyLevel +Session: ConsistencyLevel +Bounded: ConsistencyLevel +Eventually: ConsistencyLevel +Customized: ConsistencyLevel +ImportPending: ImportState +ImportFailed: ImportState +ImportStarted: ImportState +ImportPersisted: ImportState +ImportFlushed: ImportState +ImportCompleted: ImportState +ImportFailedAndCleaned: ImportState +Collection: ObjectType +Global: ObjectType +User: ObjectType +PrivilegeAll: ObjectPrivilege +PrivilegeCreateCollection: ObjectPrivilege +PrivilegeDropCollection: ObjectPrivilege +PrivilegeDescribeCollection: ObjectPrivilege +PrivilegeShowCollections: ObjectPrivilege +PrivilegeLoad: ObjectPrivilege +PrivilegeRelease: ObjectPrivilege +PrivilegeCompaction: ObjectPrivilege +PrivilegeInsert: ObjectPrivilege +PrivilegeDelete: ObjectPrivilege +PrivilegeGetStatistics: ObjectPrivilege +PrivilegeCreateIndex: ObjectPrivilege +PrivilegeIndexDetail: ObjectPrivilege +PrivilegeDropIndex: ObjectPrivilege +PrivilegeSearch: ObjectPrivilege +PrivilegeFlush: ObjectPrivilege +PrivilegeQuery: ObjectPrivilege +PrivilegeLoadBalance: ObjectPrivilege +PrivilegeImport: ObjectPrivilege +PrivilegeCreateOwnership: ObjectPrivilege +PrivilegeUpdateUser: ObjectPrivilege +PrivilegeDropOwnership: ObjectPrivilege +PrivilegeSelectOwnership: ObjectPrivilege +PrivilegeManageOwnership: ObjectPrivilege +PrivilegeSelectUser: ObjectPrivilege +PrivilegeUpsert: ObjectPrivilege +PrivilegeCreateResourceGroup: ObjectPrivilege +PrivilegeDropResourceGroup: ObjectPrivilege +PrivilegeDescribeResourceGroup: ObjectPrivilege +PrivilegeListResourceGroups: ObjectPrivilege +PrivilegeTransferNode: ObjectPrivilege +PrivilegeTransferReplica: ObjectPrivilege +PrivilegeGetLoadingProgress: ObjectPrivilege +PrivilegeGetLoadState: ObjectPrivilege +PrivilegeRenameCollection: ObjectPrivilege +PrivilegeCreateDatabase: ObjectPrivilege +PrivilegeDropDatabase: ObjectPrivilege +PrivilegeListDatabases: ObjectPrivilege +PrivilegeFlushAll: ObjectPrivilege +PrivilegeCreatePartition: ObjectPrivilege +PrivilegeDropPartition: ObjectPrivilege +PrivilegeShowPartitions: ObjectPrivilege +PrivilegeHasPartition: ObjectPrivilege +PrivilegeGetFlushState: ObjectPrivilege +PrivilegeCreateAlias: ObjectPrivilege +PrivilegeDropAlias: ObjectPrivilege +PrivilegeDescribeAlias: ObjectPrivilege +PrivilegeListAliases: ObjectPrivilege +PrivilegeUpdateResourceGroups: ObjectPrivilege +PrivilegeAlterDatabase: ObjectPrivilege +PrivilegeDescribeDatabase: ObjectPrivilege +PrivilegeBackupRBAC: ObjectPrivilege +PrivilegeRestoreRBAC: ObjectPrivilege +PrivilegeGroupReadOnly: ObjectPrivilege +PrivilegeGroupReadWrite: ObjectPrivilege +PrivilegeGroupAdmin: ObjectPrivilege +PrivilegeCreatePrivilegeGroup: ObjectPrivilege +PrivilegeDropPrivilegeGroup: ObjectPrivilege +PrivilegeListPrivilegeGroups: ObjectPrivilege +PrivilegeOperatePrivilegeGroup: ObjectPrivilege +PrivilegeGroupClusterReadOnly: ObjectPrivilege +PrivilegeGroupClusterReadWrite: ObjectPrivilege +PrivilegeGroupClusterAdmin: ObjectPrivilege +PrivilegeGroupDatabaseReadOnly: ObjectPrivilege +PrivilegeGroupDatabaseReadWrite: ObjectPrivilege +PrivilegeGroupDatabaseAdmin: ObjectPrivilege +PrivilegeGroupCollectionReadOnly: ObjectPrivilege +PrivilegeGroupCollectionReadWrite: ObjectPrivilege +PrivilegeGroupCollectionAdmin: ObjectPrivilege +PrivilegeGetImportProgress: ObjectPrivilege +PrivilegeListImport: ObjectPrivilege +PrivilegeAddCollectionField: ObjectPrivilege +PrivilegeAddFileResource: ObjectPrivilege +PrivilegeRemoveFileResource: ObjectPrivilege +PrivilegeListFileResources: ObjectPrivilege +PrivilegeAddCollectionFunction: ObjectPrivilege +PrivilegeAlterCollectionFunction: ObjectPrivilege +PrivilegeDropCollectionFunction: ObjectPrivilege +PrivilegeUpdateReplicateConfiguration: ObjectPrivilege +Initializing: StateCode +Healthy: StateCode +Abnormal: StateCode +StandBy: StateCode +Stopping: StateCode +LoadStateNotExist: LoadState +LoadStateNotLoad: LoadState +LoadStateLoading: LoadState +LoadStateLoaded: LoadState +HIGH: LoadPriority +LOW: LoadPriority +Unknown: WALName +RocksMQ: WALName +Pulsar: WALName +Kafka: WALName +WoodPecker: WALName +Test: WALName +Lexical: HighlightType +Semantic: HighlightType +PRIVILEGE_EXT_OBJ_FIELD_NUMBER: _ClassVar[int] +privilege_ext_obj: _descriptor.FieldDescriptor + +class Status(_message.Message): + __slots__ = ("error_code", "reason", "code", "retriable", "detail", "extra_info") + class ExtraInfoEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + ERROR_CODE_FIELD_NUMBER: _ClassVar[int] + REASON_FIELD_NUMBER: _ClassVar[int] + CODE_FIELD_NUMBER: _ClassVar[int] + RETRIABLE_FIELD_NUMBER: _ClassVar[int] + DETAIL_FIELD_NUMBER: _ClassVar[int] + EXTRA_INFO_FIELD_NUMBER: _ClassVar[int] + error_code: ErrorCode + reason: str + code: int + retriable: bool + detail: str + extra_info: _containers.ScalarMap[str, str] + def __init__(self, error_code: _Optional[_Union[ErrorCode, str]] = ..., reason: _Optional[str] = ..., code: _Optional[int] = ..., retriable: bool = ..., detail: _Optional[str] = ..., extra_info: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class KeyValuePair(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + +class KeyDataPair(_message.Message): + __slots__ = ("key", "data") + KEY_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + key: str + data: bytes + def __init__(self, key: _Optional[str] = ..., data: _Optional[bytes] = ...) -> None: ... + +class Blob(_message.Message): + __slots__ = ("value",) + VALUE_FIELD_NUMBER: _ClassVar[int] + value: bytes + def __init__(self, value: _Optional[bytes] = ...) -> None: ... + +class PlaceholderValue(_message.Message): + __slots__ = ("tag", "type", "values") + TAG_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + VALUES_FIELD_NUMBER: _ClassVar[int] + tag: str + type: PlaceholderType + values: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, tag: _Optional[str] = ..., type: _Optional[_Union[PlaceholderType, str]] = ..., values: _Optional[_Iterable[bytes]] = ...) -> None: ... + +class PlaceholderGroup(_message.Message): + __slots__ = ("placeholders",) + PLACEHOLDERS_FIELD_NUMBER: _ClassVar[int] + placeholders: _containers.RepeatedCompositeFieldContainer[PlaceholderValue] + def __init__(self, placeholders: _Optional[_Iterable[_Union[PlaceholderValue, _Mapping]]] = ...) -> None: ... + +class Address(_message.Message): + __slots__ = ("ip", "port") + IP_FIELD_NUMBER: _ClassVar[int] + PORT_FIELD_NUMBER: _ClassVar[int] + ip: str + port: int + def __init__(self, ip: _Optional[str] = ..., port: _Optional[int] = ...) -> None: ... + +class MsgBase(_message.Message): + __slots__ = ("msg_type", "msgID", "timestamp", "sourceID", "targetID", "properties", "replicateInfo") + class PropertiesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + MSG_TYPE_FIELD_NUMBER: _ClassVar[int] + MSGID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + SOURCEID_FIELD_NUMBER: _ClassVar[int] + TARGETID_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + REPLICATEINFO_FIELD_NUMBER: _ClassVar[int] + msg_type: MsgType + msgID: int + timestamp: int + sourceID: int + targetID: int + properties: _containers.ScalarMap[str, str] + replicateInfo: ReplicateInfo + def __init__(self, msg_type: _Optional[_Union[MsgType, str]] = ..., msgID: _Optional[int] = ..., timestamp: _Optional[int] = ..., sourceID: _Optional[int] = ..., targetID: _Optional[int] = ..., properties: _Optional[_Mapping[str, str]] = ..., replicateInfo: _Optional[_Union[ReplicateInfo, _Mapping]] = ...) -> None: ... + +class ReplicateInfo(_message.Message): + __slots__ = ("isReplicate", "msgTimestamp", "replicateID") + ISREPLICATE_FIELD_NUMBER: _ClassVar[int] + MSGTIMESTAMP_FIELD_NUMBER: _ClassVar[int] + REPLICATEID_FIELD_NUMBER: _ClassVar[int] + isReplicate: bool + msgTimestamp: int + replicateID: str + def __init__(self, isReplicate: bool = ..., msgTimestamp: _Optional[int] = ..., replicateID: _Optional[str] = ...) -> None: ... + +class MsgHeader(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: MsgBase + def __init__(self, base: _Optional[_Union[MsgBase, _Mapping]] = ...) -> None: ... + +class DMLMsgHeader(_message.Message): + __slots__ = ("base", "shardName") + BASE_FIELD_NUMBER: _ClassVar[int] + SHARDNAME_FIELD_NUMBER: _ClassVar[int] + base: MsgBase + shardName: str + def __init__(self, base: _Optional[_Union[MsgBase, _Mapping]] = ..., shardName: _Optional[str] = ...) -> None: ... + +class PrivilegeExt(_message.Message): + __slots__ = ("object_type", "object_privilege", "object_name_index", "object_name_indexs") + OBJECT_TYPE_FIELD_NUMBER: _ClassVar[int] + OBJECT_PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + OBJECT_NAME_INDEX_FIELD_NUMBER: _ClassVar[int] + OBJECT_NAME_INDEXS_FIELD_NUMBER: _ClassVar[int] + object_type: ObjectType + object_privilege: ObjectPrivilege + object_name_index: int + object_name_indexs: int + def __init__(self, object_type: _Optional[_Union[ObjectType, str]] = ..., object_privilege: _Optional[_Union[ObjectPrivilege, str]] = ..., object_name_index: _Optional[int] = ..., object_name_indexs: _Optional[int] = ...) -> None: ... + +class SegmentStats(_message.Message): + __slots__ = ("SegmentID", "NumRows") + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + NUMROWS_FIELD_NUMBER: _ClassVar[int] + SegmentID: int + NumRows: int + def __init__(self, SegmentID: _Optional[int] = ..., NumRows: _Optional[int] = ...) -> None: ... + +class ClientInfo(_message.Message): + __slots__ = ("sdk_type", "sdk_version", "local_time", "user", "host", "reserved") + class ReservedEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + SDK_TYPE_FIELD_NUMBER: _ClassVar[int] + SDK_VERSION_FIELD_NUMBER: _ClassVar[int] + LOCAL_TIME_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + HOST_FIELD_NUMBER: _ClassVar[int] + RESERVED_FIELD_NUMBER: _ClassVar[int] + sdk_type: str + sdk_version: str + local_time: str + user: str + host: str + reserved: _containers.ScalarMap[str, str] + def __init__(self, sdk_type: _Optional[str] = ..., sdk_version: _Optional[str] = ..., local_time: _Optional[str] = ..., user: _Optional[str] = ..., host: _Optional[str] = ..., reserved: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class ServerInfo(_message.Message): + __slots__ = ("build_tags", "build_time", "git_commit", "go_version", "deploy_mode", "reserved") + class ReservedEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + BUILD_TAGS_FIELD_NUMBER: _ClassVar[int] + BUILD_TIME_FIELD_NUMBER: _ClassVar[int] + GIT_COMMIT_FIELD_NUMBER: _ClassVar[int] + GO_VERSION_FIELD_NUMBER: _ClassVar[int] + DEPLOY_MODE_FIELD_NUMBER: _ClassVar[int] + RESERVED_FIELD_NUMBER: _ClassVar[int] + build_tags: str + build_time: str + git_commit: str + go_version: str + deploy_mode: str + reserved: _containers.ScalarMap[str, str] + def __init__(self, build_tags: _Optional[str] = ..., build_time: _Optional[str] = ..., git_commit: _Optional[str] = ..., go_version: _Optional[str] = ..., deploy_mode: _Optional[str] = ..., reserved: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class NodeInfo(_message.Message): + __slots__ = ("node_id", "address", "hostname") + NODE_ID_FIELD_NUMBER: _ClassVar[int] + ADDRESS_FIELD_NUMBER: _ClassVar[int] + HOSTNAME_FIELD_NUMBER: _ClassVar[int] + node_id: int + address: str + hostname: str + def __init__(self, node_id: _Optional[int] = ..., address: _Optional[str] = ..., hostname: _Optional[str] = ...) -> None: ... + +class ReplicateConfiguration(_message.Message): + __slots__ = ("clusters", "cross_cluster_topology") + CLUSTERS_FIELD_NUMBER: _ClassVar[int] + CROSS_CLUSTER_TOPOLOGY_FIELD_NUMBER: _ClassVar[int] + clusters: _containers.RepeatedCompositeFieldContainer[MilvusCluster] + cross_cluster_topology: _containers.RepeatedCompositeFieldContainer[CrossClusterTopology] + def __init__(self, clusters: _Optional[_Iterable[_Union[MilvusCluster, _Mapping]]] = ..., cross_cluster_topology: _Optional[_Iterable[_Union[CrossClusterTopology, _Mapping]]] = ...) -> None: ... + +class ConnectionParam(_message.Message): + __slots__ = ("uri", "token") + URI_FIELD_NUMBER: _ClassVar[int] + TOKEN_FIELD_NUMBER: _ClassVar[int] + uri: str + token: str + def __init__(self, uri: _Optional[str] = ..., token: _Optional[str] = ...) -> None: ... + +class MilvusCluster(_message.Message): + __slots__ = ("cluster_id", "connection_param", "pchannels") + CLUSTER_ID_FIELD_NUMBER: _ClassVar[int] + CONNECTION_PARAM_FIELD_NUMBER: _ClassVar[int] + PCHANNELS_FIELD_NUMBER: _ClassVar[int] + cluster_id: str + connection_param: ConnectionParam + pchannels: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, cluster_id: _Optional[str] = ..., connection_param: _Optional[_Union[ConnectionParam, _Mapping]] = ..., pchannels: _Optional[_Iterable[str]] = ...) -> None: ... + +class CrossClusterTopology(_message.Message): + __slots__ = ("source_cluster_id", "target_cluster_id") + SOURCE_CLUSTER_ID_FIELD_NUMBER: _ClassVar[int] + TARGET_CLUSTER_ID_FIELD_NUMBER: _ClassVar[int] + source_cluster_id: str + target_cluster_id: str + def __init__(self, source_cluster_id: _Optional[str] = ..., target_cluster_id: _Optional[str] = ...) -> None: ... + +class MessageID(_message.Message): + __slots__ = ("id", "WAL_name") + ID_FIELD_NUMBER: _ClassVar[int] + WAL_NAME_FIELD_NUMBER: _ClassVar[int] + id: str + WAL_name: WALName + def __init__(self, id: _Optional[str] = ..., WAL_name: _Optional[_Union[WALName, str]] = ...) -> None: ... + +class ImmutableMessage(_message.Message): + __slots__ = ("id", "payload", "properties") + class PropertiesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + ID_FIELD_NUMBER: _ClassVar[int] + PAYLOAD_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + id: MessageID + payload: bytes + properties: _containers.ScalarMap[str, str] + def __init__(self, id: _Optional[_Union[MessageID, _Mapping]] = ..., payload: _Optional[bytes] = ..., properties: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class ReplicateCheckpoint(_message.Message): + __slots__ = ("cluster_id", "pchannel", "message_id", "time_tick") + CLUSTER_ID_FIELD_NUMBER: _ClassVar[int] + PCHANNEL_FIELD_NUMBER: _ClassVar[int] + MESSAGE_ID_FIELD_NUMBER: _ClassVar[int] + TIME_TICK_FIELD_NUMBER: _ClassVar[int] + cluster_id: str + pchannel: str + message_id: MessageID + time_tick: int + def __init__(self, cluster_id: _Optional[str] = ..., pchannel: _Optional[str] = ..., message_id: _Optional[_Union[MessageID, _Mapping]] = ..., time_tick: _Optional[int] = ...) -> None: ... + +class HighlightData(_message.Message): + __slots__ = ("fragments",) + FRAGMENTS_FIELD_NUMBER: _ClassVar[int] + fragments: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, fragments: _Optional[_Iterable[str]] = ...) -> None: ... + +class HighlightResult(_message.Message): + __slots__ = ("field_name", "datas") + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + DATAS_FIELD_NUMBER: _ClassVar[int] + field_name: str + datas: _containers.RepeatedCompositeFieldContainer[HighlightData] + def __init__(self, field_name: _Optional[str] = ..., datas: _Optional[_Iterable[_Union[HighlightData, _Mapping]]] = ...) -> None: ... + +class Highlighter(_message.Message): + __slots__ = ("type", "params") + TYPE_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + type: HighlightType + params: _containers.RepeatedCompositeFieldContainer[KeyValuePair] + def __init__(self, type: _Optional[_Union[HighlightType, str]] = ..., params: _Optional[_Iterable[_Union[KeyValuePair, _Mapping]]] = ...) -> None: ... diff --git a/pymilvus/grpc_gen/feder_pb2.py b/pymilvus/grpc_gen/feder_pb2.py new file mode 100644 index 000000000..9cbd6ca48 --- /dev/null +++ b/pymilvus/grpc_gen/feder_pb2.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: feder.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'feder.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import common_pb2 as common__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x66\x65\x64\x65r.proto\x12\x12milvus.proto.feder\x1a\x0c\x63ommon.proto\"9\n\x10SegmentIndexData\x12\x11\n\tsegmentID\x18\x01 \x01(\x03\x12\x12\n\nindex_data\x18\x02 \x01(\t\"A\n\x18\x46\x65\x64\x65rSegmentSearchResult\x12\x11\n\tsegmentID\x18\x01 \x01(\x03\x12\x12\n\nvisit_info\x18\x02 \x01(\t\"t\n\x19ListIndexedSegmentRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\x12\x12\n\nindex_name\x18\x03 \x01(\t\"]\n\x1aListIndexedSegmentResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x12\n\nsegmentIDs\x18\x02 \x03(\x03\"\x8f\x01\n\x1f\x44\x65scribeSegmentIndexDataRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\x12\x12\n\nindex_name\x18\x03 \x01(\t\x12\x13\n\x0bsegmentsIDs\x18\x04 \x03(\x03\"\xb9\x02\n DescribeSegmentIndexDataResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12W\n\nindex_data\x18\x02 \x03(\x0b\x32\x43.milvus.proto.feder.DescribeSegmentIndexDataResponse.IndexDataEntry\x12\x37\n\x0cindex_params\x18\x03 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x1aV\n\x0eIndexDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.milvus.proto.feder.SegmentIndexData:\x02\x38\x01\x42\x35Z3github.com/milvus-io/milvus-proto/go-api/v2/federpbb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'feder_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z3github.com/milvus-io/milvus-proto/go-api/v2/federpb' + _globals['_DESCRIBESEGMENTINDEXDATARESPONSE_INDEXDATAENTRY']._loaded_options = None + _globals['_DESCRIBESEGMENTINDEXDATARESPONSE_INDEXDATAENTRY']._serialized_options = b'8\001' + _globals['_SEGMENTINDEXDATA']._serialized_start=49 + _globals['_SEGMENTINDEXDATA']._serialized_end=106 + _globals['_FEDERSEGMENTSEARCHRESULT']._serialized_start=108 + _globals['_FEDERSEGMENTSEARCHRESULT']._serialized_end=173 + _globals['_LISTINDEXEDSEGMENTREQUEST']._serialized_start=175 + _globals['_LISTINDEXEDSEGMENTREQUEST']._serialized_end=291 + _globals['_LISTINDEXEDSEGMENTRESPONSE']._serialized_start=293 + _globals['_LISTINDEXEDSEGMENTRESPONSE']._serialized_end=386 + _globals['_DESCRIBESEGMENTINDEXDATAREQUEST']._serialized_start=389 + _globals['_DESCRIBESEGMENTINDEXDATAREQUEST']._serialized_end=532 + _globals['_DESCRIBESEGMENTINDEXDATARESPONSE']._serialized_start=535 + _globals['_DESCRIBESEGMENTINDEXDATARESPONSE']._serialized_end=848 + _globals['_DESCRIBESEGMENTINDEXDATARESPONSE_INDEXDATAENTRY']._serialized_start=762 + _globals['_DESCRIBESEGMENTINDEXDATARESPONSE_INDEXDATAENTRY']._serialized_end=848 +# @@protoc_insertion_point(module_scope) diff --git a/pymilvus/grpc_gen/feder_pb2.pyi b/pymilvus/grpc_gen/feder_pb2.pyi new file mode 100644 index 000000000..517e5fe35 --- /dev/null +++ b/pymilvus/grpc_gen/feder_pb2.pyi @@ -0,0 +1,70 @@ +from . import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class SegmentIndexData(_message.Message): + __slots__ = ("segmentID", "index_data") + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + INDEX_DATA_FIELD_NUMBER: _ClassVar[int] + segmentID: int + index_data: str + def __init__(self, segmentID: _Optional[int] = ..., index_data: _Optional[str] = ...) -> None: ... + +class FederSegmentSearchResult(_message.Message): + __slots__ = ("segmentID", "visit_info") + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + VISIT_INFO_FIELD_NUMBER: _ClassVar[int] + segmentID: int + visit_info: str + def __init__(self, segmentID: _Optional[int] = ..., visit_info: _Optional[str] = ...) -> None: ... + +class ListIndexedSegmentRequest(_message.Message): + __slots__ = ("base", "collection_name", "index_name") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collection_name: str + index_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collection_name: _Optional[str] = ..., index_name: _Optional[str] = ...) -> None: ... + +class ListIndexedSegmentResponse(_message.Message): + __slots__ = ("status", "segmentIDs") + STATUS_FIELD_NUMBER: _ClassVar[int] + SEGMENTIDS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + segmentIDs: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., segmentIDs: _Optional[_Iterable[int]] = ...) -> None: ... + +class DescribeSegmentIndexDataRequest(_message.Message): + __slots__ = ("base", "collection_name", "index_name", "segmentsIDs") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + SEGMENTSIDS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collection_name: str + index_name: str + segmentsIDs: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collection_name: _Optional[str] = ..., index_name: _Optional[str] = ..., segmentsIDs: _Optional[_Iterable[int]] = ...) -> None: ... + +class DescribeSegmentIndexDataResponse(_message.Message): + __slots__ = ("status", "index_data", "index_params") + class IndexDataEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: int + value: SegmentIndexData + def __init__(self, key: _Optional[int] = ..., value: _Optional[_Union[SegmentIndexData, _Mapping]] = ...) -> None: ... + STATUS_FIELD_NUMBER: _ClassVar[int] + INDEX_DATA_FIELD_NUMBER: _ClassVar[int] + INDEX_PARAMS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + index_data: _containers.MessageMap[int, SegmentIndexData] + index_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., index_data: _Optional[_Mapping[int, SegmentIndexData]] = ..., index_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... diff --git a/pymilvus/grpc_gen/milvus-proto b/pymilvus/grpc_gen/milvus-proto new file mode 160000 index 000000000..597d20a62 --- /dev/null +++ b/pymilvus/grpc_gen/milvus-proto @@ -0,0 +1 @@ +Subproject commit 597d20a62ebc70ee670b24f6b5ada6ee84ad531b diff --git a/pymilvus/grpc_gen/milvus_pb2.py b/pymilvus/grpc_gen/milvus_pb2.py index a0727d25c..d23176e0f 100644 --- a/pymilvus/grpc_gen/milvus_pb2.py +++ b/pymilvus/grpc_gen/milvus_pb2.py @@ -1,5174 +1,769 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: milvus.proto +# Protobuf Python Version: 5.27.2 """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'milvus.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() from . import common_pb2 as common__pb2 +from . import rg_pb2 as rg__pb2 from . import schema_pb2 as schema__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='milvus.proto', - package='milvus.proto.milvus', - syntax='proto3', - serialized_options=b'Z3github.com/milvus-io/milvus/internal/proto/milvuspb', - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x0cmilvus.proto\x12\x13milvus.proto.milvus\x1a\x0c\x63ommon.proto\x1a\x0cschema.proto\"y\n\x12\x43reateAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\r\n\x05\x61lias\x18\x04 \x01(\t\"^\n\x10\x44ropAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\"x\n\x11\x41lterAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\r\n\x05\x61lias\x18\x04 \x01(\t\"\xd5\x01\n\x17\x43reateCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x0e\n\x06schema\x18\x04 \x01(\x0c\x12\x12\n\nshards_num\x18\x05 \x01(\x05\x12@\n\x11\x63onsistency_level\x18\x06 \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\"m\n\x15\x44ropCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\"\x80\x01\n\x14HasCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\ntime_stamp\x18\x04 \x01(\x04\"J\n\x0c\x42oolResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\r\n\x05value\x18\x02 \x01(\x08\"L\n\x0eStringResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\r\n\x05value\x18\x02 \x01(\t\"\x9b\x01\n\x19\x44\x65scribeCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x12\n\ntime_stamp\x18\x05 \x01(\x04\"\xb1\x03\n\x1a\x44\x65scribeCollectionResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x35\n\x06schema\x18\x02 \x01(\x0b\x32%.milvus.proto.schema.CollectionSchema\x12\x14\n\x0c\x63ollectionID\x18\x03 \x01(\x03\x12\x1d\n\x15virtual_channel_names\x18\x04 \x03(\t\x12\x1e\n\x16physical_channel_names\x18\x05 \x03(\t\x12\x19\n\x11\x63reated_timestamp\x18\x06 \x01(\x04\x12\x1d\n\x15\x63reated_utc_timestamp\x18\x07 \x01(\x04\x12\x12\n\nshards_num\x18\x08 \x01(\x05\x12\x0f\n\x07\x61liases\x18\t \x03(\t\x12\x39\n\x0fstart_positions\x18\n \x03(\x0b\x32 .milvus.proto.common.KeyDataPair\x12@\n\x11\x63onsistency_level\x18\x0b \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\"m\n\x15LoadCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\"p\n\x18ReleaseCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\"v\n\x1eGetCollectionStatisticsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\"\x80\x01\n\x1fGetCollectionStatisticsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x05stats\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xb0\x01\n\x16ShowCollectionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x12\n\ntime_stamp\x18\x03 \x01(\x04\x12+\n\x04type\x18\x04 \x01(\x0e\x32\x1d.milvus.proto.milvus.ShowType\x12\x18\n\x10\x63ollection_names\x18\x05 \x03(\t\"\xd2\x01\n\x17ShowCollectionsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x18\n\x10\x63ollection_names\x18\x02 \x03(\t\x12\x16\n\x0e\x63ollection_ids\x18\x03 \x03(\x03\x12\x1a\n\x12\x63reated_timestamps\x18\x04 \x03(\x04\x12\x1e\n\x16\x63reated_utc_timestamps\x18\x05 \x03(\x04\x12\x1c\n\x14inMemory_percentages\x18\x06 \x03(\x03\"\x86\x01\n\x16\x43reatePartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\"\x84\x01\n\x14\x44ropPartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\"\x83\x01\n\x13HasPartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\"\x86\x01\n\x15LoadPartitionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\"\x89\x01\n\x18ReleasePartitionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\"\x8d\x01\n\x1dGetPartitionStatisticsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\"\x7f\n\x1eGetPartitionStatisticsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x05stats\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xc9\x01\n\x15ShowPartitionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x17\n\x0fpartition_names\x18\x05 \x03(\t\x12+\n\x04type\x18\x06 \x01(\x0e\x32\x1d.milvus.proto.milvus.ShowType\"\xce\x01\n\x16ShowPartitionsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x17\n\x0fpartition_names\x18\x02 \x03(\t\x12\x14\n\x0cpartitionIDs\x18\x03 \x03(\x03\x12\x1a\n\x12\x63reated_timestamps\x18\x04 \x03(\x04\x12\x1e\n\x16\x63reated_utc_timestamps\x18\x05 \x03(\x04\x12\x1c\n\x14inMemory_percentages\x18\x06 \x03(\x03\"m\n\x16\x44\x65scribeSegmentRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x11\n\tsegmentID\x18\x03 \x01(\x03\"\x8f\x01\n\x17\x44\x65scribeSegmentResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07indexID\x18\x02 \x01(\x03\x12\x0f\n\x07\x62uildID\x18\x03 \x01(\x03\x12\x14\n\x0c\x65nable_index\x18\x04 \x01(\x08\x12\x0f\n\x07\x66ieldID\x18\x05 \x01(\x03\"l\n\x13ShowSegmentsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x03 \x01(\x03\"W\n\x14ShowSegmentsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x12\n\nsegmentIDs\x18\x02 \x03(\x03\"\xb7\x01\n\x12\x43reateIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x37\n\x0c\x65xtra_params\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\x94\x01\n\x14\x44\x65scribeIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t\"~\n\x10IndexDescription\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x0f\n\x07indexID\x18\x02 \x01(\x03\x12\x31\n\x06params\x18\x03 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x12\n\nfield_name\x18\x04 \x01(\t\"\x87\x01\n\x15\x44\x65scribeIndexResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x41\n\x12index_descriptions\x18\x02 \x03(\x0b\x32%.milvus.proto.milvus.IndexDescription\"\x9c\x01\n\x1cGetIndexBuildProgressRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t\"v\n\x1dGetIndexBuildProgressResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x14\n\x0cindexed_rows\x18\x02 \x01(\x03\x12\x12\n\ntotal_rows\x18\x03 \x01(\x03\"\x94\x01\n\x14GetIndexStateRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t\"\x89\x01\n\x15GetIndexStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12.\n\x05state\x18\x02 \x01(\x0e\x32\x1f.milvus.proto.common.IndexState\x12\x13\n\x0b\x66\x61il_reason\x18\x03 \x01(\t\"\x90\x01\n\x10\x44ropIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t\"\xd7\x01\n\rInsertRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x33\n\x0b\x66ields_data\x18\x05 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x11\n\thash_keys\x18\x06 \x03(\r\x12\x10\n\x08num_rows\x18\x07 \x01(\r\"\xf0\x01\n\x0eMutationResult\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12%\n\x03IDs\x18\x02 \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\x12\n\nsucc_index\x18\x03 \x03(\r\x12\x11\n\terr_index\x18\x04 \x03(\r\x12\x14\n\x0c\x61\x63knowledged\x18\x05 \x01(\x08\x12\x12\n\ninsert_cnt\x18\x06 \x01(\x03\x12\x12\n\ndelete_cnt\x18\x07 \x01(\x03\x12\x12\n\nupsert_cnt\x18\x08 \x01(\x03\x12\x11\n\ttimestamp\x18\t \x01(\x04\"\x9e\x01\n\rDeleteRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x05 \x01(\t\x12\x11\n\thash_keys\x18\x06 \x03(\r\"c\n\x10PlaceholderValue\x12\x0b\n\x03tag\x18\x01 \x01(\t\x12\x32\n\x04type\x18\x02 \x01(\x0e\x32$.milvus.proto.milvus.PlaceholderType\x12\x0e\n\x06values\x18\x03 \x03(\x0c\"O\n\x10PlaceholderGroup\x12;\n\x0cplaceholders\x18\x01 \x03(\x0b\x32%.milvus.proto.milvus.PlaceholderValue\"\xde\x02\n\rSearchRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\x12\x0b\n\x03\x64sl\x18\x05 \x01(\t\x12\x19\n\x11placeholder_group\x18\x06 \x01(\x0c\x12.\n\x08\x64sl_type\x18\x07 \x01(\x0e\x32\x1c.milvus.proto.common.DslType\x12\x15\n\routput_fields\x18\x08 \x03(\t\x12\x38\n\rsearch_params\x18\t \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x18\n\x10travel_timestamp\x18\n \x01(\x04\x12\x1b\n\x13guarantee_timestamp\x18\x0b \x01(\x04\"5\n\x04Hits\x12\x0b\n\x03IDs\x18\x01 \x03(\x03\x12\x10\n\x08row_data\x18\x02 \x03(\x0c\x12\x0e\n\x06scores\x18\x03 \x03(\x02\"t\n\rSearchResults\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x36\n\x07results\x18\x02 \x01(\x0b\x32%.milvus.proto.schema.SearchResultData\"e\n\x0c\x46lushRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x18\n\x10\x63ollection_names\x18\x03 \x03(\t\"\xe9\x01\n\rFlushResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12G\n\x0b\x63oll_segIDs\x18\x03 \x03(\x0b\x32\x32.milvus.proto.milvus.FlushResponse.CollSegIDsEntry\x1aQ\n\x0f\x43ollSegIDsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArray:\x02\x38\x01\"\xd9\x01\n\x0cQueryRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x04 \x01(\t\x12\x15\n\routput_fields\x18\x05 \x03(\t\x12\x17\n\x0fpartition_names\x18\x06 \x03(\t\x12\x18\n\x10travel_timestamp\x18\x07 \x01(\x04\x12\x1b\n\x13guarantee_timestamp\x18\x08 \x01(\x04\"p\n\x0cQueryResults\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x33\n\x0b\x66ields_data\x18\x02 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\"}\n\tVectorIDs\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12*\n\x08id_array\x18\x03 \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\"\x83\x01\n\x0cVectorsArray\x12\x32\n\x08id_array\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.milvus.VectorIDsH\x00\x12\x36\n\ndata_array\x18\x02 \x01(\x0b\x32 .milvus.proto.schema.VectorFieldH\x00\x42\x07\n\x05\x61rray\"\xdd\x01\n\x13\x43\x61lcDistanceRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x32\n\x07op_left\x18\x02 \x01(\x0b\x32!.milvus.proto.milvus.VectorsArray\x12\x33\n\x08op_right\x18\x03 \x01(\x0b\x32!.milvus.proto.milvus.VectorsArray\x12\x31\n\x06params\x18\x04 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xb5\x01\n\x13\x43\x61lcDistanceResults\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x31\n\x08int_dist\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.schema.IntArrayH\x00\x12\x35\n\nfloat_dist\x18\x03 \x01(\x0b\x32\x1f.milvus.proto.schema.FloatArrayH\x00\x42\x07\n\x05\x61rray\"\x99\x01\n\x15PersistentSegmentInfo\x12\x11\n\tsegmentID\x18\x01 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x03 \x01(\x03\x12\x10\n\x08num_rows\x18\x04 \x01(\x03\x12\x30\n\x05state\x18\x05 \x01(\x0e\x32!.milvus.proto.common.SegmentState\"u\n\x1fGetPersistentSegmentInfoRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0e\n\x06\x64\x62Name\x18\x02 \x01(\t\x12\x16\n\x0e\x63ollectionName\x18\x03 \x01(\t\"\x8a\x01\n GetPersistentSegmentInfoResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x39\n\x05infos\x18\x02 \x03(\x0b\x32*.milvus.proto.milvus.PersistentSegmentInfo\"\xdb\x01\n\x10QuerySegmentInfo\x12\x11\n\tsegmentID\x18\x01 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x03 \x01(\x03\x12\x10\n\x08mem_size\x18\x04 \x01(\x03\x12\x10\n\x08num_rows\x18\x05 \x01(\x03\x12\x12\n\nindex_name\x18\x06 \x01(\t\x12\x0f\n\x07indexID\x18\x07 \x01(\x03\x12\x0e\n\x06nodeID\x18\x08 \x01(\x03\x12\x30\n\x05state\x18\t \x01(\x0e\x32!.milvus.proto.common.SegmentState\"p\n\x1aGetQuerySegmentInfoRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0e\n\x06\x64\x62Name\x18\x02 \x01(\t\x12\x16\n\x0e\x63ollectionName\x18\x03 \x01(\t\"\x80\x01\n\x1bGetQuerySegmentInfoResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x34\n\x05infos\x18\x02 \x03(\x0b\x32%.milvus.proto.milvus.QuerySegmentInfo\"$\n\x0c\x44ummyRequest\x12\x14\n\x0crequest_type\x18\x01 \x01(\t\"!\n\rDummyResponse\x12\x10\n\x08response\x18\x01 \x01(\t\"\x15\n\x13RegisterLinkRequest\"r\n\x14RegisterLinkResponse\x12-\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.Address\x12+\n\x06status\x18\x02 \x01(\x0b\x32\x1b.milvus.proto.common.Status\"P\n\x11GetMetricsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07request\x18\x02 \x01(\t\"k\n\x12GetMetricsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x10\n\x08response\x18\x02 \x01(\t\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\x84\x01\n\x12LoadBalanceRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x12\n\nsrc_nodeID\x18\x02 \x01(\x03\x12\x13\n\x0b\x64st_nodeIDs\x18\x03 \x03(\x03\x12\x19\n\x11sealed_segmentIDs\x18\x04 \x03(\x03\"C\n\x17ManualCompactionRequest\x12\x14\n\x0c\x63ollectionID\x18\x01 \x01(\x03\x12\x12\n\ntimetravel\x18\x02 \x01(\x04\"]\n\x18ManualCompactionResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x14\n\x0c\x63ompactionID\x18\x02 \x01(\x03\"1\n\x19GetCompactionStateRequest\x12\x14\n\x0c\x63ompactionID\x18\x01 \x01(\x03\"\xc7\x01\n\x1aGetCompactionStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x33\n\x05state\x18\x02 \x01(\x0e\x32$.milvus.proto.common.CompactionState\x12\x17\n\x0f\x65xecutingPlanNo\x18\x03 \x01(\x03\x12\x15\n\rtimeoutPlanNo\x18\x04 \x01(\x03\x12\x17\n\x0f\x63ompletedPlanNo\x18\x05 \x01(\x03\"1\n\x19GetCompactionPlansRequest\x12\x14\n\x0c\x63ompactionID\x18\x01 \x01(\x03\"\xbc\x01\n\x1aGetCompactionPlansResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x33\n\x05state\x18\x02 \x01(\x0e\x32$.milvus.proto.common.CompactionState\x12<\n\nmergeInfos\x18\x03 \x03(\x0b\x32(.milvus.proto.milvus.CompactionMergeInfo\"6\n\x13\x43ompactionMergeInfo\x12\x0f\n\x07sources\x18\x01 \x03(\x03\x12\x0e\n\x06target\x18\x02 \x01(\x03\"*\n\x14GetFlushStateRequest\x12\x12\n\nsegmentIDs\x18\x01 \x03(\x03\"U\n\x15GetFlushStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x66lushed\x18\x02 \x01(\x08*!\n\x08ShowType\x12\x07\n\x03\x41ll\x10\x00\x12\x0c\n\x08InMemory\x10\x01*>\n\x0fPlaceholderType\x12\x08\n\x04None\x10\x00\x12\x10\n\x0c\x42inaryVector\x10\x64\x12\x0f\n\x0b\x46loatVector\x10\x65\x32\x85\x1f\n\rMilvusService\x12_\n\x10\x43reateCollection\x12,.milvus.proto.milvus.CreateCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12[\n\x0e\x44ropCollection\x12*.milvus.proto.milvus.DropCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12_\n\rHasCollection\x12).milvus.proto.milvus.HasCollectionRequest\x1a!.milvus.proto.milvus.BoolResponse\"\x00\x12[\n\x0eLoadCollection\x12*.milvus.proto.milvus.LoadCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x61\n\x11ReleaseCollection\x12-.milvus.proto.milvus.ReleaseCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12w\n\x12\x44\x65scribeCollection\x12..milvus.proto.milvus.DescribeCollectionRequest\x1a/.milvus.proto.milvus.DescribeCollectionResponse\"\x00\x12\x86\x01\n\x17GetCollectionStatistics\x12\x33.milvus.proto.milvus.GetCollectionStatisticsRequest\x1a\x34.milvus.proto.milvus.GetCollectionStatisticsResponse\"\x00\x12n\n\x0fShowCollections\x12+.milvus.proto.milvus.ShowCollectionsRequest\x1a,.milvus.proto.milvus.ShowCollectionsResponse\"\x00\x12]\n\x0f\x43reatePartition\x12+.milvus.proto.milvus.CreatePartitionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12Y\n\rDropPartition\x12).milvus.proto.milvus.DropPartitionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12]\n\x0cHasPartition\x12(.milvus.proto.milvus.HasPartitionRequest\x1a!.milvus.proto.milvus.BoolResponse\"\x00\x12[\n\x0eLoadPartitions\x12*.milvus.proto.milvus.LoadPartitionsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x61\n\x11ReleasePartitions\x12-.milvus.proto.milvus.ReleasePartitionsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x83\x01\n\x16GetPartitionStatistics\x12\x32.milvus.proto.milvus.GetPartitionStatisticsRequest\x1a\x33.milvus.proto.milvus.GetPartitionStatisticsResponse\"\x00\x12k\n\x0eShowPartitions\x12*.milvus.proto.milvus.ShowPartitionsRequest\x1a+.milvus.proto.milvus.ShowPartitionsResponse\"\x00\x12U\n\x0b\x43reateAlias\x12\'.milvus.proto.milvus.CreateAliasRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12Q\n\tDropAlias\x12%.milvus.proto.milvus.DropAliasRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12S\n\nAlterAlias\x12&.milvus.proto.milvus.AlterAliasRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12U\n\x0b\x43reateIndex\x12\'.milvus.proto.milvus.CreateIndexRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12h\n\rDescribeIndex\x12).milvus.proto.milvus.DescribeIndexRequest\x1a*.milvus.proto.milvus.DescribeIndexResponse\"\x00\x12h\n\rGetIndexState\x12).milvus.proto.milvus.GetIndexStateRequest\x1a*.milvus.proto.milvus.GetIndexStateResponse\"\x00\x12\x80\x01\n\x15GetIndexBuildProgress\x12\x31.milvus.proto.milvus.GetIndexBuildProgressRequest\x1a\x32.milvus.proto.milvus.GetIndexBuildProgressResponse\"\x00\x12Q\n\tDropIndex\x12%.milvus.proto.milvus.DropIndexRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12S\n\x06Insert\x12\".milvus.proto.milvus.InsertRequest\x1a#.milvus.proto.milvus.MutationResult\"\x00\x12S\n\x06\x44\x65lete\x12\".milvus.proto.milvus.DeleteRequest\x1a#.milvus.proto.milvus.MutationResult\"\x00\x12R\n\x06Search\x12\".milvus.proto.milvus.SearchRequest\x1a\".milvus.proto.milvus.SearchResults\"\x00\x12P\n\x05\x46lush\x12!.milvus.proto.milvus.FlushRequest\x1a\".milvus.proto.milvus.FlushResponse\"\x00\x12O\n\x05Query\x12!.milvus.proto.milvus.QueryRequest\x1a!.milvus.proto.milvus.QueryResults\"\x00\x12\x64\n\x0c\x43\x61lcDistance\x12(.milvus.proto.milvus.CalcDistanceRequest\x1a(.milvus.proto.milvus.CalcDistanceResults\"\x00\x12h\n\rGetFlushState\x12).milvus.proto.milvus.GetFlushStateRequest\x1a*.milvus.proto.milvus.GetFlushStateResponse\"\x00\x12\x89\x01\n\x18GetPersistentSegmentInfo\x12\x34.milvus.proto.milvus.GetPersistentSegmentInfoRequest\x1a\x35.milvus.proto.milvus.GetPersistentSegmentInfoResponse\"\x00\x12z\n\x13GetQuerySegmentInfo\x12/.milvus.proto.milvus.GetQuerySegmentInfoRequest\x1a\x30.milvus.proto.milvus.GetQuerySegmentInfoResponse\"\x00\x12P\n\x05\x44ummy\x12!.milvus.proto.milvus.DummyRequest\x1a\".milvus.proto.milvus.DummyResponse\"\x00\x12\x65\n\x0cRegisterLink\x12(.milvus.proto.milvus.RegisterLinkRequest\x1a).milvus.proto.milvus.RegisterLinkResponse\"\x00\x12_\n\nGetMetrics\x12&.milvus.proto.milvus.GetMetricsRequest\x1a\'.milvus.proto.milvus.GetMetricsResponse\"\x00\x12U\n\x0bLoadBalance\x12\'.milvus.proto.milvus.LoadBalanceRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12w\n\x12GetCompactionState\x12..milvus.proto.milvus.GetCompactionStateRequest\x1a/.milvus.proto.milvus.GetCompactionStateResponse\"\x00\x12q\n\x10ManualCompaction\x12,.milvus.proto.milvus.ManualCompactionRequest\x1a-.milvus.proto.milvus.ManualCompactionResponse\"\x00\x12\x80\x01\n\x1bGetCompactionStateWithPlans\x12..milvus.proto.milvus.GetCompactionPlansRequest\x1a/.milvus.proto.milvus.GetCompactionPlansResponse\"\x00\x32u\n\x0cProxyService\x12\x65\n\x0cRegisterLink\x12(.milvus.proto.milvus.RegisterLinkRequest\x1a).milvus.proto.milvus.RegisterLinkResponse\"\x00\x42\x35Z3github.com/milvus-io/milvus/internal/proto/milvuspbb\x06proto3' - , - dependencies=[common__pb2.DESCRIPTOR,schema__pb2.DESCRIPTOR,]) - -_SHOWTYPE = _descriptor.EnumDescriptor( - name='ShowType', - full_name='milvus.proto.milvus.ShowType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='All', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='InMemory', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=10564, - serialized_end=10597, -) -_sym_db.RegisterEnumDescriptor(_SHOWTYPE) - -ShowType = enum_type_wrapper.EnumTypeWrapper(_SHOWTYPE) -_PLACEHOLDERTYPE = _descriptor.EnumDescriptor( - name='PlaceholderType', - full_name='milvus.proto.milvus.PlaceholderType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='None', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='BinaryVector', index=1, number=100, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FloatVector', index=2, number=101, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=10599, - serialized_end=10661, -) -_sym_db.RegisterEnumDescriptor(_PLACEHOLDERTYPE) - -PlaceholderType = enum_type_wrapper.EnumTypeWrapper(_PLACEHOLDERTYPE) -All = 0 -InMemory = 1 -globals()['None'] = 0 -BinaryVector = 100 -FloatVector = 101 - - - -_CREATEALIASREQUEST = _descriptor.Descriptor( - name='CreateAliasRequest', - full_name='milvus.proto.milvus.CreateAliasRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.CreateAliasRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.CreateAliasRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.CreateAliasRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='alias', full_name='milvus.proto.milvus.CreateAliasRequest.alias', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=65, - serialized_end=186, -) - - -_DROPALIASREQUEST = _descriptor.Descriptor( - name='DropAliasRequest', - full_name='milvus.proto.milvus.DropAliasRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DropAliasRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DropAliasRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='alias', full_name='milvus.proto.milvus.DropAliasRequest.alias', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=188, - serialized_end=282, -) - - -_ALTERALIASREQUEST = _descriptor.Descriptor( - name='AlterAliasRequest', - full_name='milvus.proto.milvus.AlterAliasRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.AlterAliasRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.AlterAliasRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.AlterAliasRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='alias', full_name='milvus.proto.milvus.AlterAliasRequest.alias', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=284, - serialized_end=404, -) - - -_CREATECOLLECTIONREQUEST = _descriptor.Descriptor( - name='CreateCollectionRequest', - full_name='milvus.proto.milvus.CreateCollectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.CreateCollectionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.CreateCollectionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.CreateCollectionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='schema', full_name='milvus.proto.milvus.CreateCollectionRequest.schema', index=3, - number=4, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='shards_num', full_name='milvus.proto.milvus.CreateCollectionRequest.shards_num', index=4, - number=5, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='consistency_level', full_name='milvus.proto.milvus.CreateCollectionRequest.consistency_level', index=5, - number=6, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=407, - serialized_end=620, -) - - -_DROPCOLLECTIONREQUEST = _descriptor.Descriptor( - name='DropCollectionRequest', - full_name='milvus.proto.milvus.DropCollectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DropCollectionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DropCollectionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.DropCollectionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=622, - serialized_end=731, -) - - -_HASCOLLECTIONREQUEST = _descriptor.Descriptor( - name='HasCollectionRequest', - full_name='milvus.proto.milvus.HasCollectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.HasCollectionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.HasCollectionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.HasCollectionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='time_stamp', full_name='milvus.proto.milvus.HasCollectionRequest.time_stamp', index=3, - number=4, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=734, - serialized_end=862, -) - - -_BOOLRESPONSE = _descriptor.Descriptor( - name='BoolResponse', - full_name='milvus.proto.milvus.BoolResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.BoolResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='milvus.proto.milvus.BoolResponse.value', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=864, - serialized_end=938, -) - - -_STRINGRESPONSE = _descriptor.Descriptor( - name='StringResponse', - full_name='milvus.proto.milvus.StringResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.StringResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='milvus.proto.milvus.StringResponse.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=940, - serialized_end=1016, -) - - -_DESCRIBECOLLECTIONREQUEST = _descriptor.Descriptor( - name='DescribeCollectionRequest', - full_name='milvus.proto.milvus.DescribeCollectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DescribeCollectionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DescribeCollectionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.DescribeCollectionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.DescribeCollectionRequest.collectionID', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='time_stamp', full_name='milvus.proto.milvus.DescribeCollectionRequest.time_stamp', index=4, - number=5, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1019, - serialized_end=1174, -) - - -_DESCRIBECOLLECTIONRESPONSE = _descriptor.Descriptor( - name='DescribeCollectionResponse', - full_name='milvus.proto.milvus.DescribeCollectionResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.DescribeCollectionResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='schema', full_name='milvus.proto.milvus.DescribeCollectionResponse.schema', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.DescribeCollectionResponse.collectionID', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='virtual_channel_names', full_name='milvus.proto.milvus.DescribeCollectionResponse.virtual_channel_names', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='physical_channel_names', full_name='milvus.proto.milvus.DescribeCollectionResponse.physical_channel_names', index=4, - number=5, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='created_timestamp', full_name='milvus.proto.milvus.DescribeCollectionResponse.created_timestamp', index=5, - number=6, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='created_utc_timestamp', full_name='milvus.proto.milvus.DescribeCollectionResponse.created_utc_timestamp', index=6, - number=7, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='shards_num', full_name='milvus.proto.milvus.DescribeCollectionResponse.shards_num', index=7, - number=8, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='aliases', full_name='milvus.proto.milvus.DescribeCollectionResponse.aliases', index=8, - number=9, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='start_positions', full_name='milvus.proto.milvus.DescribeCollectionResponse.start_positions', index=9, - number=10, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='consistency_level', full_name='milvus.proto.milvus.DescribeCollectionResponse.consistency_level', index=10, - number=11, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1177, - serialized_end=1610, -) - - -_LOADCOLLECTIONREQUEST = _descriptor.Descriptor( - name='LoadCollectionRequest', - full_name='milvus.proto.milvus.LoadCollectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.LoadCollectionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.LoadCollectionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.LoadCollectionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1612, - serialized_end=1721, -) - - -_RELEASECOLLECTIONREQUEST = _descriptor.Descriptor( - name='ReleaseCollectionRequest', - full_name='milvus.proto.milvus.ReleaseCollectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.ReleaseCollectionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.ReleaseCollectionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.ReleaseCollectionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1723, - serialized_end=1835, -) - - -_GETCOLLECTIONSTATISTICSREQUEST = _descriptor.Descriptor( - name='GetCollectionStatisticsRequest', - full_name='milvus.proto.milvus.GetCollectionStatisticsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetCollectionStatisticsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.GetCollectionStatisticsRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.GetCollectionStatisticsRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1837, - serialized_end=1955, -) - - -_GETCOLLECTIONSTATISTICSRESPONSE = _descriptor.Descriptor( - name='GetCollectionStatisticsResponse', - full_name='milvus.proto.milvus.GetCollectionStatisticsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetCollectionStatisticsResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='stats', full_name='milvus.proto.milvus.GetCollectionStatisticsResponse.stats', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1958, - serialized_end=2086, -) - - -_SHOWCOLLECTIONSREQUEST = _descriptor.Descriptor( - name='ShowCollectionsRequest', - full_name='milvus.proto.milvus.ShowCollectionsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.ShowCollectionsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.ShowCollectionsRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='time_stamp', full_name='milvus.proto.milvus.ShowCollectionsRequest.time_stamp', index=2, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='milvus.proto.milvus.ShowCollectionsRequest.type', index=3, - number=4, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_names', full_name='milvus.proto.milvus.ShowCollectionsRequest.collection_names', index=4, - number=5, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2089, - serialized_end=2265, -) - - -_SHOWCOLLECTIONSRESPONSE = _descriptor.Descriptor( - name='ShowCollectionsResponse', - full_name='milvus.proto.milvus.ShowCollectionsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.ShowCollectionsResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_names', full_name='milvus.proto.milvus.ShowCollectionsResponse.collection_names', index=1, - number=2, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_ids', full_name='milvus.proto.milvus.ShowCollectionsResponse.collection_ids', index=2, - number=3, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='created_timestamps', full_name='milvus.proto.milvus.ShowCollectionsResponse.created_timestamps', index=3, - number=4, type=4, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='created_utc_timestamps', full_name='milvus.proto.milvus.ShowCollectionsResponse.created_utc_timestamps', index=4, - number=5, type=4, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='inMemory_percentages', full_name='milvus.proto.milvus.ShowCollectionsResponse.inMemory_percentages', index=5, - number=6, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2268, - serialized_end=2478, -) - - -_CREATEPARTITIONREQUEST = _descriptor.Descriptor( - name='CreatePartitionRequest', - full_name='milvus.proto.milvus.CreatePartitionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.CreatePartitionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.CreatePartitionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.CreatePartitionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_name', full_name='milvus.proto.milvus.CreatePartitionRequest.partition_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2481, - serialized_end=2615, -) - - -_DROPPARTITIONREQUEST = _descriptor.Descriptor( - name='DropPartitionRequest', - full_name='milvus.proto.milvus.DropPartitionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DropPartitionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DropPartitionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.DropPartitionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_name', full_name='milvus.proto.milvus.DropPartitionRequest.partition_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2618, - serialized_end=2750, -) - - -_HASPARTITIONREQUEST = _descriptor.Descriptor( - name='HasPartitionRequest', - full_name='milvus.proto.milvus.HasPartitionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.HasPartitionRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.HasPartitionRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.HasPartitionRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_name', full_name='milvus.proto.milvus.HasPartitionRequest.partition_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2753, - serialized_end=2884, -) - - -_LOADPARTITIONSREQUEST = _descriptor.Descriptor( - name='LoadPartitionsRequest', - full_name='milvus.proto.milvus.LoadPartitionsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.LoadPartitionsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.LoadPartitionsRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.LoadPartitionsRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.LoadPartitionsRequest.partition_names', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2887, - serialized_end=3021, -) - - -_RELEASEPARTITIONSREQUEST = _descriptor.Descriptor( - name='ReleasePartitionsRequest', - full_name='milvus.proto.milvus.ReleasePartitionsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.ReleasePartitionsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.ReleasePartitionsRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.ReleasePartitionsRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.ReleasePartitionsRequest.partition_names', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3024, - serialized_end=3161, -) - - -_GETPARTITIONSTATISTICSREQUEST = _descriptor.Descriptor( - name='GetPartitionStatisticsRequest', - full_name='milvus.proto.milvus.GetPartitionStatisticsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetPartitionStatisticsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.GetPartitionStatisticsRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.GetPartitionStatisticsRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_name', full_name='milvus.proto.milvus.GetPartitionStatisticsRequest.partition_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3164, - serialized_end=3305, -) - - -_GETPARTITIONSTATISTICSRESPONSE = _descriptor.Descriptor( - name='GetPartitionStatisticsResponse', - full_name='milvus.proto.milvus.GetPartitionStatisticsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetPartitionStatisticsResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='stats', full_name='milvus.proto.milvus.GetPartitionStatisticsResponse.stats', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3307, - serialized_end=3434, -) - - -_SHOWPARTITIONSREQUEST = _descriptor.Descriptor( - name='ShowPartitionsRequest', - full_name='milvus.proto.milvus.ShowPartitionsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.ShowPartitionsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.ShowPartitionsRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.ShowPartitionsRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.ShowPartitionsRequest.collectionID', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.ShowPartitionsRequest.partition_names', index=4, - number=5, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='milvus.proto.milvus.ShowPartitionsRequest.type', index=5, - number=6, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3437, - serialized_end=3638, -) - - -_SHOWPARTITIONSRESPONSE = _descriptor.Descriptor( - name='ShowPartitionsResponse', - full_name='milvus.proto.milvus.ShowPartitionsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.ShowPartitionsResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.ShowPartitionsResponse.partition_names', index=1, - number=2, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partitionIDs', full_name='milvus.proto.milvus.ShowPartitionsResponse.partitionIDs', index=2, - number=3, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='created_timestamps', full_name='milvus.proto.milvus.ShowPartitionsResponse.created_timestamps', index=3, - number=4, type=4, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='created_utc_timestamps', full_name='milvus.proto.milvus.ShowPartitionsResponse.created_utc_timestamps', index=4, - number=5, type=4, cpp_type=4, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='inMemory_percentages', full_name='milvus.proto.milvus.ShowPartitionsResponse.inMemory_percentages', index=5, - number=6, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3641, - serialized_end=3847, -) - - -_DESCRIBESEGMENTREQUEST = _descriptor.Descriptor( - name='DescribeSegmentRequest', - full_name='milvus.proto.milvus.DescribeSegmentRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DescribeSegmentRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.DescribeSegmentRequest.collectionID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='segmentID', full_name='milvus.proto.milvus.DescribeSegmentRequest.segmentID', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3849, - serialized_end=3958, -) - - -_DESCRIBESEGMENTRESPONSE = _descriptor.Descriptor( - name='DescribeSegmentResponse', - full_name='milvus.proto.milvus.DescribeSegmentResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.DescribeSegmentResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='indexID', full_name='milvus.proto.milvus.DescribeSegmentResponse.indexID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='buildID', full_name='milvus.proto.milvus.DescribeSegmentResponse.buildID', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='enable_index', full_name='milvus.proto.milvus.DescribeSegmentResponse.enable_index', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fieldID', full_name='milvus.proto.milvus.DescribeSegmentResponse.fieldID', index=4, - number=5, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=3961, - serialized_end=4104, -) - - -_SHOWSEGMENTSREQUEST = _descriptor.Descriptor( - name='ShowSegmentsRequest', - full_name='milvus.proto.milvus.ShowSegmentsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.ShowSegmentsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.ShowSegmentsRequest.collectionID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partitionID', full_name='milvus.proto.milvus.ShowSegmentsRequest.partitionID', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4106, - serialized_end=4214, -) - - -_SHOWSEGMENTSRESPONSE = _descriptor.Descriptor( - name='ShowSegmentsResponse', - full_name='milvus.proto.milvus.ShowSegmentsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.ShowSegmentsResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='segmentIDs', full_name='milvus.proto.milvus.ShowSegmentsResponse.segmentIDs', index=1, - number=2, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4216, - serialized_end=4303, -) - - -_CREATEINDEXREQUEST = _descriptor.Descriptor( - name='CreateIndexRequest', - full_name='milvus.proto.milvus.CreateIndexRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.CreateIndexRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.CreateIndexRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.CreateIndexRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.CreateIndexRequest.field_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='extra_params', full_name='milvus.proto.milvus.CreateIndexRequest.extra_params', index=4, - number=5, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4306, - serialized_end=4489, -) - - -_DESCRIBEINDEXREQUEST = _descriptor.Descriptor( - name='DescribeIndexRequest', - full_name='milvus.proto.milvus.DescribeIndexRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DescribeIndexRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DescribeIndexRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.DescribeIndexRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.DescribeIndexRequest.field_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_name', full_name='milvus.proto.milvus.DescribeIndexRequest.index_name', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4492, - serialized_end=4640, -) - - -_INDEXDESCRIPTION = _descriptor.Descriptor( - name='IndexDescription', - full_name='milvus.proto.milvus.IndexDescription', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='index_name', full_name='milvus.proto.milvus.IndexDescription.index_name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='indexID', full_name='milvus.proto.milvus.IndexDescription.indexID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='params', full_name='milvus.proto.milvus.IndexDescription.params', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.IndexDescription.field_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4642, - serialized_end=4768, -) - - -_DESCRIBEINDEXRESPONSE = _descriptor.Descriptor( - name='DescribeIndexResponse', - full_name='milvus.proto.milvus.DescribeIndexResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.DescribeIndexResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_descriptions', full_name='milvus.proto.milvus.DescribeIndexResponse.index_descriptions', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4771, - serialized_end=4906, -) - - -_GETINDEXBUILDPROGRESSREQUEST = _descriptor.Descriptor( - name='GetIndexBuildProgressRequest', - full_name='milvus.proto.milvus.GetIndexBuildProgressRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetIndexBuildProgressRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.GetIndexBuildProgressRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.GetIndexBuildProgressRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.GetIndexBuildProgressRequest.field_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_name', full_name='milvus.proto.milvus.GetIndexBuildProgressRequest.index_name', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=4909, - serialized_end=5065, -) - - -_GETINDEXBUILDPROGRESSRESPONSE = _descriptor.Descriptor( - name='GetIndexBuildProgressResponse', - full_name='milvus.proto.milvus.GetIndexBuildProgressResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetIndexBuildProgressResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='indexed_rows', full_name='milvus.proto.milvus.GetIndexBuildProgressResponse.indexed_rows', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='total_rows', full_name='milvus.proto.milvus.GetIndexBuildProgressResponse.total_rows', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=5067, - serialized_end=5185, -) - - -_GETINDEXSTATEREQUEST = _descriptor.Descriptor( - name='GetIndexStateRequest', - full_name='milvus.proto.milvus.GetIndexStateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetIndexStateRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.GetIndexStateRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.GetIndexStateRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.GetIndexStateRequest.field_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_name', full_name='milvus.proto.milvus.GetIndexStateRequest.index_name', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=5188, - serialized_end=5336, -) - - -_GETINDEXSTATERESPONSE = _descriptor.Descriptor( - name='GetIndexStateResponse', - full_name='milvus.proto.milvus.GetIndexStateResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetIndexStateResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='state', full_name='milvus.proto.milvus.GetIndexStateResponse.state', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fail_reason', full_name='milvus.proto.milvus.GetIndexStateResponse.fail_reason', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=5339, - serialized_end=5476, -) - - -_DROPINDEXREQUEST = _descriptor.Descriptor( - name='DropIndexRequest', - full_name='milvus.proto.milvus.DropIndexRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DropIndexRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DropIndexRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.DropIndexRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.DropIndexRequest.field_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_name', full_name='milvus.proto.milvus.DropIndexRequest.index_name', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=5479, - serialized_end=5623, -) - - -_INSERTREQUEST = _descriptor.Descriptor( - name='InsertRequest', - full_name='milvus.proto.milvus.InsertRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.InsertRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.InsertRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.InsertRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_name', full_name='milvus.proto.milvus.InsertRequest.partition_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fields_data', full_name='milvus.proto.milvus.InsertRequest.fields_data', index=4, - number=5, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='hash_keys', full_name='milvus.proto.milvus.InsertRequest.hash_keys', index=5, - number=6, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='num_rows', full_name='milvus.proto.milvus.InsertRequest.num_rows', index=6, - number=7, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=5626, - serialized_end=5841, -) - - -_MUTATIONRESULT = _descriptor.Descriptor( - name='MutationResult', - full_name='milvus.proto.milvus.MutationResult', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.MutationResult.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='IDs', full_name='milvus.proto.milvus.MutationResult.IDs', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='succ_index', full_name='milvus.proto.milvus.MutationResult.succ_index', index=2, - number=3, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='err_index', full_name='milvus.proto.milvus.MutationResult.err_index', index=3, - number=4, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='acknowledged', full_name='milvus.proto.milvus.MutationResult.acknowledged', index=4, - number=5, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='insert_cnt', full_name='milvus.proto.milvus.MutationResult.insert_cnt', index=5, - number=6, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='delete_cnt', full_name='milvus.proto.milvus.MutationResult.delete_cnt', index=6, - number=7, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='upsert_cnt', full_name='milvus.proto.milvus.MutationResult.upsert_cnt', index=7, - number=8, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='milvus.proto.milvus.MutationResult.timestamp', index=8, - number=9, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=5844, - serialized_end=6084, -) - - -_DELETEREQUEST = _descriptor.Descriptor( - name='DeleteRequest', - full_name='milvus.proto.milvus.DeleteRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.DeleteRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.DeleteRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.DeleteRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_name', full_name='milvus.proto.milvus.DeleteRequest.partition_name', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='expr', full_name='milvus.proto.milvus.DeleteRequest.expr', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='hash_keys', full_name='milvus.proto.milvus.DeleteRequest.hash_keys', index=5, - number=6, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6087, - serialized_end=6245, -) - - -_PLACEHOLDERVALUE = _descriptor.Descriptor( - name='PlaceholderValue', - full_name='milvus.proto.milvus.PlaceholderValue', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='tag', full_name='milvus.proto.milvus.PlaceholderValue.tag', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='milvus.proto.milvus.PlaceholderValue.type', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='values', full_name='milvus.proto.milvus.PlaceholderValue.values', index=2, - number=3, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6247, - serialized_end=6346, -) - - -_PLACEHOLDERGROUP = _descriptor.Descriptor( - name='PlaceholderGroup', - full_name='milvus.proto.milvus.PlaceholderGroup', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='placeholders', full_name='milvus.proto.milvus.PlaceholderGroup.placeholders', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6348, - serialized_end=6427, -) - - -_SEARCHREQUEST = _descriptor.Descriptor( - name='SearchRequest', - full_name='milvus.proto.milvus.SearchRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.SearchRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.SearchRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.SearchRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.SearchRequest.partition_names', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='dsl', full_name='milvus.proto.milvus.SearchRequest.dsl', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='placeholder_group', full_name='milvus.proto.milvus.SearchRequest.placeholder_group', index=5, - number=6, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='dsl_type', full_name='milvus.proto.milvus.SearchRequest.dsl_type', index=6, - number=7, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='output_fields', full_name='milvus.proto.milvus.SearchRequest.output_fields', index=7, - number=8, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='search_params', full_name='milvus.proto.milvus.SearchRequest.search_params', index=8, - number=9, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='travel_timestamp', full_name='milvus.proto.milvus.SearchRequest.travel_timestamp', index=9, - number=10, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='guarantee_timestamp', full_name='milvus.proto.milvus.SearchRequest.guarantee_timestamp', index=10, - number=11, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6430, - serialized_end=6780, -) - - -_HITS = _descriptor.Descriptor( - name='Hits', - full_name='milvus.proto.milvus.Hits', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='IDs', full_name='milvus.proto.milvus.Hits.IDs', index=0, - number=1, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='row_data', full_name='milvus.proto.milvus.Hits.row_data', index=1, - number=2, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='scores', full_name='milvus.proto.milvus.Hits.scores', index=2, - number=3, type=2, cpp_type=6, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6782, - serialized_end=6835, -) - - -_SEARCHRESULTS = _descriptor.Descriptor( - name='SearchResults', - full_name='milvus.proto.milvus.SearchResults', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.SearchResults.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='results', full_name='milvus.proto.milvus.SearchResults.results', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6837, - serialized_end=6953, -) - - -_FLUSHREQUEST = _descriptor.Descriptor( - name='FlushRequest', - full_name='milvus.proto.milvus.FlushRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.FlushRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.FlushRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_names', full_name='milvus.proto.milvus.FlushRequest.collection_names', index=2, - number=3, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=6955, - serialized_end=7056, -) - - -_FLUSHRESPONSE_COLLSEGIDSENTRY = _descriptor.Descriptor( - name='CollSegIDsEntry', - full_name='milvus.proto.milvus.FlushResponse.CollSegIDsEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='milvus.proto.milvus.FlushResponse.CollSegIDsEntry.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='milvus.proto.milvus.FlushResponse.CollSegIDsEntry.value', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=b'8\001', - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=7211, - serialized_end=7292, -) - -_FLUSHRESPONSE = _descriptor.Descriptor( - name='FlushResponse', - full_name='milvus.proto.milvus.FlushResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.FlushResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.FlushResponse.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='coll_segIDs', full_name='milvus.proto.milvus.FlushResponse.coll_segIDs', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[_FLUSHRESPONSE_COLLSEGIDSENTRY, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=7059, - serialized_end=7292, -) - - -_QUERYREQUEST = _descriptor.Descriptor( - name='QueryRequest', - full_name='milvus.proto.milvus.QueryRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.QueryRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='db_name', full_name='milvus.proto.milvus.QueryRequest.db_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.QueryRequest.collection_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='expr', full_name='milvus.proto.milvus.QueryRequest.expr', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='output_fields', full_name='milvus.proto.milvus.QueryRequest.output_fields', index=4, - number=5, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.QueryRequest.partition_names', index=5, - number=6, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='travel_timestamp', full_name='milvus.proto.milvus.QueryRequest.travel_timestamp', index=6, - number=7, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='guarantee_timestamp', full_name='milvus.proto.milvus.QueryRequest.guarantee_timestamp', index=7, - number=8, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=7295, - serialized_end=7512, -) - - -_QUERYRESULTS = _descriptor.Descriptor( - name='QueryResults', - full_name='milvus.proto.milvus.QueryResults', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.QueryResults.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fields_data', full_name='milvus.proto.milvus.QueryResults.fields_data', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=7514, - serialized_end=7626, -) - - -_VECTORIDS = _descriptor.Descriptor( - name='VectorIDs', - full_name='milvus.proto.milvus.VectorIDs', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='collection_name', full_name='milvus.proto.milvus.VectorIDs.collection_name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.milvus.VectorIDs.field_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id_array', full_name='milvus.proto.milvus.VectorIDs.id_array', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partition_names', full_name='milvus.proto.milvus.VectorIDs.partition_names', index=3, - number=4, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=7628, - serialized_end=7753, -) - - -_VECTORSARRAY = _descriptor.Descriptor( - name='VectorsArray', - full_name='milvus.proto.milvus.VectorsArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='id_array', full_name='milvus.proto.milvus.VectorsArray.id_array', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data_array', full_name='milvus.proto.milvus.VectorsArray.data_array', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='array', full_name='milvus.proto.milvus.VectorsArray.array', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=7756, - serialized_end=7887, -) - - -_CALCDISTANCEREQUEST = _descriptor.Descriptor( - name='CalcDistanceRequest', - full_name='milvus.proto.milvus.CalcDistanceRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.CalcDistanceRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='op_left', full_name='milvus.proto.milvus.CalcDistanceRequest.op_left', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='op_right', full_name='milvus.proto.milvus.CalcDistanceRequest.op_right', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='params', full_name='milvus.proto.milvus.CalcDistanceRequest.params', index=3, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=7890, - serialized_end=8111, -) - - -_CALCDISTANCERESULTS = _descriptor.Descriptor( - name='CalcDistanceResults', - full_name='milvus.proto.milvus.CalcDistanceResults', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.CalcDistanceResults.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='int_dist', full_name='milvus.proto.milvus.CalcDistanceResults.int_dist', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='float_dist', full_name='milvus.proto.milvus.CalcDistanceResults.float_dist', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='array', full_name='milvus.proto.milvus.CalcDistanceResults.array', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=8114, - serialized_end=8295, -) - - -_PERSISTENTSEGMENTINFO = _descriptor.Descriptor( - name='PersistentSegmentInfo', - full_name='milvus.proto.milvus.PersistentSegmentInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='segmentID', full_name='milvus.proto.milvus.PersistentSegmentInfo.segmentID', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.PersistentSegmentInfo.collectionID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partitionID', full_name='milvus.proto.milvus.PersistentSegmentInfo.partitionID', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='num_rows', full_name='milvus.proto.milvus.PersistentSegmentInfo.num_rows', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='state', full_name='milvus.proto.milvus.PersistentSegmentInfo.state', index=4, - number=5, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=8298, - serialized_end=8451, -) - - -_GETPERSISTENTSEGMENTINFOREQUEST = _descriptor.Descriptor( - name='GetPersistentSegmentInfoRequest', - full_name='milvus.proto.milvus.GetPersistentSegmentInfoRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetPersistentSegmentInfoRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='dbName', full_name='milvus.proto.milvus.GetPersistentSegmentInfoRequest.dbName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionName', full_name='milvus.proto.milvus.GetPersistentSegmentInfoRequest.collectionName', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=8453, - serialized_end=8570, -) - - -_GETPERSISTENTSEGMENTINFORESPONSE = _descriptor.Descriptor( - name='GetPersistentSegmentInfoResponse', - full_name='milvus.proto.milvus.GetPersistentSegmentInfoResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetPersistentSegmentInfoResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='infos', full_name='milvus.proto.milvus.GetPersistentSegmentInfoResponse.infos', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=8573, - serialized_end=8711, -) - - -_QUERYSEGMENTINFO = _descriptor.Descriptor( - name='QuerySegmentInfo', - full_name='milvus.proto.milvus.QuerySegmentInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='segmentID', full_name='milvus.proto.milvus.QuerySegmentInfo.segmentID', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.QuerySegmentInfo.collectionID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='partitionID', full_name='milvus.proto.milvus.QuerySegmentInfo.partitionID', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='mem_size', full_name='milvus.proto.milvus.QuerySegmentInfo.mem_size', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='num_rows', full_name='milvus.proto.milvus.QuerySegmentInfo.num_rows', index=4, - number=5, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_name', full_name='milvus.proto.milvus.QuerySegmentInfo.index_name', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='indexID', full_name='milvus.proto.milvus.QuerySegmentInfo.indexID', index=6, - number=7, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='nodeID', full_name='milvus.proto.milvus.QuerySegmentInfo.nodeID', index=7, - number=8, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='state', full_name='milvus.proto.milvus.QuerySegmentInfo.state', index=8, - number=9, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=8714, - serialized_end=8933, -) - - -_GETQUERYSEGMENTINFOREQUEST = _descriptor.Descriptor( - name='GetQuerySegmentInfoRequest', - full_name='milvus.proto.milvus.GetQuerySegmentInfoRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetQuerySegmentInfoRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='dbName', full_name='milvus.proto.milvus.GetQuerySegmentInfoRequest.dbName', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='collectionName', full_name='milvus.proto.milvus.GetQuerySegmentInfoRequest.collectionName', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=8935, - serialized_end=9047, -) - - -_GETQUERYSEGMENTINFORESPONSE = _descriptor.Descriptor( - name='GetQuerySegmentInfoResponse', - full_name='milvus.proto.milvus.GetQuerySegmentInfoResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetQuerySegmentInfoResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='infos', full_name='milvus.proto.milvus.GetQuerySegmentInfoResponse.infos', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9050, - serialized_end=9178, -) - - -_DUMMYREQUEST = _descriptor.Descriptor( - name='DummyRequest', - full_name='milvus.proto.milvus.DummyRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='request_type', full_name='milvus.proto.milvus.DummyRequest.request_type', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9180, - serialized_end=9216, -) - - -_DUMMYRESPONSE = _descriptor.Descriptor( - name='DummyResponse', - full_name='milvus.proto.milvus.DummyResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='response', full_name='milvus.proto.milvus.DummyResponse.response', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9218, - serialized_end=9251, -) - - -_REGISTERLINKREQUEST = _descriptor.Descriptor( - name='RegisterLinkRequest', - full_name='milvus.proto.milvus.RegisterLinkRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9253, - serialized_end=9274, -) - - -_REGISTERLINKRESPONSE = _descriptor.Descriptor( - name='RegisterLinkResponse', - full_name='milvus.proto.milvus.RegisterLinkResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='address', full_name='milvus.proto.milvus.RegisterLinkResponse.address', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.RegisterLinkResponse.status', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9276, - serialized_end=9390, -) - - -_GETMETRICSREQUEST = _descriptor.Descriptor( - name='GetMetricsRequest', - full_name='milvus.proto.milvus.GetMetricsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.GetMetricsRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='request', full_name='milvus.proto.milvus.GetMetricsRequest.request', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9392, - serialized_end=9472, -) - - -_GETMETRICSRESPONSE = _descriptor.Descriptor( - name='GetMetricsResponse', - full_name='milvus.proto.milvus.GetMetricsResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetMetricsResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='response', full_name='milvus.proto.milvus.GetMetricsResponse.response', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='component_name', full_name='milvus.proto.milvus.GetMetricsResponse.component_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9474, - serialized_end=9581, -) - - -_LOADBALANCEREQUEST = _descriptor.Descriptor( - name='LoadBalanceRequest', - full_name='milvus.proto.milvus.LoadBalanceRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='base', full_name='milvus.proto.milvus.LoadBalanceRequest.base', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='src_nodeID', full_name='milvus.proto.milvus.LoadBalanceRequest.src_nodeID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='dst_nodeIDs', full_name='milvus.proto.milvus.LoadBalanceRequest.dst_nodeIDs', index=2, - number=3, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='sealed_segmentIDs', full_name='milvus.proto.milvus.LoadBalanceRequest.sealed_segmentIDs', index=3, - number=4, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9584, - serialized_end=9716, -) - - -_MANUALCOMPACTIONREQUEST = _descriptor.Descriptor( - name='ManualCompactionRequest', - full_name='milvus.proto.milvus.ManualCompactionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='collectionID', full_name='milvus.proto.milvus.ManualCompactionRequest.collectionID', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timetravel', full_name='milvus.proto.milvus.ManualCompactionRequest.timetravel', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9718, - serialized_end=9785, -) - - -_MANUALCOMPACTIONRESPONSE = _descriptor.Descriptor( - name='ManualCompactionResponse', - full_name='milvus.proto.milvus.ManualCompactionResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.ManualCompactionResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='compactionID', full_name='milvus.proto.milvus.ManualCompactionResponse.compactionID', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9787, - serialized_end=9880, -) - - -_GETCOMPACTIONSTATEREQUEST = _descriptor.Descriptor( - name='GetCompactionStateRequest', - full_name='milvus.proto.milvus.GetCompactionStateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='compactionID', full_name='milvus.proto.milvus.GetCompactionStateRequest.compactionID', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9882, - serialized_end=9931, -) - - -_GETCOMPACTIONSTATERESPONSE = _descriptor.Descriptor( - name='GetCompactionStateResponse', - full_name='milvus.proto.milvus.GetCompactionStateResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetCompactionStateResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='state', full_name='milvus.proto.milvus.GetCompactionStateResponse.state', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='executingPlanNo', full_name='milvus.proto.milvus.GetCompactionStateResponse.executingPlanNo', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timeoutPlanNo', full_name='milvus.proto.milvus.GetCompactionStateResponse.timeoutPlanNo', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='completedPlanNo', full_name='milvus.proto.milvus.GetCompactionStateResponse.completedPlanNo', index=4, - number=5, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=9934, - serialized_end=10133, -) - - -_GETCOMPACTIONPLANSREQUEST = _descriptor.Descriptor( - name='GetCompactionPlansRequest', - full_name='milvus.proto.milvus.GetCompactionPlansRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='compactionID', full_name='milvus.proto.milvus.GetCompactionPlansRequest.compactionID', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=10135, - serialized_end=10184, -) - - -_GETCOMPACTIONPLANSRESPONSE = _descriptor.Descriptor( - name='GetCompactionPlansResponse', - full_name='milvus.proto.milvus.GetCompactionPlansResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetCompactionPlansResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='state', full_name='milvus.proto.milvus.GetCompactionPlansResponse.state', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='mergeInfos', full_name='milvus.proto.milvus.GetCompactionPlansResponse.mergeInfos', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=10187, - serialized_end=10375, -) - - -_COMPACTIONMERGEINFO = _descriptor.Descriptor( - name='CompactionMergeInfo', - full_name='milvus.proto.milvus.CompactionMergeInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sources', full_name='milvus.proto.milvus.CompactionMergeInfo.sources', index=0, - number=1, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='target', full_name='milvus.proto.milvus.CompactionMergeInfo.target', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=10377, - serialized_end=10431, -) - - -_GETFLUSHSTATEREQUEST = _descriptor.Descriptor( - name='GetFlushStateRequest', - full_name='milvus.proto.milvus.GetFlushStateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='segmentIDs', full_name='milvus.proto.milvus.GetFlushStateRequest.segmentIDs', index=0, - number=1, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=10433, - serialized_end=10475, -) - - -_GETFLUSHSTATERESPONSE = _descriptor.Descriptor( - name='GetFlushStateResponse', - full_name='milvus.proto.milvus.GetFlushStateResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='milvus.proto.milvus.GetFlushStateResponse.status', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='flushed', full_name='milvus.proto.milvus.GetFlushStateResponse.flushed', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=10477, - serialized_end=10562, -) - -_CREATEALIASREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_DROPALIASREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_ALTERALIASREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_CREATECOLLECTIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_CREATECOLLECTIONREQUEST.fields_by_name['consistency_level'].enum_type = common__pb2._CONSISTENCYLEVEL -_DROPCOLLECTIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_HASCOLLECTIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_BOOLRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_STRINGRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_DESCRIBECOLLECTIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_DESCRIBECOLLECTIONRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_DESCRIBECOLLECTIONRESPONSE.fields_by_name['schema'].message_type = schema__pb2._COLLECTIONSCHEMA -_DESCRIBECOLLECTIONRESPONSE.fields_by_name['start_positions'].message_type = common__pb2._KEYDATAPAIR -_DESCRIBECOLLECTIONRESPONSE.fields_by_name['consistency_level'].enum_type = common__pb2._CONSISTENCYLEVEL -_LOADCOLLECTIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_RELEASECOLLECTIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETCOLLECTIONSTATISTICSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETCOLLECTIONSTATISTICSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETCOLLECTIONSTATISTICSRESPONSE.fields_by_name['stats'].message_type = common__pb2._KEYVALUEPAIR -_SHOWCOLLECTIONSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_SHOWCOLLECTIONSREQUEST.fields_by_name['type'].enum_type = _SHOWTYPE -_SHOWCOLLECTIONSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_CREATEPARTITIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_DROPPARTITIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_HASPARTITIONREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_LOADPARTITIONSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_RELEASEPARTITIONSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETPARTITIONSTATISTICSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETPARTITIONSTATISTICSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETPARTITIONSTATISTICSRESPONSE.fields_by_name['stats'].message_type = common__pb2._KEYVALUEPAIR -_SHOWPARTITIONSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_SHOWPARTITIONSREQUEST.fields_by_name['type'].enum_type = _SHOWTYPE -_SHOWPARTITIONSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_DESCRIBESEGMENTREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_DESCRIBESEGMENTRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_SHOWSEGMENTSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_SHOWSEGMENTSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_CREATEINDEXREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_CREATEINDEXREQUEST.fields_by_name['extra_params'].message_type = common__pb2._KEYVALUEPAIR -_DESCRIBEINDEXREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_INDEXDESCRIPTION.fields_by_name['params'].message_type = common__pb2._KEYVALUEPAIR -_DESCRIBEINDEXRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_DESCRIBEINDEXRESPONSE.fields_by_name['index_descriptions'].message_type = _INDEXDESCRIPTION -_GETINDEXBUILDPROGRESSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETINDEXBUILDPROGRESSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETINDEXSTATEREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETINDEXSTATERESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETINDEXSTATERESPONSE.fields_by_name['state'].enum_type = common__pb2._INDEXSTATE -_DROPINDEXREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_INSERTREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_INSERTREQUEST.fields_by_name['fields_data'].message_type = schema__pb2._FIELDDATA -_MUTATIONRESULT.fields_by_name['status'].message_type = common__pb2._STATUS -_MUTATIONRESULT.fields_by_name['IDs'].message_type = schema__pb2._IDS -_DELETEREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_PLACEHOLDERVALUE.fields_by_name['type'].enum_type = _PLACEHOLDERTYPE -_PLACEHOLDERGROUP.fields_by_name['placeholders'].message_type = _PLACEHOLDERVALUE -_SEARCHREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_SEARCHREQUEST.fields_by_name['dsl_type'].enum_type = common__pb2._DSLTYPE -_SEARCHREQUEST.fields_by_name['search_params'].message_type = common__pb2._KEYVALUEPAIR -_SEARCHRESULTS.fields_by_name['status'].message_type = common__pb2._STATUS -_SEARCHRESULTS.fields_by_name['results'].message_type = schema__pb2._SEARCHRESULTDATA -_FLUSHREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_FLUSHRESPONSE_COLLSEGIDSENTRY.fields_by_name['value'].message_type = schema__pb2._LONGARRAY -_FLUSHRESPONSE_COLLSEGIDSENTRY.containing_type = _FLUSHRESPONSE -_FLUSHRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_FLUSHRESPONSE.fields_by_name['coll_segIDs'].message_type = _FLUSHRESPONSE_COLLSEGIDSENTRY -_QUERYREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_QUERYRESULTS.fields_by_name['status'].message_type = common__pb2._STATUS -_QUERYRESULTS.fields_by_name['fields_data'].message_type = schema__pb2._FIELDDATA -_VECTORIDS.fields_by_name['id_array'].message_type = schema__pb2._IDS -_VECTORSARRAY.fields_by_name['id_array'].message_type = _VECTORIDS -_VECTORSARRAY.fields_by_name['data_array'].message_type = schema__pb2._VECTORFIELD -_VECTORSARRAY.oneofs_by_name['array'].fields.append( - _VECTORSARRAY.fields_by_name['id_array']) -_VECTORSARRAY.fields_by_name['id_array'].containing_oneof = _VECTORSARRAY.oneofs_by_name['array'] -_VECTORSARRAY.oneofs_by_name['array'].fields.append( - _VECTORSARRAY.fields_by_name['data_array']) -_VECTORSARRAY.fields_by_name['data_array'].containing_oneof = _VECTORSARRAY.oneofs_by_name['array'] -_CALCDISTANCEREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_CALCDISTANCEREQUEST.fields_by_name['op_left'].message_type = _VECTORSARRAY -_CALCDISTANCEREQUEST.fields_by_name['op_right'].message_type = _VECTORSARRAY -_CALCDISTANCEREQUEST.fields_by_name['params'].message_type = common__pb2._KEYVALUEPAIR -_CALCDISTANCERESULTS.fields_by_name['status'].message_type = common__pb2._STATUS -_CALCDISTANCERESULTS.fields_by_name['int_dist'].message_type = schema__pb2._INTARRAY -_CALCDISTANCERESULTS.fields_by_name['float_dist'].message_type = schema__pb2._FLOATARRAY -_CALCDISTANCERESULTS.oneofs_by_name['array'].fields.append( - _CALCDISTANCERESULTS.fields_by_name['int_dist']) -_CALCDISTANCERESULTS.fields_by_name['int_dist'].containing_oneof = _CALCDISTANCERESULTS.oneofs_by_name['array'] -_CALCDISTANCERESULTS.oneofs_by_name['array'].fields.append( - _CALCDISTANCERESULTS.fields_by_name['float_dist']) -_CALCDISTANCERESULTS.fields_by_name['float_dist'].containing_oneof = _CALCDISTANCERESULTS.oneofs_by_name['array'] -_PERSISTENTSEGMENTINFO.fields_by_name['state'].enum_type = common__pb2._SEGMENTSTATE -_GETPERSISTENTSEGMENTINFOREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETPERSISTENTSEGMENTINFORESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETPERSISTENTSEGMENTINFORESPONSE.fields_by_name['infos'].message_type = _PERSISTENTSEGMENTINFO -_QUERYSEGMENTINFO.fields_by_name['state'].enum_type = common__pb2._SEGMENTSTATE -_GETQUERYSEGMENTINFOREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETQUERYSEGMENTINFORESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETQUERYSEGMENTINFORESPONSE.fields_by_name['infos'].message_type = _QUERYSEGMENTINFO -_REGISTERLINKRESPONSE.fields_by_name['address'].message_type = common__pb2._ADDRESS -_REGISTERLINKRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETMETRICSREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_GETMETRICSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_LOADBALANCEREQUEST.fields_by_name['base'].message_type = common__pb2._MSGBASE -_MANUALCOMPACTIONRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETCOMPACTIONSTATERESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETCOMPACTIONSTATERESPONSE.fields_by_name['state'].enum_type = common__pb2._COMPACTIONSTATE -_GETCOMPACTIONPLANSRESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -_GETCOMPACTIONPLANSRESPONSE.fields_by_name['state'].enum_type = common__pb2._COMPACTIONSTATE -_GETCOMPACTIONPLANSRESPONSE.fields_by_name['mergeInfos'].message_type = _COMPACTIONMERGEINFO -_GETFLUSHSTATERESPONSE.fields_by_name['status'].message_type = common__pb2._STATUS -DESCRIPTOR.message_types_by_name['CreateAliasRequest'] = _CREATEALIASREQUEST -DESCRIPTOR.message_types_by_name['DropAliasRequest'] = _DROPALIASREQUEST -DESCRIPTOR.message_types_by_name['AlterAliasRequest'] = _ALTERALIASREQUEST -DESCRIPTOR.message_types_by_name['CreateCollectionRequest'] = _CREATECOLLECTIONREQUEST -DESCRIPTOR.message_types_by_name['DropCollectionRequest'] = _DROPCOLLECTIONREQUEST -DESCRIPTOR.message_types_by_name['HasCollectionRequest'] = _HASCOLLECTIONREQUEST -DESCRIPTOR.message_types_by_name['BoolResponse'] = _BOOLRESPONSE -DESCRIPTOR.message_types_by_name['StringResponse'] = _STRINGRESPONSE -DESCRIPTOR.message_types_by_name['DescribeCollectionRequest'] = _DESCRIBECOLLECTIONREQUEST -DESCRIPTOR.message_types_by_name['DescribeCollectionResponse'] = _DESCRIBECOLLECTIONRESPONSE -DESCRIPTOR.message_types_by_name['LoadCollectionRequest'] = _LOADCOLLECTIONREQUEST -DESCRIPTOR.message_types_by_name['ReleaseCollectionRequest'] = _RELEASECOLLECTIONREQUEST -DESCRIPTOR.message_types_by_name['GetCollectionStatisticsRequest'] = _GETCOLLECTIONSTATISTICSREQUEST -DESCRIPTOR.message_types_by_name['GetCollectionStatisticsResponse'] = _GETCOLLECTIONSTATISTICSRESPONSE -DESCRIPTOR.message_types_by_name['ShowCollectionsRequest'] = _SHOWCOLLECTIONSREQUEST -DESCRIPTOR.message_types_by_name['ShowCollectionsResponse'] = _SHOWCOLLECTIONSRESPONSE -DESCRIPTOR.message_types_by_name['CreatePartitionRequest'] = _CREATEPARTITIONREQUEST -DESCRIPTOR.message_types_by_name['DropPartitionRequest'] = _DROPPARTITIONREQUEST -DESCRIPTOR.message_types_by_name['HasPartitionRequest'] = _HASPARTITIONREQUEST -DESCRIPTOR.message_types_by_name['LoadPartitionsRequest'] = _LOADPARTITIONSREQUEST -DESCRIPTOR.message_types_by_name['ReleasePartitionsRequest'] = _RELEASEPARTITIONSREQUEST -DESCRIPTOR.message_types_by_name['GetPartitionStatisticsRequest'] = _GETPARTITIONSTATISTICSREQUEST -DESCRIPTOR.message_types_by_name['GetPartitionStatisticsResponse'] = _GETPARTITIONSTATISTICSRESPONSE -DESCRIPTOR.message_types_by_name['ShowPartitionsRequest'] = _SHOWPARTITIONSREQUEST -DESCRIPTOR.message_types_by_name['ShowPartitionsResponse'] = _SHOWPARTITIONSRESPONSE -DESCRIPTOR.message_types_by_name['DescribeSegmentRequest'] = _DESCRIBESEGMENTREQUEST -DESCRIPTOR.message_types_by_name['DescribeSegmentResponse'] = _DESCRIBESEGMENTRESPONSE -DESCRIPTOR.message_types_by_name['ShowSegmentsRequest'] = _SHOWSEGMENTSREQUEST -DESCRIPTOR.message_types_by_name['ShowSegmentsResponse'] = _SHOWSEGMENTSRESPONSE -DESCRIPTOR.message_types_by_name['CreateIndexRequest'] = _CREATEINDEXREQUEST -DESCRIPTOR.message_types_by_name['DescribeIndexRequest'] = _DESCRIBEINDEXREQUEST -DESCRIPTOR.message_types_by_name['IndexDescription'] = _INDEXDESCRIPTION -DESCRIPTOR.message_types_by_name['DescribeIndexResponse'] = _DESCRIBEINDEXRESPONSE -DESCRIPTOR.message_types_by_name['GetIndexBuildProgressRequest'] = _GETINDEXBUILDPROGRESSREQUEST -DESCRIPTOR.message_types_by_name['GetIndexBuildProgressResponse'] = _GETINDEXBUILDPROGRESSRESPONSE -DESCRIPTOR.message_types_by_name['GetIndexStateRequest'] = _GETINDEXSTATEREQUEST -DESCRIPTOR.message_types_by_name['GetIndexStateResponse'] = _GETINDEXSTATERESPONSE -DESCRIPTOR.message_types_by_name['DropIndexRequest'] = _DROPINDEXREQUEST -DESCRIPTOR.message_types_by_name['InsertRequest'] = _INSERTREQUEST -DESCRIPTOR.message_types_by_name['MutationResult'] = _MUTATIONRESULT -DESCRIPTOR.message_types_by_name['DeleteRequest'] = _DELETEREQUEST -DESCRIPTOR.message_types_by_name['PlaceholderValue'] = _PLACEHOLDERVALUE -DESCRIPTOR.message_types_by_name['PlaceholderGroup'] = _PLACEHOLDERGROUP -DESCRIPTOR.message_types_by_name['SearchRequest'] = _SEARCHREQUEST -DESCRIPTOR.message_types_by_name['Hits'] = _HITS -DESCRIPTOR.message_types_by_name['SearchResults'] = _SEARCHRESULTS -DESCRIPTOR.message_types_by_name['FlushRequest'] = _FLUSHREQUEST -DESCRIPTOR.message_types_by_name['FlushResponse'] = _FLUSHRESPONSE -DESCRIPTOR.message_types_by_name['QueryRequest'] = _QUERYREQUEST -DESCRIPTOR.message_types_by_name['QueryResults'] = _QUERYRESULTS -DESCRIPTOR.message_types_by_name['VectorIDs'] = _VECTORIDS -DESCRIPTOR.message_types_by_name['VectorsArray'] = _VECTORSARRAY -DESCRIPTOR.message_types_by_name['CalcDistanceRequest'] = _CALCDISTANCEREQUEST -DESCRIPTOR.message_types_by_name['CalcDistanceResults'] = _CALCDISTANCERESULTS -DESCRIPTOR.message_types_by_name['PersistentSegmentInfo'] = _PERSISTENTSEGMENTINFO -DESCRIPTOR.message_types_by_name['GetPersistentSegmentInfoRequest'] = _GETPERSISTENTSEGMENTINFOREQUEST -DESCRIPTOR.message_types_by_name['GetPersistentSegmentInfoResponse'] = _GETPERSISTENTSEGMENTINFORESPONSE -DESCRIPTOR.message_types_by_name['QuerySegmentInfo'] = _QUERYSEGMENTINFO -DESCRIPTOR.message_types_by_name['GetQuerySegmentInfoRequest'] = _GETQUERYSEGMENTINFOREQUEST -DESCRIPTOR.message_types_by_name['GetQuerySegmentInfoResponse'] = _GETQUERYSEGMENTINFORESPONSE -DESCRIPTOR.message_types_by_name['DummyRequest'] = _DUMMYREQUEST -DESCRIPTOR.message_types_by_name['DummyResponse'] = _DUMMYRESPONSE -DESCRIPTOR.message_types_by_name['RegisterLinkRequest'] = _REGISTERLINKREQUEST -DESCRIPTOR.message_types_by_name['RegisterLinkResponse'] = _REGISTERLINKRESPONSE -DESCRIPTOR.message_types_by_name['GetMetricsRequest'] = _GETMETRICSREQUEST -DESCRIPTOR.message_types_by_name['GetMetricsResponse'] = _GETMETRICSRESPONSE -DESCRIPTOR.message_types_by_name['LoadBalanceRequest'] = _LOADBALANCEREQUEST -DESCRIPTOR.message_types_by_name['ManualCompactionRequest'] = _MANUALCOMPACTIONREQUEST -DESCRIPTOR.message_types_by_name['ManualCompactionResponse'] = _MANUALCOMPACTIONRESPONSE -DESCRIPTOR.message_types_by_name['GetCompactionStateRequest'] = _GETCOMPACTIONSTATEREQUEST -DESCRIPTOR.message_types_by_name['GetCompactionStateResponse'] = _GETCOMPACTIONSTATERESPONSE -DESCRIPTOR.message_types_by_name['GetCompactionPlansRequest'] = _GETCOMPACTIONPLANSREQUEST -DESCRIPTOR.message_types_by_name['GetCompactionPlansResponse'] = _GETCOMPACTIONPLANSRESPONSE -DESCRIPTOR.message_types_by_name['CompactionMergeInfo'] = _COMPACTIONMERGEINFO -DESCRIPTOR.message_types_by_name['GetFlushStateRequest'] = _GETFLUSHSTATEREQUEST -DESCRIPTOR.message_types_by_name['GetFlushStateResponse'] = _GETFLUSHSTATERESPONSE -DESCRIPTOR.enum_types_by_name['ShowType'] = _SHOWTYPE -DESCRIPTOR.enum_types_by_name['PlaceholderType'] = _PLACEHOLDERTYPE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -CreateAliasRequest = _reflection.GeneratedProtocolMessageType('CreateAliasRequest', (_message.Message,), { - 'DESCRIPTOR' : _CREATEALIASREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CreateAliasRequest) - }) -_sym_db.RegisterMessage(CreateAliasRequest) - -DropAliasRequest = _reflection.GeneratedProtocolMessageType('DropAliasRequest', (_message.Message,), { - 'DESCRIPTOR' : _DROPALIASREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DropAliasRequest) - }) -_sym_db.RegisterMessage(DropAliasRequest) - -AlterAliasRequest = _reflection.GeneratedProtocolMessageType('AlterAliasRequest', (_message.Message,), { - 'DESCRIPTOR' : _ALTERALIASREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.AlterAliasRequest) - }) -_sym_db.RegisterMessage(AlterAliasRequest) - -CreateCollectionRequest = _reflection.GeneratedProtocolMessageType('CreateCollectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _CREATECOLLECTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CreateCollectionRequest) - }) -_sym_db.RegisterMessage(CreateCollectionRequest) - -DropCollectionRequest = _reflection.GeneratedProtocolMessageType('DropCollectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _DROPCOLLECTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DropCollectionRequest) - }) -_sym_db.RegisterMessage(DropCollectionRequest) - -HasCollectionRequest = _reflection.GeneratedProtocolMessageType('HasCollectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _HASCOLLECTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.HasCollectionRequest) - }) -_sym_db.RegisterMessage(HasCollectionRequest) - -BoolResponse = _reflection.GeneratedProtocolMessageType('BoolResponse', (_message.Message,), { - 'DESCRIPTOR' : _BOOLRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.BoolResponse) - }) -_sym_db.RegisterMessage(BoolResponse) - -StringResponse = _reflection.GeneratedProtocolMessageType('StringResponse', (_message.Message,), { - 'DESCRIPTOR' : _STRINGRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.StringResponse) - }) -_sym_db.RegisterMessage(StringResponse) - -DescribeCollectionRequest = _reflection.GeneratedProtocolMessageType('DescribeCollectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _DESCRIBECOLLECTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeCollectionRequest) - }) -_sym_db.RegisterMessage(DescribeCollectionRequest) - -DescribeCollectionResponse = _reflection.GeneratedProtocolMessageType('DescribeCollectionResponse', (_message.Message,), { - 'DESCRIPTOR' : _DESCRIBECOLLECTIONRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeCollectionResponse) - }) -_sym_db.RegisterMessage(DescribeCollectionResponse) - -LoadCollectionRequest = _reflection.GeneratedProtocolMessageType('LoadCollectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _LOADCOLLECTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.LoadCollectionRequest) - }) -_sym_db.RegisterMessage(LoadCollectionRequest) - -ReleaseCollectionRequest = _reflection.GeneratedProtocolMessageType('ReleaseCollectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _RELEASECOLLECTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ReleaseCollectionRequest) - }) -_sym_db.RegisterMessage(ReleaseCollectionRequest) - -GetCollectionStatisticsRequest = _reflection.GeneratedProtocolMessageType('GetCollectionStatisticsRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETCOLLECTIONSTATISTICSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetCollectionStatisticsRequest) - }) -_sym_db.RegisterMessage(GetCollectionStatisticsRequest) - -GetCollectionStatisticsResponse = _reflection.GeneratedProtocolMessageType('GetCollectionStatisticsResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETCOLLECTIONSTATISTICSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetCollectionStatisticsResponse) - }) -_sym_db.RegisterMessage(GetCollectionStatisticsResponse) - -ShowCollectionsRequest = _reflection.GeneratedProtocolMessageType('ShowCollectionsRequest', (_message.Message,), { - 'DESCRIPTOR' : _SHOWCOLLECTIONSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ShowCollectionsRequest) - }) -_sym_db.RegisterMessage(ShowCollectionsRequest) - -ShowCollectionsResponse = _reflection.GeneratedProtocolMessageType('ShowCollectionsResponse', (_message.Message,), { - 'DESCRIPTOR' : _SHOWCOLLECTIONSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ShowCollectionsResponse) - }) -_sym_db.RegisterMessage(ShowCollectionsResponse) - -CreatePartitionRequest = _reflection.GeneratedProtocolMessageType('CreatePartitionRequest', (_message.Message,), { - 'DESCRIPTOR' : _CREATEPARTITIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CreatePartitionRequest) - }) -_sym_db.RegisterMessage(CreatePartitionRequest) - -DropPartitionRequest = _reflection.GeneratedProtocolMessageType('DropPartitionRequest', (_message.Message,), { - 'DESCRIPTOR' : _DROPPARTITIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DropPartitionRequest) - }) -_sym_db.RegisterMessage(DropPartitionRequest) - -HasPartitionRequest = _reflection.GeneratedProtocolMessageType('HasPartitionRequest', (_message.Message,), { - 'DESCRIPTOR' : _HASPARTITIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.HasPartitionRequest) - }) -_sym_db.RegisterMessage(HasPartitionRequest) - -LoadPartitionsRequest = _reflection.GeneratedProtocolMessageType('LoadPartitionsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LOADPARTITIONSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.LoadPartitionsRequest) - }) -_sym_db.RegisterMessage(LoadPartitionsRequest) - -ReleasePartitionsRequest = _reflection.GeneratedProtocolMessageType('ReleasePartitionsRequest', (_message.Message,), { - 'DESCRIPTOR' : _RELEASEPARTITIONSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ReleasePartitionsRequest) - }) -_sym_db.RegisterMessage(ReleasePartitionsRequest) - -GetPartitionStatisticsRequest = _reflection.GeneratedProtocolMessageType('GetPartitionStatisticsRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETPARTITIONSTATISTICSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetPartitionStatisticsRequest) - }) -_sym_db.RegisterMessage(GetPartitionStatisticsRequest) - -GetPartitionStatisticsResponse = _reflection.GeneratedProtocolMessageType('GetPartitionStatisticsResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETPARTITIONSTATISTICSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetPartitionStatisticsResponse) - }) -_sym_db.RegisterMessage(GetPartitionStatisticsResponse) - -ShowPartitionsRequest = _reflection.GeneratedProtocolMessageType('ShowPartitionsRequest', (_message.Message,), { - 'DESCRIPTOR' : _SHOWPARTITIONSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ShowPartitionsRequest) - }) -_sym_db.RegisterMessage(ShowPartitionsRequest) - -ShowPartitionsResponse = _reflection.GeneratedProtocolMessageType('ShowPartitionsResponse', (_message.Message,), { - 'DESCRIPTOR' : _SHOWPARTITIONSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ShowPartitionsResponse) - }) -_sym_db.RegisterMessage(ShowPartitionsResponse) - -DescribeSegmentRequest = _reflection.GeneratedProtocolMessageType('DescribeSegmentRequest', (_message.Message,), { - 'DESCRIPTOR' : _DESCRIBESEGMENTREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeSegmentRequest) - }) -_sym_db.RegisterMessage(DescribeSegmentRequest) - -DescribeSegmentResponse = _reflection.GeneratedProtocolMessageType('DescribeSegmentResponse', (_message.Message,), { - 'DESCRIPTOR' : _DESCRIBESEGMENTRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeSegmentResponse) - }) -_sym_db.RegisterMessage(DescribeSegmentResponse) - -ShowSegmentsRequest = _reflection.GeneratedProtocolMessageType('ShowSegmentsRequest', (_message.Message,), { - 'DESCRIPTOR' : _SHOWSEGMENTSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ShowSegmentsRequest) - }) -_sym_db.RegisterMessage(ShowSegmentsRequest) - -ShowSegmentsResponse = _reflection.GeneratedProtocolMessageType('ShowSegmentsResponse', (_message.Message,), { - 'DESCRIPTOR' : _SHOWSEGMENTSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ShowSegmentsResponse) - }) -_sym_db.RegisterMessage(ShowSegmentsResponse) - -CreateIndexRequest = _reflection.GeneratedProtocolMessageType('CreateIndexRequest', (_message.Message,), { - 'DESCRIPTOR' : _CREATEINDEXREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CreateIndexRequest) - }) -_sym_db.RegisterMessage(CreateIndexRequest) - -DescribeIndexRequest = _reflection.GeneratedProtocolMessageType('DescribeIndexRequest', (_message.Message,), { - 'DESCRIPTOR' : _DESCRIBEINDEXREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeIndexRequest) - }) -_sym_db.RegisterMessage(DescribeIndexRequest) - -IndexDescription = _reflection.GeneratedProtocolMessageType('IndexDescription', (_message.Message,), { - 'DESCRIPTOR' : _INDEXDESCRIPTION, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.IndexDescription) - }) -_sym_db.RegisterMessage(IndexDescription) - -DescribeIndexResponse = _reflection.GeneratedProtocolMessageType('DescribeIndexResponse', (_message.Message,), { - 'DESCRIPTOR' : _DESCRIBEINDEXRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DescribeIndexResponse) - }) -_sym_db.RegisterMessage(DescribeIndexResponse) - -GetIndexBuildProgressRequest = _reflection.GeneratedProtocolMessageType('GetIndexBuildProgressRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETINDEXBUILDPROGRESSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetIndexBuildProgressRequest) - }) -_sym_db.RegisterMessage(GetIndexBuildProgressRequest) - -GetIndexBuildProgressResponse = _reflection.GeneratedProtocolMessageType('GetIndexBuildProgressResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETINDEXBUILDPROGRESSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetIndexBuildProgressResponse) - }) -_sym_db.RegisterMessage(GetIndexBuildProgressResponse) - -GetIndexStateRequest = _reflection.GeneratedProtocolMessageType('GetIndexStateRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETINDEXSTATEREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetIndexStateRequest) - }) -_sym_db.RegisterMessage(GetIndexStateRequest) - -GetIndexStateResponse = _reflection.GeneratedProtocolMessageType('GetIndexStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETINDEXSTATERESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetIndexStateResponse) - }) -_sym_db.RegisterMessage(GetIndexStateResponse) - -DropIndexRequest = _reflection.GeneratedProtocolMessageType('DropIndexRequest', (_message.Message,), { - 'DESCRIPTOR' : _DROPINDEXREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DropIndexRequest) - }) -_sym_db.RegisterMessage(DropIndexRequest) - -InsertRequest = _reflection.GeneratedProtocolMessageType('InsertRequest', (_message.Message,), { - 'DESCRIPTOR' : _INSERTREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.InsertRequest) - }) -_sym_db.RegisterMessage(InsertRequest) - -MutationResult = _reflection.GeneratedProtocolMessageType('MutationResult', (_message.Message,), { - 'DESCRIPTOR' : _MUTATIONRESULT, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.MutationResult) - }) -_sym_db.RegisterMessage(MutationResult) - -DeleteRequest = _reflection.GeneratedProtocolMessageType('DeleteRequest', (_message.Message,), { - 'DESCRIPTOR' : _DELETEREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DeleteRequest) - }) -_sym_db.RegisterMessage(DeleteRequest) - -PlaceholderValue = _reflection.GeneratedProtocolMessageType('PlaceholderValue', (_message.Message,), { - 'DESCRIPTOR' : _PLACEHOLDERVALUE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.PlaceholderValue) - }) -_sym_db.RegisterMessage(PlaceholderValue) - -PlaceholderGroup = _reflection.GeneratedProtocolMessageType('PlaceholderGroup', (_message.Message,), { - 'DESCRIPTOR' : _PLACEHOLDERGROUP, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.PlaceholderGroup) - }) -_sym_db.RegisterMessage(PlaceholderGroup) - -SearchRequest = _reflection.GeneratedProtocolMessageType('SearchRequest', (_message.Message,), { - 'DESCRIPTOR' : _SEARCHREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.SearchRequest) - }) -_sym_db.RegisterMessage(SearchRequest) - -Hits = _reflection.GeneratedProtocolMessageType('Hits', (_message.Message,), { - 'DESCRIPTOR' : _HITS, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.Hits) - }) -_sym_db.RegisterMessage(Hits) - -SearchResults = _reflection.GeneratedProtocolMessageType('SearchResults', (_message.Message,), { - 'DESCRIPTOR' : _SEARCHRESULTS, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.SearchResults) - }) -_sym_db.RegisterMessage(SearchResults) - -FlushRequest = _reflection.GeneratedProtocolMessageType('FlushRequest', (_message.Message,), { - 'DESCRIPTOR' : _FLUSHREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.FlushRequest) - }) -_sym_db.RegisterMessage(FlushRequest) - -FlushResponse = _reflection.GeneratedProtocolMessageType('FlushResponse', (_message.Message,), { - - 'CollSegIDsEntry' : _reflection.GeneratedProtocolMessageType('CollSegIDsEntry', (_message.Message,), { - 'DESCRIPTOR' : _FLUSHRESPONSE_COLLSEGIDSENTRY, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.FlushResponse.CollSegIDsEntry) - }) - , - 'DESCRIPTOR' : _FLUSHRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.FlushResponse) - }) -_sym_db.RegisterMessage(FlushResponse) -_sym_db.RegisterMessage(FlushResponse.CollSegIDsEntry) - -QueryRequest = _reflection.GeneratedProtocolMessageType('QueryRequest', (_message.Message,), { - 'DESCRIPTOR' : _QUERYREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.QueryRequest) - }) -_sym_db.RegisterMessage(QueryRequest) - -QueryResults = _reflection.GeneratedProtocolMessageType('QueryResults', (_message.Message,), { - 'DESCRIPTOR' : _QUERYRESULTS, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.QueryResults) - }) -_sym_db.RegisterMessage(QueryResults) - -VectorIDs = _reflection.GeneratedProtocolMessageType('VectorIDs', (_message.Message,), { - 'DESCRIPTOR' : _VECTORIDS, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.VectorIDs) - }) -_sym_db.RegisterMessage(VectorIDs) - -VectorsArray = _reflection.GeneratedProtocolMessageType('VectorsArray', (_message.Message,), { - 'DESCRIPTOR' : _VECTORSARRAY, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.VectorsArray) - }) -_sym_db.RegisterMessage(VectorsArray) - -CalcDistanceRequest = _reflection.GeneratedProtocolMessageType('CalcDistanceRequest', (_message.Message,), { - 'DESCRIPTOR' : _CALCDISTANCEREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CalcDistanceRequest) - }) -_sym_db.RegisterMessage(CalcDistanceRequest) - -CalcDistanceResults = _reflection.GeneratedProtocolMessageType('CalcDistanceResults', (_message.Message,), { - 'DESCRIPTOR' : _CALCDISTANCERESULTS, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CalcDistanceResults) - }) -_sym_db.RegisterMessage(CalcDistanceResults) - -PersistentSegmentInfo = _reflection.GeneratedProtocolMessageType('PersistentSegmentInfo', (_message.Message,), { - 'DESCRIPTOR' : _PERSISTENTSEGMENTINFO, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.PersistentSegmentInfo) - }) -_sym_db.RegisterMessage(PersistentSegmentInfo) - -GetPersistentSegmentInfoRequest = _reflection.GeneratedProtocolMessageType('GetPersistentSegmentInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETPERSISTENTSEGMENTINFOREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetPersistentSegmentInfoRequest) - }) -_sym_db.RegisterMessage(GetPersistentSegmentInfoRequest) - -GetPersistentSegmentInfoResponse = _reflection.GeneratedProtocolMessageType('GetPersistentSegmentInfoResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETPERSISTENTSEGMENTINFORESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetPersistentSegmentInfoResponse) - }) -_sym_db.RegisterMessage(GetPersistentSegmentInfoResponse) - -QuerySegmentInfo = _reflection.GeneratedProtocolMessageType('QuerySegmentInfo', (_message.Message,), { - 'DESCRIPTOR' : _QUERYSEGMENTINFO, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.QuerySegmentInfo) - }) -_sym_db.RegisterMessage(QuerySegmentInfo) - -GetQuerySegmentInfoRequest = _reflection.GeneratedProtocolMessageType('GetQuerySegmentInfoRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETQUERYSEGMENTINFOREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetQuerySegmentInfoRequest) - }) -_sym_db.RegisterMessage(GetQuerySegmentInfoRequest) - -GetQuerySegmentInfoResponse = _reflection.GeneratedProtocolMessageType('GetQuerySegmentInfoResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETQUERYSEGMENTINFORESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetQuerySegmentInfoResponse) - }) -_sym_db.RegisterMessage(GetQuerySegmentInfoResponse) - -DummyRequest = _reflection.GeneratedProtocolMessageType('DummyRequest', (_message.Message,), { - 'DESCRIPTOR' : _DUMMYREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DummyRequest) - }) -_sym_db.RegisterMessage(DummyRequest) - -DummyResponse = _reflection.GeneratedProtocolMessageType('DummyResponse', (_message.Message,), { - 'DESCRIPTOR' : _DUMMYRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.DummyResponse) - }) -_sym_db.RegisterMessage(DummyResponse) - -RegisterLinkRequest = _reflection.GeneratedProtocolMessageType('RegisterLinkRequest', (_message.Message,), { - 'DESCRIPTOR' : _REGISTERLINKREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.RegisterLinkRequest) - }) -_sym_db.RegisterMessage(RegisterLinkRequest) - -RegisterLinkResponse = _reflection.GeneratedProtocolMessageType('RegisterLinkResponse', (_message.Message,), { - 'DESCRIPTOR' : _REGISTERLINKRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.RegisterLinkResponse) - }) -_sym_db.RegisterMessage(RegisterLinkResponse) - -GetMetricsRequest = _reflection.GeneratedProtocolMessageType('GetMetricsRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETMETRICSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetMetricsRequest) - }) -_sym_db.RegisterMessage(GetMetricsRequest) - -GetMetricsResponse = _reflection.GeneratedProtocolMessageType('GetMetricsResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETMETRICSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetMetricsResponse) - }) -_sym_db.RegisterMessage(GetMetricsResponse) - -LoadBalanceRequest = _reflection.GeneratedProtocolMessageType('LoadBalanceRequest', (_message.Message,), { - 'DESCRIPTOR' : _LOADBALANCEREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.LoadBalanceRequest) - }) -_sym_db.RegisterMessage(LoadBalanceRequest) - -ManualCompactionRequest = _reflection.GeneratedProtocolMessageType('ManualCompactionRequest', (_message.Message,), { - 'DESCRIPTOR' : _MANUALCOMPACTIONREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ManualCompactionRequest) - }) -_sym_db.RegisterMessage(ManualCompactionRequest) - -ManualCompactionResponse = _reflection.GeneratedProtocolMessageType('ManualCompactionResponse', (_message.Message,), { - 'DESCRIPTOR' : _MANUALCOMPACTIONRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.ManualCompactionResponse) - }) -_sym_db.RegisterMessage(ManualCompactionResponse) - -GetCompactionStateRequest = _reflection.GeneratedProtocolMessageType('GetCompactionStateRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETCOMPACTIONSTATEREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetCompactionStateRequest) - }) -_sym_db.RegisterMessage(GetCompactionStateRequest) - -GetCompactionStateResponse = _reflection.GeneratedProtocolMessageType('GetCompactionStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETCOMPACTIONSTATERESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetCompactionStateResponse) - }) -_sym_db.RegisterMessage(GetCompactionStateResponse) - -GetCompactionPlansRequest = _reflection.GeneratedProtocolMessageType('GetCompactionPlansRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETCOMPACTIONPLANSREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetCompactionPlansRequest) - }) -_sym_db.RegisterMessage(GetCompactionPlansRequest) - -GetCompactionPlansResponse = _reflection.GeneratedProtocolMessageType('GetCompactionPlansResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETCOMPACTIONPLANSRESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetCompactionPlansResponse) - }) -_sym_db.RegisterMessage(GetCompactionPlansResponse) - -CompactionMergeInfo = _reflection.GeneratedProtocolMessageType('CompactionMergeInfo', (_message.Message,), { - 'DESCRIPTOR' : _COMPACTIONMERGEINFO, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.CompactionMergeInfo) - }) -_sym_db.RegisterMessage(CompactionMergeInfo) - -GetFlushStateRequest = _reflection.GeneratedProtocolMessageType('GetFlushStateRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETFLUSHSTATEREQUEST, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetFlushStateRequest) - }) -_sym_db.RegisterMessage(GetFlushStateRequest) - -GetFlushStateResponse = _reflection.GeneratedProtocolMessageType('GetFlushStateResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETFLUSHSTATERESPONSE, - '__module__' : 'milvus_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.milvus.GetFlushStateResponse) - }) -_sym_db.RegisterMessage(GetFlushStateResponse) - - -DESCRIPTOR._options = None -_FLUSHRESPONSE_COLLSEGIDSENTRY._options = None - -_MILVUSSERVICE = _descriptor.ServiceDescriptor( - name='MilvusService', - full_name='milvus.proto.milvus.MilvusService', - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=10664, - serialized_end=14637, - methods=[ - _descriptor.MethodDescriptor( - name='CreateCollection', - full_name='milvus.proto.milvus.MilvusService.CreateCollection', - index=0, - containing_service=None, - input_type=_CREATECOLLECTIONREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='DropCollection', - full_name='milvus.proto.milvus.MilvusService.DropCollection', - index=1, - containing_service=None, - input_type=_DROPCOLLECTIONREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='HasCollection', - full_name='milvus.proto.milvus.MilvusService.HasCollection', - index=2, - containing_service=None, - input_type=_HASCOLLECTIONREQUEST, - output_type=_BOOLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='LoadCollection', - full_name='milvus.proto.milvus.MilvusService.LoadCollection', - index=3, - containing_service=None, - input_type=_LOADCOLLECTIONREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReleaseCollection', - full_name='milvus.proto.milvus.MilvusService.ReleaseCollection', - index=4, - containing_service=None, - input_type=_RELEASECOLLECTIONREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='DescribeCollection', - full_name='milvus.proto.milvus.MilvusService.DescribeCollection', - index=5, - containing_service=None, - input_type=_DESCRIBECOLLECTIONREQUEST, - output_type=_DESCRIBECOLLECTIONRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetCollectionStatistics', - full_name='milvus.proto.milvus.MilvusService.GetCollectionStatistics', - index=6, - containing_service=None, - input_type=_GETCOLLECTIONSTATISTICSREQUEST, - output_type=_GETCOLLECTIONSTATISTICSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ShowCollections', - full_name='milvus.proto.milvus.MilvusService.ShowCollections', - index=7, - containing_service=None, - input_type=_SHOWCOLLECTIONSREQUEST, - output_type=_SHOWCOLLECTIONSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='CreatePartition', - full_name='milvus.proto.milvus.MilvusService.CreatePartition', - index=8, - containing_service=None, - input_type=_CREATEPARTITIONREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='DropPartition', - full_name='milvus.proto.milvus.MilvusService.DropPartition', - index=9, - containing_service=None, - input_type=_DROPPARTITIONREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='HasPartition', - full_name='milvus.proto.milvus.MilvusService.HasPartition', - index=10, - containing_service=None, - input_type=_HASPARTITIONREQUEST, - output_type=_BOOLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='LoadPartitions', - full_name='milvus.proto.milvus.MilvusService.LoadPartitions', - index=11, - containing_service=None, - input_type=_LOADPARTITIONSREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReleasePartitions', - full_name='milvus.proto.milvus.MilvusService.ReleasePartitions', - index=12, - containing_service=None, - input_type=_RELEASEPARTITIONSREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetPartitionStatistics', - full_name='milvus.proto.milvus.MilvusService.GetPartitionStatistics', - index=13, - containing_service=None, - input_type=_GETPARTITIONSTATISTICSREQUEST, - output_type=_GETPARTITIONSTATISTICSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ShowPartitions', - full_name='milvus.proto.milvus.MilvusService.ShowPartitions', - index=14, - containing_service=None, - input_type=_SHOWPARTITIONSREQUEST, - output_type=_SHOWPARTITIONSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='CreateAlias', - full_name='milvus.proto.milvus.MilvusService.CreateAlias', - index=15, - containing_service=None, - input_type=_CREATEALIASREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='DropAlias', - full_name='milvus.proto.milvus.MilvusService.DropAlias', - index=16, - containing_service=None, - input_type=_DROPALIASREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='AlterAlias', - full_name='milvus.proto.milvus.MilvusService.AlterAlias', - index=17, - containing_service=None, - input_type=_ALTERALIASREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='CreateIndex', - full_name='milvus.proto.milvus.MilvusService.CreateIndex', - index=18, - containing_service=None, - input_type=_CREATEINDEXREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='DescribeIndex', - full_name='milvus.proto.milvus.MilvusService.DescribeIndex', - index=19, - containing_service=None, - input_type=_DESCRIBEINDEXREQUEST, - output_type=_DESCRIBEINDEXRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetIndexState', - full_name='milvus.proto.milvus.MilvusService.GetIndexState', - index=20, - containing_service=None, - input_type=_GETINDEXSTATEREQUEST, - output_type=_GETINDEXSTATERESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetIndexBuildProgress', - full_name='milvus.proto.milvus.MilvusService.GetIndexBuildProgress', - index=21, - containing_service=None, - input_type=_GETINDEXBUILDPROGRESSREQUEST, - output_type=_GETINDEXBUILDPROGRESSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='DropIndex', - full_name='milvus.proto.milvus.MilvusService.DropIndex', - index=22, - containing_service=None, - input_type=_DROPINDEXREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Insert', - full_name='milvus.proto.milvus.MilvusService.Insert', - index=23, - containing_service=None, - input_type=_INSERTREQUEST, - output_type=_MUTATIONRESULT, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Delete', - full_name='milvus.proto.milvus.MilvusService.Delete', - index=24, - containing_service=None, - input_type=_DELETEREQUEST, - output_type=_MUTATIONRESULT, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Search', - full_name='milvus.proto.milvus.MilvusService.Search', - index=25, - containing_service=None, - input_type=_SEARCHREQUEST, - output_type=_SEARCHRESULTS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Flush', - full_name='milvus.proto.milvus.MilvusService.Flush', - index=26, - containing_service=None, - input_type=_FLUSHREQUEST, - output_type=_FLUSHRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Query', - full_name='milvus.proto.milvus.MilvusService.Query', - index=27, - containing_service=None, - input_type=_QUERYREQUEST, - output_type=_QUERYRESULTS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='CalcDistance', - full_name='milvus.proto.milvus.MilvusService.CalcDistance', - index=28, - containing_service=None, - input_type=_CALCDISTANCEREQUEST, - output_type=_CALCDISTANCERESULTS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetFlushState', - full_name='milvus.proto.milvus.MilvusService.GetFlushState', - index=29, - containing_service=None, - input_type=_GETFLUSHSTATEREQUEST, - output_type=_GETFLUSHSTATERESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetPersistentSegmentInfo', - full_name='milvus.proto.milvus.MilvusService.GetPersistentSegmentInfo', - index=30, - containing_service=None, - input_type=_GETPERSISTENTSEGMENTINFOREQUEST, - output_type=_GETPERSISTENTSEGMENTINFORESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetQuerySegmentInfo', - full_name='milvus.proto.milvus.MilvusService.GetQuerySegmentInfo', - index=31, - containing_service=None, - input_type=_GETQUERYSEGMENTINFOREQUEST, - output_type=_GETQUERYSEGMENTINFORESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Dummy', - full_name='milvus.proto.milvus.MilvusService.Dummy', - index=32, - containing_service=None, - input_type=_DUMMYREQUEST, - output_type=_DUMMYRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='RegisterLink', - full_name='milvus.proto.milvus.MilvusService.RegisterLink', - index=33, - containing_service=None, - input_type=_REGISTERLINKREQUEST, - output_type=_REGISTERLINKRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetMetrics', - full_name='milvus.proto.milvus.MilvusService.GetMetrics', - index=34, - containing_service=None, - input_type=_GETMETRICSREQUEST, - output_type=_GETMETRICSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='LoadBalance', - full_name='milvus.proto.milvus.MilvusService.LoadBalance', - index=35, - containing_service=None, - input_type=_LOADBALANCEREQUEST, - output_type=common__pb2._STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetCompactionState', - full_name='milvus.proto.milvus.MilvusService.GetCompactionState', - index=36, - containing_service=None, - input_type=_GETCOMPACTIONSTATEREQUEST, - output_type=_GETCOMPACTIONSTATERESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ManualCompaction', - full_name='milvus.proto.milvus.MilvusService.ManualCompaction', - index=37, - containing_service=None, - input_type=_MANUALCOMPACTIONREQUEST, - output_type=_MANUALCOMPACTIONRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='GetCompactionStateWithPlans', - full_name='milvus.proto.milvus.MilvusService.GetCompactionStateWithPlans', - index=38, - containing_service=None, - input_type=_GETCOMPACTIONPLANSREQUEST, - output_type=_GETCOMPACTIONPLANSRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) -_sym_db.RegisterServiceDescriptor(_MILVUSSERVICE) - -DESCRIPTOR.services_by_name['MilvusService'] = _MILVUSSERVICE - - -_PROXYSERVICE = _descriptor.ServiceDescriptor( - name='ProxyService', - full_name='milvus.proto.milvus.ProxyService', - file=DESCRIPTOR, - index=1, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=14639, - serialized_end=14756, - methods=[ - _descriptor.MethodDescriptor( - name='RegisterLink', - full_name='milvus.proto.milvus.ProxyService.RegisterLink', - index=0, - containing_service=None, - input_type=_REGISTERLINKREQUEST, - output_type=_REGISTERLINKRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) -_sym_db.RegisterServiceDescriptor(_PROXYSERVICE) - -DESCRIPTOR.services_by_name['ProxyService'] = _PROXYSERVICE - +from . import feder_pb2 as feder__pb2 +from . import msg_pb2 as msg__pb2 +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cmilvus.proto\x12\x13milvus.proto.milvus\x1a\x0c\x63ommon.proto\x1a\x08rg.proto\x1a\x0cschema.proto\x1a\x0b\x66\x65\x64\x65r.proto\x1a\tmsg.proto\x1a google/protobuf/descriptor.proto\"\x8d\x01\n\x12\x43reateAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\r\n\x05\x61lias\x18\x04 \x01(\t:\x12\xca>\x0f\x08\x01\x10,\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"r\n\x10\x44ropAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t:\x12\xca>\x0f\x08\x01\x10-\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x8c\x01\n\x11\x41lterAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\r\n\x05\x61lias\x18\x04 \x01(\t:\x12\xca>\x0f\x08\x01\x10,\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"v\n\x14\x44\x65scribeAliasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t:\x12\xca>\x0f\x08\x01\x10.\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"x\n\x15\x44\x65scribeAliasResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\r\n\x05\x61lias\x18\x03 \x01(\t\x12\x12\n\ncollection\x18\x04 \x01(\t\"~\n\x12ListAliasesRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t:\x12\xca>\x0f\x08\x01\x10/\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"}\n\x13ListAliasesResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x0f\n\x07\x61liases\x18\x04 \x03(\t\"\xb8\x02\n\x17\x43reateCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x0e\n\x06schema\x18\x04 \x01(\x0c\x12\x12\n\nshards_num\x18\x05 \x01(\x05\x12@\n\x11\x63onsistency_level\x18\x06 \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\x12\x35\n\nproperties\x18\x07 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x16\n\x0enum_partitions\x18\x08 \x01(\x03:\x12\xca>\x0f\x08\x01\x10\x01\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x81\x01\n\x15\x44ropCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x02\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xe4\x01\n\x16\x41lterCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x35\n\nproperties\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x13\n\x0b\x64\x65lete_keys\x18\x06 \x03(\t:\x12\xca>\x0f\x08\x01\x10\x01\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xe7\x01\n\x1b\x41lterCollectionFieldRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x35\n\nproperties\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x13\n\x0b\x64\x65lete_keys\x18\x06 \x03(\t:\x12\xca>\x0f\x08\x01\x10\x01\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x80\x01\n\x14HasCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\ntime_stamp\x18\x04 \x01(\x04\"J\n\x0c\x42oolResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\r\n\x05value\x18\x02 \x01(\x08\"L\n\x0eStringResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\r\n\x05value\x18\x02 \x01(\t\"\xaf\x01\n\x19\x44\x65scribeCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x12\n\ntime_stamp\x18\x05 \x01(\x04:\x12\xca>\x0f\x08\x01\x10\x03\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x87\x05\n\x1a\x44\x65scribeCollectionResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x35\n\x06schema\x18\x02 \x01(\x0b\x32%.milvus.proto.schema.CollectionSchema\x12\x14\n\x0c\x63ollectionID\x18\x03 \x01(\x03\x12\x1d\n\x15virtual_channel_names\x18\x04 \x03(\t\x12\x1e\n\x16physical_channel_names\x18\x05 \x03(\t\x12\x19\n\x11\x63reated_timestamp\x18\x06 \x01(\x04\x12\x1d\n\x15\x63reated_utc_timestamp\x18\x07 \x01(\x04\x12\x12\n\nshards_num\x18\x08 \x01(\x05\x12\x0f\n\x07\x61liases\x18\t \x03(\t\x12\x39\n\x0fstart_positions\x18\n \x03(\x0b\x32 .milvus.proto.common.KeyDataPair\x12@\n\x11\x63onsistency_level\x18\x0b \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\x12\x17\n\x0f\x63ollection_name\x18\x0c \x01(\t\x12\x35\n\nproperties\x18\r \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x0f\n\x07\x64\x62_name\x18\x0e \x01(\t\x12\x16\n\x0enum_partitions\x18\x0f \x01(\x03\x12\r\n\x05\x64\x62_id\x18\x10 \x01(\x03\x12\x14\n\x0crequest_time\x18\x11 \x01(\x04\x12\x18\n\x10update_timestamp\x18\x12 \x01(\x04\x12\x1c\n\x14update_timestamp_str\x18\x13 \x01(\t\"t\n\x1e\x42\x61tchDescribeCollectionRequest\x12\x0f\n\x07\x64\x62_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x02 \x03(\t\x12\x14\n\x0c\x63ollectionID\x18\x03 \x03(\x03:\x12\xca>\x0f\x08\x01\x10\x03\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x92\x01\n\x1f\x42\x61tchDescribeCollectionResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x42\n\tresponses\x18\x02 \x03(\x0b\x32/.milvus.proto.milvus.DescribeCollectionResponse\"\xf2\x02\n\x15LoadCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0ereplica_number\x18\x04 \x01(\x05\x12\x17\n\x0fresource_groups\x18\x05 \x03(\t\x12\x0f\n\x07refresh\x18\x06 \x01(\x08\x12\x13\n\x0bload_fields\x18\x07 \x03(\t\x12\x1f\n\x17skip_load_dynamic_field\x18\x08 \x01(\x08\x12O\n\x0bload_params\x18\t \x03(\x0b\x32:.milvus.proto.milvus.LoadCollectionRequest.LoadParamsEntry\x1a\x31\n\x0fLoadParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01:\x07\xca>\x04\x10\x05\x18\x03\"y\n\x18ReleaseCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t:\x07\xca>\x04\x10\x06\x18\x03\"\xab\x01\n\x14GetStatisticsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\x12\x1b\n\x13guarantee_timestamp\x18\x05 \x01(\x04:\x07\xca>\x04\x10\n\x18\x03\"v\n\x15GetStatisticsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x05stats\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\x7f\n\x1eGetCollectionStatisticsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t:\x07\xca>\x04\x10\n\x18\x03\"\x80\x01\n\x1fGetCollectionStatisticsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x05stats\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xb4\x01\n\x16ShowCollectionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x12\n\ntime_stamp\x18\x03 \x01(\x04\x12+\n\x04type\x18\x04 \x01(\x0e\x32\x1d.milvus.proto.milvus.ShowType\x12\x1c\n\x10\x63ollection_names\x18\x05 \x03(\tB\x02\x18\x01\"\x8b\x02\n\x17ShowCollectionsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x18\n\x10\x63ollection_names\x18\x02 \x03(\t\x12\x16\n\x0e\x63ollection_ids\x18\x03 \x03(\x03\x12\x1a\n\x12\x63reated_timestamps\x18\x04 \x03(\x04\x12\x1e\n\x16\x63reated_utc_timestamps\x18\x05 \x03(\x04\x12 \n\x14inMemory_percentages\x18\x06 \x03(\x03\x42\x02\x18\x01\x12\x1f\n\x17query_service_available\x18\x07 \x03(\x08\x12\x12\n\nshards_num\x18\x08 \x03(\x05\"\x8f\x01\n\x16\x43reatePartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t:\x07\xca>\x04\x10\'\x18\x03\"\x8d\x01\n\x14\x44ropPartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t:\x07\xca>\x04\x10(\x18\x03\"\x8c\x01\n\x13HasPartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t:\x07\xca>\x04\x10*\x18\x03\"\x8b\x03\n\x15LoadPartitionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\x12\x16\n\x0ereplica_number\x18\x05 \x01(\x05\x12\x17\n\x0fresource_groups\x18\x06 \x03(\t\x12\x0f\n\x07refresh\x18\x07 \x01(\x08\x12\x13\n\x0bload_fields\x18\x08 \x03(\t\x12\x1f\n\x17skip_load_dynamic_field\x18\t \x01(\x08\x12O\n\x0bload_params\x18\n \x03(\x0b\x32:.milvus.proto.milvus.LoadPartitionsRequest.LoadParamsEntry\x1a\x31\n\x0fLoadParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01:\x07\xca>\x04\x10\x05\x18\x03\"\x92\x01\n\x18ReleasePartitionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t:\x07\xca>\x04\x10\x06\x18\x03\"\x8d\x01\n\x1dGetPartitionStatisticsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\"\x7f\n\x1eGetPartitionStatisticsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x05stats\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xd6\x01\n\x15ShowPartitionsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x17\n\x0fpartition_names\x18\x05 \x03(\t\x12/\n\x04type\x18\x06 \x01(\x0e\x32\x1d.milvus.proto.milvus.ShowTypeB\x02\x18\x01:\x07\xca>\x04\x10)\x18\x03\"\xd2\x01\n\x16ShowPartitionsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x17\n\x0fpartition_names\x18\x02 \x03(\t\x12\x14\n\x0cpartitionIDs\x18\x03 \x03(\x03\x12\x1a\n\x12\x63reated_timestamps\x18\x04 \x03(\x04\x12\x1e\n\x16\x63reated_utc_timestamps\x18\x05 \x03(\x04\x12 \n\x14inMemory_percentages\x18\x06 \x03(\x03\x42\x02\x18\x01\"m\n\x16\x44\x65scribeSegmentRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x11\n\tsegmentID\x18\x03 \x01(\x03\"\x8f\x01\n\x17\x44\x65scribeSegmentResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07indexID\x18\x02 \x01(\x03\x12\x0f\n\x07\x62uildID\x18\x03 \x01(\x03\x12\x14\n\x0c\x65nable_index\x18\x04 \x01(\x08\x12\x0f\n\x07\x66ieldID\x18\x05 \x01(\x03\"l\n\x13ShowSegmentsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x03 \x01(\x03\"W\n\x14ShowSegmentsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x12\n\nsegmentIDs\x18\x02 \x03(\x03\"\xd4\x01\n\x12\x43reateIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x37\n\x0c\x65xtra_params\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x12\n\nindex_name\x18\x06 \x01(\t:\x07\xca>\x04\x10\x0b\x18\x03\"\xd4\x01\n\x11\x41lterIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nindex_name\x18\x04 \x01(\t\x12\x37\n\x0c\x65xtra_params\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x13\n\x0b\x64\x65lete_keys\x18\x06 \x03(\t:\x07\xca>\x04\x10\x0b\x18\x03\"\xb0\x01\n\x14\x44\x65scribeIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\x04:\x07\xca>\x04\x10\x0c\x18\x03\"\xcb\x02\n\x10IndexDescription\x12\x12\n\nindex_name\x18\x01 \x01(\t\x12\x0f\n\x07indexID\x18\x02 \x01(\x03\x12\x31\n\x06params\x18\x03 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x14\n\x0cindexed_rows\x18\x05 \x01(\x03\x12\x12\n\ntotal_rows\x18\x06 \x01(\x03\x12.\n\x05state\x18\x07 \x01(\x0e\x32\x1f.milvus.proto.common.IndexState\x12\x1f\n\x17index_state_fail_reason\x18\x08 \x01(\t\x12\x1a\n\x12pending_index_rows\x18\t \x01(\x03\x12\x19\n\x11min_index_version\x18\n \x01(\x05\x12\x19\n\x11max_index_version\x18\x0b \x01(\x05\"\x87\x01\n\x15\x44\x65scribeIndexResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x41\n\x12index_descriptions\x18\x02 \x03(\x0b\x32%.milvus.proto.milvus.IndexDescription\"\xa5\x01\n\x1cGetIndexBuildProgressRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t:\x07\xca>\x04\x10\x0c\x18\x03\"v\n\x1dGetIndexBuildProgressResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x14\n\x0cindexed_rows\x18\x02 \x01(\x03\x12\x12\n\ntotal_rows\x18\x03 \x01(\x03\"\x9d\x01\n\x14GetIndexStateRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t:\x07\xca>\x04\x10\x0c\x18\x03\"\x89\x01\n\x15GetIndexStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12.\n\x05state\x18\x02 \x01(\x0e\x32\x1f.milvus.proto.common.IndexState\x12\x13\n\x0b\x66\x61il_reason\x18\x03 \x01(\t\"\x99\x01\n\x10\x44ropIndexRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nfield_name\x18\x04 \x01(\t\x12\x12\n\nindex_name\x18\x05 \x01(\t:\x07\xca>\x04\x10\r\x18\x03\"\xa0\x02\n\rInsertRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x33\n\x0b\x66ields_data\x18\x05 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x11\n\thash_keys\x18\x06 \x03(\r\x12\x10\n\x08num_rows\x18\x07 \x01(\r\x12\x18\n\x10schema_timestamp\x18\x08 \x01(\x04\x12\x16\n\tnamespace\x18\t \x01(\tH\x00\x88\x01\x01:\x07\xca>\x04\x10\x08\x18\x03\x42\x0c\n\n_namespace\"\xa0\x01\n\x19\x41\x64\x64\x43ollectionFieldRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x0e\n\x06schema\x18\x05 \x01(\x0c:\x07\xca>\x04\x10G\x18\x03\"\xd0\x01\n\x1c\x41\x64\x64\x43ollectionFunctionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12;\n\x0e\x66unctionSchema\x18\x05 \x01(\x0b\x32#.milvus.proto.schema.FunctionSchema:\x07\xca>\x04\x10K\x18\x03\"\xe9\x01\n\x1e\x41lterCollectionFunctionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x15\n\rfunction_name\x18\x05 \x01(\t\x12;\n\x0e\x66unctionSchema\x18\x06 \x01(\x0b\x32#.milvus.proto.schema.FunctionSchema:\x07\xca>\x04\x10M\x18\x03\"\xab\x01\n\x1d\x44ropCollectionFunctionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x15\n\rfunction_name\x18\x05 \x01(\t:\x07\xca>\x04\x10M\x18\x03\"\xb8\x02\n\rUpsertRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x33\n\x0b\x66ields_data\x18\x05 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x11\n\thash_keys\x18\x06 \x03(\r\x12\x10\n\x08num_rows\x18\x07 \x01(\r\x12\x18\n\x10schema_timestamp\x18\x08 \x01(\x04\x12\x16\n\x0epartial_update\x18\t \x01(\x08\x12\x16\n\tnamespace\x18\n \x01(\tH\x00\x88\x01\x01:\x07\xca>\x04\x10\x19\x18\x03\x42\x0c\n\n_namespace\"\xf0\x01\n\x0eMutationResult\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12%\n\x03IDs\x18\x02 \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\x12\n\nsucc_index\x18\x03 \x03(\r\x12\x11\n\terr_index\x18\x04 \x03(\r\x12\x14\n\x0c\x61\x63knowledged\x18\x05 \x01(\x08\x12\x12\n\ninsert_cnt\x18\x06 \x01(\x03\x12\x12\n\ndelete_cnt\x18\x07 \x01(\x03\x12\x12\n\nupsert_cnt\x18\x08 \x01(\x03\x12\x11\n\ttimestamp\x18\t \x01(\x04\"\xa2\x03\n\rDeleteRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x05 \x01(\t\x12\x11\n\thash_keys\x18\x06 \x03(\r\x12@\n\x11\x63onsistency_level\x18\x07 \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\x12X\n\x14\x65xpr_template_values\x18\x08 \x03(\x0b\x32:.milvus.proto.milvus.DeleteRequest.ExprTemplateValuesEntry\x1a]\n\x17\x45xprTemplateValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".milvus.proto.schema.TemplateValue:\x02\x38\x01:\x07\xca>\x04\x10\t\x18\x03\"\x92\x03\n\x10SubSearchRequest\x12\x0b\n\x03\x64sl\x18\x01 \x01(\t\x12\x19\n\x11placeholder_group\x18\x02 \x01(\x0c\x12.\n\x08\x64sl_type\x18\x03 \x01(\x0e\x32\x1c.milvus.proto.common.DslType\x12\x38\n\rsearch_params\x18\x04 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\n\n\x02nq\x18\x05 \x01(\x03\x12[\n\x14\x65xpr_template_values\x18\x06 \x03(\x0b\x32=.milvus.proto.milvus.SubSearchRequest.ExprTemplateValuesEntry\x12\x16\n\tnamespace\x18\x07 \x01(\tH\x00\x88\x01\x01\x1a]\n\x17\x45xprTemplateValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".milvus.proto.schema.TemplateValue:\x02\x38\x01\x42\x0c\n\n_namespace\"\x9e\x07\n\rSearchRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\x12\x0b\n\x03\x64sl\x18\x05 \x01(\t\x12\x19\n\x11placeholder_group\x18\x06 \x01(\x0c\x12.\n\x08\x64sl_type\x18\x07 \x01(\x0e\x32\x1c.milvus.proto.common.DslType\x12\x15\n\routput_fields\x18\x08 \x03(\t\x12\x38\n\rsearch_params\x18\t \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x18\n\x10travel_timestamp\x18\n \x01(\x04\x12\x1b\n\x13guarantee_timestamp\x18\x0b \x01(\x04\x12\n\n\x02nq\x18\x0c \x01(\x03\x12\x1b\n\x13not_return_all_meta\x18\r \x01(\x08\x12@\n\x11\x63onsistency_level\x18\x0e \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\x12\x1f\n\x17use_default_consistency\x18\x0f \x01(\x08\x12\x1e\n\x16search_by_primary_keys\x18\x10 \x01(\x08\x12\x37\n\x08sub_reqs\x18\x11 \x03(\x0b\x32%.milvus.proto.milvus.SubSearchRequest\x12X\n\x14\x65xpr_template_values\x18\x12 \x03(\x0b\x32:.milvus.proto.milvus.SearchRequest.ExprTemplateValuesEntry\x12:\n\x0e\x66unction_score\x18\x13 \x01(\x0b\x32\".milvus.proto.schema.FunctionScore\x12\x16\n\tnamespace\x18\x14 \x01(\tH\x00\x88\x01\x01\x12\x35\n\x0bhighlighter\x18\x15 \x01(\x0b\x32 .milvus.proto.common.Highlighter\x1a]\n\x17\x45xprTemplateValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".milvus.proto.schema.TemplateValue:\x02\x38\x01:\x07\xca>\x04\x10\x0e\x18\x03\x42\x0c\n\n_namespace\"5\n\x04Hits\x12\x0b\n\x03IDs\x18\x01 \x03(\x03\x12\x10\n\x08row_data\x18\x02 \x03(\x0c\x12\x0e\n\x06scores\x18\x03 \x03(\x02\"\xa1\x01\n\rSearchResults\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x36\n\x07results\x18\x02 \x01(\x0b\x32%.milvus.proto.schema.SearchResultData\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nsession_ts\x18\x04 \x01(\x04\"\xab\x04\n\x13HybridSearchRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\x12\x34\n\x08requests\x18\x05 \x03(\x0b\x32\".milvus.proto.milvus.SearchRequest\x12\x36\n\x0brank_params\x18\x06 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x18\n\x10travel_timestamp\x18\x07 \x01(\x04\x12\x1b\n\x13guarantee_timestamp\x18\x08 \x01(\x04\x12\x1b\n\x13not_return_all_meta\x18\t \x01(\x08\x12\x15\n\routput_fields\x18\n \x03(\t\x12@\n\x11\x63onsistency_level\x18\x0b \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\x12\x1f\n\x17use_default_consistency\x18\x0c \x01(\x08\x12:\n\x0e\x66unction_score\x18\r \x01(\x0b\x32\".milvus.proto.schema.FunctionScore\x12\x16\n\tnamespace\x18\x0e \x01(\tH\x00\x88\x01\x01:\x07\xca>\x04\x10\x0e\x18\x03\x42\x0c\n\n_namespace\"n\n\x0c\x46lushRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x18\n\x10\x63ollection_names\x18\x03 \x03(\t:\x07\xca>\x04\x10\x0f \x03\"\xb6\x06\n\rFlushResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12G\n\x0b\x63oll_segIDs\x18\x03 \x03(\x0b\x32\x32.milvus.proto.milvus.FlushResponse.CollSegIDsEntry\x12R\n\x11\x66lush_coll_segIDs\x18\x04 \x03(\x0b\x32\x37.milvus.proto.milvus.FlushResponse.FlushCollSegIDsEntry\x12N\n\x0f\x63oll_seal_times\x18\x05 \x03(\x0b\x32\x35.milvus.proto.milvus.FlushResponse.CollSealTimesEntry\x12J\n\rcoll_flush_ts\x18\x06 \x03(\x0b\x32\x33.milvus.proto.milvus.FlushResponse.CollFlushTsEntry\x12G\n\x0b\x63hannel_cps\x18\x07 \x03(\x0b\x32\x32.milvus.proto.milvus.FlushResponse.ChannelCpsEntry\x1aQ\n\x0f\x43ollSegIDsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArray:\x02\x38\x01\x1aV\n\x14\x46lushCollSegIDsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArray:\x02\x38\x01\x1a\x34\n\x12\x43ollSealTimesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\x32\n\x10\x43ollFlushTsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x04:\x02\x38\x01\x1aP\n\x0f\x43hannelCpsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.msg.MsgPosition:\x02\x38\x01\"\xf9\x04\n\x0cQueryRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x0c\n\x04\x65xpr\x18\x04 \x01(\t\x12\x15\n\routput_fields\x18\x05 \x03(\t\x12\x17\n\x0fpartition_names\x18\x06 \x03(\t\x12\x18\n\x10travel_timestamp\x18\x07 \x01(\x04\x12\x1b\n\x13guarantee_timestamp\x18\x08 \x01(\x04\x12\x37\n\x0cquery_params\x18\t \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x1b\n\x13not_return_all_meta\x18\n \x01(\x08\x12@\n\x11\x63onsistency_level\x18\x0b \x01(\x0e\x32%.milvus.proto.common.ConsistencyLevel\x12\x1f\n\x17use_default_consistency\x18\x0c \x01(\x08\x12W\n\x14\x65xpr_template_values\x18\r \x03(\x0b\x32\x39.milvus.proto.milvus.QueryRequest.ExprTemplateValuesEntry\x12\x16\n\tnamespace\x18\x0e \x01(\tH\x00\x88\x01\x01\x1a]\n\x17\x45xprTemplateValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".milvus.proto.schema.TemplateValue:\x02\x38\x01:\x07\xca>\x04\x10\x10\x18\x03\x42\x0c\n\n_namespace\"\xd0\x01\n\x0cQueryResults\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x33\n\x0b\x66ields_data\x18\x02 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x15\n\routput_fields\x18\x04 \x03(\t\x12\x12\n\nsession_ts\x18\x05 \x01(\x04\x12\x1a\n\x12primary_field_name\x18\x06 \x01(\t\"R\n\x0bQueryCursor\x12\x12\n\nsession_ts\x18\x01 \x01(\x04\x12\x10\n\x06str_pk\x18\x02 \x01(\tH\x00\x12\x10\n\x06int_pk\x18\x03 \x01(\x03H\x00\x42\x0b\n\tcursor_pk\"}\n\tVectorIDs\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12*\n\x08id_array\x18\x03 \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\x17\n\x0fpartition_names\x18\x04 \x03(\t\"\x83\x01\n\x0cVectorsArray\x12\x32\n\x08id_array\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.milvus.VectorIDsH\x00\x12\x36\n\ndata_array\x18\x02 \x01(\x0b\x32 .milvus.proto.schema.VectorFieldH\x00\x42\x07\n\x05\x61rray\"\xdd\x01\n\x13\x43\x61lcDistanceRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x32\n\x07op_left\x18\x02 \x01(\x0b\x32!.milvus.proto.milvus.VectorsArray\x12\x33\n\x08op_right\x18\x03 \x01(\x0b\x32!.milvus.proto.milvus.VectorsArray\x12\x31\n\x06params\x18\x04 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xb5\x01\n\x13\x43\x61lcDistanceResults\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x31\n\x08int_dist\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.schema.IntArrayH\x00\x12\x35\n\nfloat_dist\x18\x03 \x01(\x0b\x32\x1f.milvus.proto.schema.FloatArrayH\x00\x42\x07\n\x05\x61rray\";\n\x0e\x46lushAllTarget\x12\x0f\n\x07\x64\x62_name\x18\x01 \x01(\t\x12\x18\n\x10\x63ollection_names\x18\x02 \x03(\t\"\xa2\x01\n\x0f\x46lushAllRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x13\n\x07\x64\x62_name\x18\x02 \x01(\tB\x02\x18\x01\x12:\n\rflush_targets\x18\x03 \x03(\x0b\x32#.milvus.proto.milvus.FlushAllTarget:\x12\xca>\x0f\x08\x01\x10&\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x91\x01\n\x10\x46lushAllResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x14\n\x0c\x66lush_all_ts\x18\x02 \x01(\x04\x12:\n\rflush_results\x18\x03 \x03(\x0b\x32#.milvus.proto.milvus.FlushAllResult\"i\n\x0e\x46lushAllResult\x12\x0f\n\x07\x64\x62_name\x18\x01 \x01(\t\x12\x46\n\x12\x63ollection_results\x18\x02 \x03(\x0b\x32*.milvus.proto.milvus.FlushCollectionResult\"\xe8\x02\n\x15\x46lushCollectionResult\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x33\n\x0bsegment_ids\x18\x02 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArray\x12\x39\n\x11\x66lush_segment_ids\x18\x03 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArray\x12\x11\n\tseal_time\x18\x04 \x01(\x03\x12\x10\n\x08\x66lush_ts\x18\x05 \x01(\x04\x12O\n\x0b\x63hannel_cps\x18\x06 \x03(\x0b\x32:.milvus.proto.milvus.FlushCollectionResult.ChannelCpsEntry\x1aP\n\x0f\x43hannelCpsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.msg.MsgPosition:\x02\x38\x01\"\xf7\x01\n\x15PersistentSegmentInfo\x12\x11\n\tsegmentID\x18\x01 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x03 \x01(\x03\x12\x10\n\x08num_rows\x18\x04 \x01(\x03\x12\x30\n\x05state\x18\x05 \x01(\x0e\x32!.milvus.proto.common.SegmentState\x12\x30\n\x05level\x18\x06 \x01(\x0e\x32!.milvus.proto.common.SegmentLevel\x12\x11\n\tis_sorted\x18\x07 \x01(\x08\x12\x17\n\x0fstorage_version\x18\x08 \x01(\x03\"u\n\x1fGetPersistentSegmentInfoRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0e\n\x06\x64\x62Name\x18\x02 \x01(\t\x12\x16\n\x0e\x63ollectionName\x18\x03 \x01(\t\"\x8a\x01\n GetPersistentSegmentInfoResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x39\n\x05infos\x18\x02 \x03(\x0b\x32*.milvus.proto.milvus.PersistentSegmentInfo\"\xce\x02\n\x10QuerySegmentInfo\x12\x11\n\tsegmentID\x18\x01 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x03 \x01(\x03\x12\x10\n\x08mem_size\x18\x04 \x01(\x03\x12\x10\n\x08num_rows\x18\x05 \x01(\x03\x12\x12\n\nindex_name\x18\x06 \x01(\t\x12\x0f\n\x07indexID\x18\x07 \x01(\x03\x12\x12\n\x06nodeID\x18\x08 \x01(\x03\x42\x02\x18\x01\x12\x30\n\x05state\x18\t \x01(\x0e\x32!.milvus.proto.common.SegmentState\x12\x0f\n\x07nodeIds\x18\n \x03(\x03\x12\x30\n\x05level\x18\x0b \x01(\x0e\x32!.milvus.proto.common.SegmentLevel\x12\x11\n\tis_sorted\x18\x0c \x01(\x08\x12\x17\n\x0fstorage_version\x18\r \x01(\x03\"p\n\x1aGetQuerySegmentInfoRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0e\n\x06\x64\x62Name\x18\x02 \x01(\t\x12\x16\n\x0e\x63ollectionName\x18\x03 \x01(\t\"\x80\x01\n\x1bGetQuerySegmentInfoResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x34\n\x05infos\x18\x02 \x03(\x0b\x32%.milvus.proto.milvus.QuerySegmentInfo\"$\n\x0c\x44ummyRequest\x12\x14\n\x0crequest_type\x18\x01 \x01(\t\"!\n\rDummyResponse\x12\x10\n\x08response\x18\x01 \x01(\t\"\x15\n\x13RegisterLinkRequest\"r\n\x14RegisterLinkResponse\x12-\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.Address\x12+\n\x06status\x18\x02 \x01(\x0b\x32\x1b.milvus.proto.common.Status\"P\n\x11GetMetricsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07request\x18\x02 \x01(\t\"k\n\x12GetMetricsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x10\n\x08response\x18\x02 \x01(\t\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\x98\x01\n\rComponentInfo\x12\x0e\n\x06nodeID\x18\x01 \x01(\x03\x12\x0c\n\x04role\x18\x02 \x01(\t\x12\x32\n\nstate_code\x18\x03 \x01(\x0e\x32\x1e.milvus.proto.common.StateCode\x12\x35\n\nextra_info\x18\x04 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xb2\x01\n\x0f\x43omponentStates\x12\x31\n\x05state\x18\x01 \x01(\x0b\x32\".milvus.proto.milvus.ComponentInfo\x12?\n\x13subcomponent_states\x18\x02 \x03(\x0b\x32\".milvus.proto.milvus.ComponentInfo\x12+\n\x06status\x18\x03 \x01(\x0b\x32\x1b.milvus.proto.common.Status\"\x1b\n\x19GetComponentStatesRequest\"\xb6\x01\n\x12LoadBalanceRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x12\n\nsrc_nodeID\x18\x02 \x01(\x03\x12\x13\n\x0b\x64st_nodeIDs\x18\x03 \x03(\x03\x12\x19\n\x11sealed_segmentIDs\x18\x04 \x03(\x03\x12\x16\n\x0e\x63ollectionName\x18\x05 \x01(\t\x12\x0f\n\x07\x64\x62_name\x18\x06 \x01(\t:\x07\xca>\x04\x10\x11\x18\x05\"\xf6\x01\n\x17ManualCompactionRequest\x12\x14\n\x0c\x63ollectionID\x18\x01 \x01(\x03\x12\x12\n\ntimetravel\x18\x02 \x01(\x04\x12\x17\n\x0fmajorCompaction\x18\x03 \x01(\x08\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x62_name\x18\x05 \x01(\t\x12\x14\n\x0cpartition_id\x18\x06 \x01(\x03\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\t\x12\x13\n\x0bsegment_ids\x18\x08 \x03(\x03\x12\x14\n\x0cl0Compaction\x18\t \x01(\x08\x12\x13\n\x0btarget_size\x18\n \x01(\x03:\x07\xca>\x04\x10\x07\x18\x04\"z\n\x18ManualCompactionResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x14\n\x0c\x63ompactionID\x18\x02 \x01(\x03\x12\x1b\n\x13\x63ompactionPlanCount\x18\x03 \x01(\x05\"1\n\x19GetCompactionStateRequest\x12\x14\n\x0c\x63ompactionID\x18\x01 \x01(\x03\"\xdd\x01\n\x1aGetCompactionStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x33\n\x05state\x18\x02 \x01(\x0e\x32$.milvus.proto.common.CompactionState\x12\x17\n\x0f\x65xecutingPlanNo\x18\x03 \x01(\x03\x12\x15\n\rtimeoutPlanNo\x18\x04 \x01(\x03\x12\x17\n\x0f\x63ompletedPlanNo\x18\x05 \x01(\x03\x12\x14\n\x0c\x66\x61iledPlanNo\x18\x06 \x01(\x03\"1\n\x19GetCompactionPlansRequest\x12\x14\n\x0c\x63ompactionID\x18\x01 \x01(\x03\"\xbc\x01\n\x1aGetCompactionPlansResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x33\n\x05state\x18\x02 \x01(\x0e\x32$.milvus.proto.common.CompactionState\x12<\n\nmergeInfos\x18\x03 \x03(\x0b\x32(.milvus.proto.milvus.CompactionMergeInfo\"6\n\x13\x43ompactionMergeInfo\x12\x0f\n\x07sources\x18\x01 \x03(\x03\x12\x0e\n\x06target\x18\x02 \x01(\x03\"o\n\x14GetFlushStateRequest\x12\x12\n\nsegmentIDs\x18\x01 \x03(\x03\x12\x10\n\x08\x66lush_ts\x18\x02 \x01(\x04\x12\x0f\n\x07\x64\x62_name\x18\x03 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t:\x07\xca>\x04\x10+\x18\x04\"U\n\x15GetFlushStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x66lushed\x18\x02 \x01(\x08\"\xac\x01\n\x17GetFlushAllStateRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x66lush_all_ts\x18\x02 \x01(\x04\x12\x13\n\x07\x64\x62_name\x18\x03 \x01(\tB\x02\x18\x01\x12:\n\rflush_targets\x18\x04 \x03(\x0b\x32#.milvus.proto.milvus.FlushAllTarget\"\x92\x01\n\x18GetFlushAllStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x66lushed\x18\x02 \x01(\x08\x12\x38\n\x0c\x66lush_states\x18\x03 \x03(\x0b\x32\".milvus.proto.milvus.FlushAllState\"\xbe\x01\n\rFlushAllState\x12\x0f\n\x07\x64\x62_name\x18\x01 \x01(\t\x12^\n\x17\x63ollection_flush_states\x18\x02 \x03(\x0b\x32=.milvus.proto.milvus.FlushAllState.CollectionFlushStatesEntry\x1a<\n\x1a\x43ollectionFlushStatesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x08:\x02\x38\x01\"\xe0\x01\n\rImportRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\x16\n\x0epartition_name\x18\x02 \x01(\t\x12\x15\n\rchannel_names\x18\x03 \x03(\t\x12\x11\n\trow_based\x18\x04 \x01(\x08\x12\r\n\x05\x66iles\x18\x05 \x03(\t\x12\x32\n\x07options\x18\x06 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x0f\n\x07\x64\x62_name\x18\x07 \x01(\t\x12\x17\n\x0f\x63lustering_info\x18\x08 \x01(\x0c:\x07\xca>\x04\x10\x12\x18\x01\"L\n\x0eImportResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\r\n\x05tasks\x18\x02 \x03(\x03\"%\n\x15GetImportStateRequest\x12\x0c\n\x04task\x18\x01 \x01(\x03\"\x97\x02\n\x16GetImportStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12/\n\x05state\x18\x02 \x01(\x0e\x32 .milvus.proto.common.ImportState\x12\x11\n\trow_count\x18\x03 \x01(\x03\x12\x0f\n\x07id_list\x18\x04 \x03(\x03\x12\x30\n\x05infos\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\n\n\x02id\x18\x06 \x01(\x03\x12\x15\n\rcollection_id\x18\x07 \x01(\x03\x12\x13\n\x0bsegment_ids\x18\x08 \x03(\x03\x12\x11\n\tcreate_ts\x18\t \x01(\x03\"Q\n\x16ListImportTasksRequest\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0f\n\x07\x64\x62_name\x18\x03 \x01(\t\"\x82\x01\n\x17ListImportTasksResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12:\n\x05tasks\x18\x02 \x03(\x0b\x32+.milvus.proto.milvus.GetImportStateResponse\"\x9a\x01\n\x12GetReplicasRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x18\n\x10with_shard_nodes\x18\x03 \x01(\x08\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x62_name\x18\x05 \x01(\t\"v\n\x13GetReplicasResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x32\n\x08replicas\x18\x02 \x03(\x0b\x32 .milvus.proto.milvus.ReplicaInfo\"\xc1\x02\n\x0bReplicaInfo\x12\x11\n\treplicaID\x18\x01 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x02 \x01(\x03\x12\x15\n\rpartition_ids\x18\x03 \x03(\x03\x12\x39\n\x0eshard_replicas\x18\x04 \x03(\x0b\x32!.milvus.proto.milvus.ShardReplica\x12\x10\n\x08node_ids\x18\x05 \x03(\x03\x12\x1b\n\x13resource_group_name\x18\x06 \x01(\t\x12P\n\x11num_outbound_node\x18\x07 \x03(\x0b\x32\x35.milvus.proto.milvus.ReplicaInfo.NumOutboundNodeEntry\x1a\x36\n\x14NumOutboundNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"`\n\x0cShardReplica\x12\x10\n\x08leaderID\x18\x01 \x01(\x03\x12\x13\n\x0bleader_addr\x18\x02 \x01(\t\x12\x17\n\x0f\x64m_channel_name\x18\x03 \x01(\t\x12\x10\n\x08node_ids\x18\x04 \x03(\x03\"\xbe\x01\n\x17\x43reateCredentialRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\x12\x1e\n\x16\x63reated_utc_timestamps\x18\x04 \x01(\x04\x12\x1f\n\x17modified_utc_timestamps\x18\x05 \x01(\x04:\x12\xca>\x0f\x08\x01\x10\x13\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xcd\x01\n\x17UpdateCredentialRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x13\n\x0boldPassword\x18\x03 \x01(\t\x12\x13\n\x0bnewPassword\x18\x04 \x01(\t\x12\x1e\n\x16\x63reated_utc_timestamps\x18\x05 \x01(\x04\x12\x1f\n\x17modified_utc_timestamps\x18\x06 \x01(\x04:\t\xca>\x06\x08\x02\x10\x14\x18\x02\"k\n\x17\x44\x65leteCredentialRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x10\n\x08username\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x15\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"W\n\x15ListCredUsersResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x11\n\tusernames\x18\x02 \x03(\t\"V\n\x14ListCredUsersRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase:\x12\xca>\x0f\x08\x01\x10\x16\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x1a\n\nRoleEntity\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1a\n\nUserEntity\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x84\x01\n\x11\x43reateRoleRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12/\n\x06\x65ntity\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity:\x12\xca>\x0f\x08\x01\x10\x13\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"x\n\x0f\x44ropRoleRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\trole_name\x18\x02 \x01(\t\x12\x12\n\nforce_drop\x18\x03 \x01(\x08:\x12\xca>\x0f\x08\x01\x10\x15\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"q\n\x1b\x43reatePrivilegeGroupRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x12\n\ngroup_name\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x38\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"o\n\x19\x44ropPrivilegeGroupRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x12\n\ngroup_name\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x39\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\\\n\x1aListPrivilegeGroupsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase:\x12\xca>\x0f\x08\x01\x10:\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x8d\x01\n\x1bListPrivilegeGroupsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x41\n\x10privilege_groups\x18\x02 \x03(\x0b\x32\'.milvus.proto.milvus.PrivilegeGroupInfo\"\xea\x01\n\x1cOperatePrivilegeGroupRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x12\n\ngroup_name\x18\x02 \x01(\t\x12\x38\n\nprivileges\x18\x03 \x03(\x0b\x32$.milvus.proto.milvus.PrivilegeEntity\x12<\n\x04type\x18\x04 \x01(\x0e\x32..milvus.proto.milvus.OperatePrivilegeGroupType:\x12\xca>\x0f\x08\x01\x10;\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xb5\x01\n\x16OperateUserRoleRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x11\n\trole_name\x18\x03 \x01(\t\x12\x36\n\x04type\x18\x04 \x01(\x0e\x32(.milvus.proto.milvus.OperateUserRoleType:\x12\xca>\x0f\x08\x01\x10\x17\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"b\n\x12PrivilegeGroupInfo\x12\x12\n\ngroup_name\x18\x01 \x01(\t\x12\x38\n\nprivileges\x18\x02 \x03(\x0b\x32$.milvus.proto.milvus.PrivilegeEntity\"\x9d\x01\n\x11SelectRoleRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12-\n\x04role\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\x12\x19\n\x11include_user_info\x18\x03 \x01(\x08:\x12\xca>\x0f\x08\x01\x10\x16\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"k\n\nRoleResult\x12-\n\x04role\x18\x01 \x01(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\x12.\n\x05users\x18\x02 \x03(\x0b\x32\x1f.milvus.proto.milvus.UserEntity\"s\n\x12SelectRoleResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x07results\x18\x02 \x03(\x0b\x32\x1f.milvus.proto.milvus.RoleResult\"\x94\x01\n\x11SelectUserRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12-\n\x04user\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.milvus.UserEntity\x12\x19\n\x11include_role_info\x18\x03 \x01(\x08:\t\xca>\x06\x08\x02\x10\x18\x18\x02\"k\n\nUserResult\x12-\n\x04user\x18\x01 \x01(\x0b\x32\x1f.milvus.proto.milvus.UserEntity\x12.\n\x05roles\x18\x02 \x03(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\"s\n\x12SelectUserResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x07results\x18\x02 \x03(\x0b\x32\x1f.milvus.proto.milvus.UserResult\"\x1c\n\x0cObjectEntity\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x1f\n\x0fPrivilegeEntity\x12\x0c\n\x04name\x18\x01 \x01(\t\"w\n\rGrantorEntity\x12-\n\x04user\x18\x01 \x01(\x0b\x32\x1f.milvus.proto.milvus.UserEntity\x12\x37\n\tprivilege\x18\x02 \x01(\x0b\x32$.milvus.proto.milvus.PrivilegeEntity\"L\n\x14GrantPrivilegeEntity\x12\x34\n\x08\x65ntities\x18\x01 \x03(\x0b\x32\".milvus.proto.milvus.GrantorEntity\"\xca\x01\n\x0bGrantEntity\x12-\n\x04role\x18\x01 \x01(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\x12\x31\n\x06object\x18\x02 \x01(\x0b\x32!.milvus.proto.milvus.ObjectEntity\x12\x13\n\x0bobject_name\x18\x03 \x01(\t\x12\x33\n\x07grantor\x18\x04 \x01(\x0b\x32\".milvus.proto.milvus.GrantorEntity\x12\x0f\n\x07\x64\x62_name\x18\x05 \x01(\t\"\x86\x01\n\x12SelectGrantRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x30\n\x06\x65ntity\x18\x02 \x01(\x0b\x32 .milvus.proto.milvus.GrantEntity:\x12\xca>\x0f\x08\x01\x10\x16\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"v\n\x13SelectGrantResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x32\n\x08\x65ntities\x18\x02 \x03(\x0b\x32 .milvus.proto.milvus.GrantEntity\"\xd5\x01\n\x17OperatePrivilegeRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x30\n\x06\x65ntity\x18\x02 \x01(\x0b\x32 .milvus.proto.milvus.GrantEntity\x12\x37\n\x04type\x18\x03 \x01(\x0e\x32).milvus.proto.milvus.OperatePrivilegeType\x12\x0f\n\x07version\x18\x04 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x17\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xa2\x02\n\x19OperatePrivilegeV2Request\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12-\n\x04role\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\x12\x33\n\x07grantor\x18\x03 \x01(\x0b\x32\".milvus.proto.milvus.GrantorEntity\x12\x37\n\x04type\x18\x04 \x01(\x0e\x32).milvus.proto.milvus.OperatePrivilegeType\x12\x0f\n\x07\x64\x62_name\x18\x05 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x06 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x17\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"Z\n\x08UserInfo\x12\x0c\n\x04user\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\x12.\n\x05roles\x18\x03 \x03(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\"\xdd\x01\n\x08RBACMeta\x12,\n\x05users\x18\x01 \x03(\x0b\x32\x1d.milvus.proto.milvus.UserInfo\x12.\n\x05roles\x18\x02 \x03(\x0b\x32\x1f.milvus.proto.milvus.RoleEntity\x12\x30\n\x06grants\x18\x03 \x03(\x0b\x32 .milvus.proto.milvus.GrantEntity\x12\x41\n\x10privilege_groups\x18\x04 \x03(\x0b\x32\'.milvus.proto.milvus.PrivilegeGroupInfo\"W\n\x15\x42\x61\x63kupRBACMetaRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase:\x12\xca>\x0f\x08\x01\x10\x33\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"w\n\x16\x42\x61\x63kupRBACMetaResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\tRBAC_meta\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.milvus.RBACMeta\"\x8a\x01\n\x16RestoreRBACMetaRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x30\n\tRBAC_meta\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.milvus.RBACMeta:\x12\xca>\x0f\x08\x01\x10\x34\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x93\x01\n\x19GetLoadingProgressRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\x12\x17\n\x0fpartition_names\x18\x03 \x03(\t\x12\x0f\n\x07\x64\x62_name\x18\x04 \x01(\t:\x07\xca>\x04\x10!\x18\x02\"u\n\x1aGetLoadingProgressResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x10\n\x08progress\x18\x02 \x01(\x03\x12\x18\n\x10refresh_progress\x18\x03 \x01(\x03\"\x8d\x01\n\x13GetLoadStateRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\x12\x17\n\x0fpartition_names\x18\x03 \x03(\t\x12\x0f\n\x07\x64\x62_name\x18\x04 \x01(\t:\x07\xca>\x04\x10!\x18\x02\"r\n\x14GetLoadStateResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12-\n\x05state\x18\x02 \x01(\x0e\x32\x1e.milvus.proto.common.LoadState\"\x1c\n\tMilvusExt\x12\x0f\n\x07version\x18\x01 \x01(\t\"\x13\n\x11GetVersionRequest\"R\n\x12GetVersionResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07version\x18\x02 \x01(\t\"\x14\n\x12\x43heckHealthRequest\"\x9d\x01\n\x13\x43heckHealthResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x11\n\tisHealthy\x18\x02 \x01(\x08\x12\x0f\n\x07reasons\x18\x03 \x03(\t\x12\x35\n\x0cquota_states\x18\x04 \x03(\x0e\x32\x1f.milvus.proto.milvus.QuotaState\"\xaa\x01\n\x1a\x43reateResourceGroupRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x16\n\x0eresource_group\x18\x02 \x01(\t\x12\x34\n\x06\x63onfig\x18\x03 \x01(\x0b\x32$.milvus.proto.rg.ResourceGroupConfig:\x12\xca>\x0f\x08\x01\x10\x1a\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x99\x02\n\x1bUpdateResourceGroupsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12]\n\x0fresource_groups\x18\x02 \x03(\x0b\x32\x44.milvus.proto.milvus.UpdateResourceGroupsRequest.ResourceGroupsEntry\x1a[\n\x13ResourceGroupsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32$.milvus.proto.rg.ResourceGroupConfig:\x02\x38\x01:\x12\xca>\x0f\x08\x01\x10\x30\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"r\n\x18\x44ropResourceGroupRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x16\n\x0eresource_group\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x1b\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xa5\x01\n\x13TransferNodeRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x1d\n\x15source_resource_group\x18\x02 \x01(\t\x12\x1d\n\x15target_resource_group\x18\x03 \x01(\t\x12\x10\n\x08num_node\x18\x04 \x01(\x05:\x12\xca>\x0f\x08\x01\x10\x1e\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xd5\x01\n\x16TransferReplicaRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x1d\n\x15source_resource_group\x18\x02 \x01(\t\x12\x1d\n\x15target_resource_group\x18\x03 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t\x12\x13\n\x0bnum_replica\x18\x05 \x01(\x03\x12\x0f\n\x07\x64\x62_name\x18\x06 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x1f\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"[\n\x19ListResourceGroupsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase:\x12\xca>\x0f\x08\x01\x10\x1d\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"b\n\x1aListResourceGroupsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x17\n\x0fresource_groups\x18\x02 \x03(\t\"v\n\x1c\x44\x65scribeResourceGroupRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x16\n\x0eresource_group\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x1c\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x88\x01\n\x1d\x44\x65scribeResourceGroupResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12:\n\x0eresource_group\x18\x02 \x01(\x0b\x32\".milvus.proto.milvus.ResourceGroup\"\xd6\x04\n\rResourceGroup\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08\x63\x61pacity\x18\x02 \x01(\x05\x12\x1a\n\x12num_available_node\x18\x03 \x01(\x05\x12T\n\x12num_loaded_replica\x18\x04 \x03(\x0b\x32\x38.milvus.proto.milvus.ResourceGroup.NumLoadedReplicaEntry\x12R\n\x11num_outgoing_node\x18\x05 \x03(\x0b\x32\x37.milvus.proto.milvus.ResourceGroup.NumOutgoingNodeEntry\x12R\n\x11num_incoming_node\x18\x06 \x03(\x0b\x32\x37.milvus.proto.milvus.ResourceGroup.NumIncomingNodeEntry\x12\x34\n\x06\x63onfig\x18\x07 \x01(\x0b\x32$.milvus.proto.rg.ResourceGroupConfig\x12,\n\x05nodes\x18\x08 \x03(\x0b\x32\x1d.milvus.proto.common.NodeInfo\x1a\x37\n\x15NumLoadedReplicaEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x36\n\x14NumOutgoingNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\x1a\x36\n\x14NumIncomingNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"\x9f\x01\n\x17RenameCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x0f\n\x07oldName\x18\x03 \x01(\t\x12\x0f\n\x07newName\x18\x04 \x01(\t\x12\x11\n\tnewDBName\x18\x05 \x01(\t:\x12\xca>\x0f\x08\x01\x10\"\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xa1\x01\n\x19GetIndexStatisticsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x12\n\nindex_name\x18\x04 \x01(\t\x12\x11\n\ttimestamp\x18\x05 \x01(\x04:\x07\xca>\x04\x10\x0c\x18\x03\"\x8c\x01\n\x1aGetIndexStatisticsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x41\n\x12index_descriptions\x18\x02 \x03(\x0b\x32%.milvus.proto.milvus.IndexDescription\"r\n\x0e\x43onnectRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x34\n\x0b\x63lient_info\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.common.ClientInfo\"\x88\x01\n\x0f\x43onnectResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x34\n\x0bserver_info\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.common.ServerInfo\x12\x12\n\nidentifier\x18\x03 \x01(\x03\"C\n\x15\x41llocTimestampRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\"X\n\x16\x41llocTimestampResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\"\x9f\x01\n\x15\x43reateDatabaseRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x35\n\nproperties\x18\x03 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair:\x12\xca>\x0f\x08\x01\x10#\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"f\n\x13\x44ropDatabaseRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10$\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"B\n\x14ListDatabasesRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\"\x81\x01\n\x15ListDatabasesResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x10\n\x08\x64\x62_names\x18\x02 \x03(\t\x12\x19\n\x11\x63reated_timestamp\x18\x03 \x03(\x04\x12\x0e\n\x06\x64\x62_ids\x18\x04 \x03(\x03\"\xc2\x01\n\x14\x41lterDatabaseRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\r\n\x05\x64\x62_id\x18\x03 \x01(\t\x12\x35\n\nproperties\x18\x04 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x13\n\x0b\x64\x65lete_keys\x18\x05 \x03(\t:\x12\xca>\x0f\x08\x01\x10\x31\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"j\n\x17\x44\x65scribeDatabaseRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x32\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xb8\x01\n\x18\x44\x65scribeDatabaseResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x03 \x01(\x03\x12\x19\n\x11\x63reated_timestamp\x18\x04 \x01(\x04\x12\x35\n\nproperties\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xf5\x01\n\x17ReplicateMessageRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63hannel_name\x18\x02 \x01(\t\x12\x0f\n\x07\x42\x65ginTs\x18\x03 \x01(\x04\x12\r\n\x05\x45ndTs\x18\x04 \x01(\x04\x12\x0c\n\x04Msgs\x18\x05 \x03(\x0c\x12\x35\n\x0eStartPositions\x18\x06 \x03(\x0b\x32\x1d.milvus.proto.msg.MsgPosition\x12\x33\n\x0c\x45ndPositions\x18\x07 \x03(\x0b\x32\x1d.milvus.proto.msg.MsgPosition\"Y\n\x18ReplicateMessageResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x10\n\x08position\x18\x02 \x01(\t\"b\n\x15ImportAuthPlaceholder\x12\x0f\n\x07\x64\x62_name\x18\x01 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x02 \x01(\t\x12\x16\n\x0epartition_name\x18\x03 \x01(\t:\x07\xca>\x04\x10\x12\x18\x02\"G\n GetImportProgressAuthPlaceholder\x12\x0f\n\x07\x64\x62_name\x18\x01 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x45\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"Z\n\x1aListImportsAuthPlaceholder\x12\x0f\n\x07\x64\x62_name\x18\x03 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x01 \x01(\t:\x12\xca>\x0f\x08\x01\x10\x46\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\xec\x01\n\x12RunAnalyzerRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x17\n\x0f\x61nalyzer_params\x18\x02 \x01(\t\x12\x13\n\x0bplaceholder\x18\x03 \x03(\x0c\x12\x13\n\x0bwith_detail\x18\x04 \x01(\x08\x12\x11\n\twith_hash\x18\x05 \x01(\x08\x12\x0f\n\x07\x64\x62_name\x18\x06 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x07 \x01(\t\x12\x12\n\nfield_name\x18\x08 \x01(\t\x12\x16\n\x0e\x61nalyzer_names\x18\t \x03(\t\"\x81\x01\n\rAnalyzerToken\x12\r\n\x05token\x18\x01 \x01(\t\x12\x14\n\x0cstart_offset\x18\x02 \x01(\x03\x12\x12\n\nend_offset\x18\x03 \x01(\x03\x12\x10\n\x08position\x18\x04 \x01(\x03\x12\x17\n\x0fposition_length\x18\x05 \x01(\x03\x12\x0c\n\x04hash\x18\x06 \x01(\r\"D\n\x0e\x41nalyzerResult\x12\x32\n\x06tokens\x18\x01 \x03(\x0b\x32\".milvus.proto.milvus.AnalyzerToken\"x\n\x13RunAnalyzerResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x34\n\x07results\x18\x02 \x03(\x0b\x32#.milvus.proto.milvus.AnalyzerResult\":\n\x10\x46ileResourceInfo\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\"t\n\x16\x41\x64\x64\x46ileResourceRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t:\x12\xca>\x0f\x08\x01\x10H\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"i\n\x19RemoveFileResourceRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0c\n\x04name\x18\x02 \x01(\t:\x12\xca>\x0f\x08\x01\x10I\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"Z\n\x18ListFileResourcesRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase:\x12\xca>\x0f\x08\x01\x10J\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x82\x01\n\x19ListFileResourcesResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x38\n\tresources\x18\x02 \x03(\x0b\x32%.milvus.proto.milvus.FileResourceInfo\"\xcc\x01\n\x12\x41\x64\x64UserTagsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tuser_name\x18\x02 \x01(\t\x12?\n\x04tags\x18\x03 \x03(\x0b\x32\x31.milvus.proto.milvus.AddUserTagsRequest.TagsEntry\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01:\t\xca>\x06\x08\x02\x10\x14\x18\x02\"s\n\x15\x44\x65leteUserTagsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tuser_name\x18\x02 \x01(\t\x12\x10\n\x08tag_keys\x18\x03 \x03(\t:\t\xca>\x06\x08\x02\x10\x14\x18\x02\"^\n\x12GetUserTagsRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tuser_name\x18\x02 \x01(\t:\t\xca>\x06\x08\x02\x10\x18\x18\x02\"\xb1\x01\n\x13GetUserTagsResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12@\n\x04tags\x18\x02 \x03(\x0b\x32\x32.milvus.proto.milvus.GetUserTagsResponse.TagsEntry\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"}\n\x17ListUsersWithTagRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07tag_key\x18\x02 \x01(\t\x12\x11\n\ttag_value\x18\x03 \x01(\t:\x12\xca>\x0f\x08\x02\x10\x18\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"[\n\x18ListUsersWithTagResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x12\n\nuser_names\x18\x02 \x03(\t\"\x8f\x02\n\x16\x43reateRowPolicyRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x13\n\x0bpolicy_name\x18\x04 \x01(\t\x12\x35\n\x07\x61\x63tions\x18\x05 \x03(\x0e\x32$.milvus.proto.milvus.RowPolicyAction\x12\r\n\x05roles\x18\x06 \x03(\t\x12\x12\n\nusing_expr\x18\x07 \x01(\t\x12\x12\n\ncheck_expr\x18\x08 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\t \x01(\t:\x07\xca>\x04\x10\x13\x18\x03\"\x8a\x01\n\x14\x44ropRowPolicyRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x13\n\x0bpolicy_name\x18\x04 \x01(\t:\x07\xca>\x04\x10\x15\x18\x03\"w\n\x16ListRowPoliciesRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t:\x07\xca>\x04\x10\x16\x18\x03\"\xb7\x01\n\tRowPolicy\x12\x13\n\x0bpolicy_name\x18\x01 \x01(\t\x12\x35\n\x07\x61\x63tions\x18\x02 \x03(\x0e\x32$.milvus.proto.milvus.RowPolicyAction\x12\r\n\x05roles\x18\x03 \x03(\t\x12\x12\n\nusing_expr\x18\x04 \x01(\t\x12\x12\n\ncheck_expr\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x12\n\ncreated_at\x18\x07 \x01(\x03\"\xa2\x01\n\x17ListRowPoliciesResponse\x12+\n\x06status\x18\x01 \x01(\x0b\x32\x1b.milvus.proto.common.Status\x12\x30\n\x08policies\x18\x02 \x03(\x0b\x32\x1e.milvus.proto.milvus.RowPolicy\x12\x0f\n\x07\x64\x62_name\x18\x03 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t\"\x87\x01\n#UpdateReplicateConfigurationRequest\x12L\n\x17replicate_configuration\x18\x01 \x01(\x0b\x32+.milvus.proto.common.ReplicateConfiguration:\x12\xca>\x0f\x08\x01\x10N\x18\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\"M\n\x17GetReplicateInfoRequest\x12\x19\n\x11source_cluster_id\x18\x01 \x01(\t\x12\x17\n\x0ftarget_pchannel\x18\x02 \x01(\t\"X\n\x18GetReplicateInfoResponse\x12<\n\ncheckpoint\x18\x01 \x01(\x0b\x32(.milvus.proto.common.ReplicateCheckpoint\"e\n\x10ReplicateMessage\x12\x19\n\x11source_cluster_id\x18\x01 \x01(\t\x12\x36\n\x07message\x18\x02 \x01(\x0b\x32%.milvus.proto.common.ImmutableMessage\"a\n\x10ReplicateRequest\x12\x42\n\x11replicate_message\x18\x01 \x01(\x0b\x32%.milvus.proto.milvus.ReplicateMessageH\x00\x42\t\n\x07request\"<\n\x1dReplicateConfirmedMessageInfo\x12\x1b\n\x13\x63onfirmed_time_tick\x18\x01 \x01(\x04\"\x7f\n\x11ReplicateResponse\x12^\n replicate_confirmed_message_info\x18\x01 \x01(\x0b\x32\x32.milvus.proto.milvus.ReplicateConfirmedMessageInfoH\x00\x42\n\n\x08response*%\n\x08ShowType\x12\x07\n\x03\x41ll\x10\x00\x12\x0c\n\x08InMemory\x10\x01\x1a\x02\x18\x01*T\n\x19OperatePrivilegeGroupType\x12\x18\n\x14\x41\x64\x64PrivilegesToGroup\x10\x00\x12\x1d\n\x19RemovePrivilegesFromGroup\x10\x01*@\n\x13OperateUserRoleType\x12\x11\n\rAddUserToRole\x10\x00\x12\x16\n\x12RemoveUserFromRole\x10\x01*;\n\x0ePrivilegeLevel\x12\x0b\n\x07\x43luster\x10\x00\x12\x0c\n\x08\x44\x61tabase\x10\x01\x12\x0e\n\nCollection\x10\x02*-\n\x14OperatePrivilegeType\x12\t\n\x05Grant\x10\x00\x12\n\n\x06Revoke\x10\x01*l\n\nQuotaState\x12\x0b\n\x07Unknown\x10\x00\x12\x0f\n\x0bReadLimited\x10\x02\x12\x10\n\x0cWriteLimited\x10\x03\x12\x0e\n\nDenyToRead\x10\x04\x12\x0f\n\x0b\x44\x65nyToWrite\x10\x05\x12\r\n\tDenyToDDL\x10\x06*L\n\x0fRowPolicyAction\x12\t\n\x05Query\x10\x00\x12\n\n\x06Search\x10\x01\x12\n\n\x06Insert\x10\x02\x12\n\n\x06\x44\x65lete\x10\x03\x12\n\n\x06Upsert\x10\x04\x32\xe3Z\n\rMilvusService\x12_\n\x10\x43reateCollection\x12,.milvus.proto.milvus.CreateCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12[\n\x0e\x44ropCollection\x12*.milvus.proto.milvus.DropCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12_\n\rHasCollection\x12).milvus.proto.milvus.HasCollectionRequest\x1a!.milvus.proto.milvus.BoolResponse\"\x00\x12[\n\x0eLoadCollection\x12*.milvus.proto.milvus.LoadCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x61\n\x11ReleaseCollection\x12-.milvus.proto.milvus.ReleaseCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12w\n\x12\x44\x65scribeCollection\x12..milvus.proto.milvus.DescribeCollectionRequest\x1a/.milvus.proto.milvus.DescribeCollectionResponse\"\x00\x12\x86\x01\n\x17\x42\x61tchDescribeCollection\x12\x33.milvus.proto.milvus.BatchDescribeCollectionRequest\x1a\x34.milvus.proto.milvus.BatchDescribeCollectionResponse\"\x00\x12\x86\x01\n\x17GetCollectionStatistics\x12\x33.milvus.proto.milvus.GetCollectionStatisticsRequest\x1a\x34.milvus.proto.milvus.GetCollectionStatisticsResponse\"\x00\x12n\n\x0fShowCollections\x12+.milvus.proto.milvus.ShowCollectionsRequest\x1a,.milvus.proto.milvus.ShowCollectionsResponse\"\x00\x12]\n\x0f\x41lterCollection\x12+.milvus.proto.milvus.AlterCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12g\n\x14\x41lterCollectionField\x12\x30.milvus.proto.milvus.AlterCollectionFieldRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12i\n\x15\x41\x64\x64\x43ollectionFunction\x12\x31.milvus.proto.milvus.AddCollectionFunctionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12m\n\x17\x41lterCollectionFunction\x12\x33.milvus.proto.milvus.AlterCollectionFunctionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12k\n\x16\x44ropCollectionFunction\x12\x32.milvus.proto.milvus.DropCollectionFunctionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12]\n\x0f\x43reatePartition\x12+.milvus.proto.milvus.CreatePartitionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12Y\n\rDropPartition\x12).milvus.proto.milvus.DropPartitionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12]\n\x0cHasPartition\x12(.milvus.proto.milvus.HasPartitionRequest\x1a!.milvus.proto.milvus.BoolResponse\"\x00\x12[\n\x0eLoadPartitions\x12*.milvus.proto.milvus.LoadPartitionsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x61\n\x11ReleasePartitions\x12-.milvus.proto.milvus.ReleasePartitionsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x83\x01\n\x16GetPartitionStatistics\x12\x32.milvus.proto.milvus.GetPartitionStatisticsRequest\x1a\x33.milvus.proto.milvus.GetPartitionStatisticsResponse\"\x00\x12k\n\x0eShowPartitions\x12*.milvus.proto.milvus.ShowPartitionsRequest\x1a+.milvus.proto.milvus.ShowPartitionsResponse\"\x00\x12w\n\x12GetLoadingProgress\x12..milvus.proto.milvus.GetLoadingProgressRequest\x1a/.milvus.proto.milvus.GetLoadingProgressResponse\"\x00\x12\x65\n\x0cGetLoadState\x12(.milvus.proto.milvus.GetLoadStateRequest\x1a).milvus.proto.milvus.GetLoadStateResponse\"\x00\x12U\n\x0b\x43reateAlias\x12\'.milvus.proto.milvus.CreateAliasRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12Q\n\tDropAlias\x12%.milvus.proto.milvus.DropAliasRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12S\n\nAlterAlias\x12&.milvus.proto.milvus.AlterAliasRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12h\n\rDescribeAlias\x12).milvus.proto.milvus.DescribeAliasRequest\x1a*.milvus.proto.milvus.DescribeAliasResponse\"\x00\x12\x62\n\x0bListAliases\x12\'.milvus.proto.milvus.ListAliasesRequest\x1a(.milvus.proto.milvus.ListAliasesResponse\"\x00\x12U\n\x0b\x43reateIndex\x12\'.milvus.proto.milvus.CreateIndexRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12S\n\nAlterIndex\x12&.milvus.proto.milvus.AlterIndexRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12h\n\rDescribeIndex\x12).milvus.proto.milvus.DescribeIndexRequest\x1a*.milvus.proto.milvus.DescribeIndexResponse\"\x00\x12w\n\x12GetIndexStatistics\x12..milvus.proto.milvus.GetIndexStatisticsRequest\x1a/.milvus.proto.milvus.GetIndexStatisticsResponse\"\x00\x12k\n\rGetIndexState\x12).milvus.proto.milvus.GetIndexStateRequest\x1a*.milvus.proto.milvus.GetIndexStateResponse\"\x03\x88\x02\x01\x12\x83\x01\n\x15GetIndexBuildProgress\x12\x31.milvus.proto.milvus.GetIndexBuildProgressRequest\x1a\x32.milvus.proto.milvus.GetIndexBuildProgressResponse\"\x03\x88\x02\x01\x12Q\n\tDropIndex\x12%.milvus.proto.milvus.DropIndexRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12S\n\x06Insert\x12\".milvus.proto.milvus.InsertRequest\x1a#.milvus.proto.milvus.MutationResult\"\x00\x12S\n\x06\x44\x65lete\x12\".milvus.proto.milvus.DeleteRequest\x1a#.milvus.proto.milvus.MutationResult\"\x00\x12S\n\x06Upsert\x12\".milvus.proto.milvus.UpsertRequest\x1a#.milvus.proto.milvus.MutationResult\"\x00\x12R\n\x06Search\x12\".milvus.proto.milvus.SearchRequest\x1a\".milvus.proto.milvus.SearchResults\"\x00\x12^\n\x0cHybridSearch\x12(.milvus.proto.milvus.HybridSearchRequest\x1a\".milvus.proto.milvus.SearchResults\"\x00\x12P\n\x05\x46lush\x12!.milvus.proto.milvus.FlushRequest\x1a\".milvus.proto.milvus.FlushResponse\"\x00\x12O\n\x05Query\x12!.milvus.proto.milvus.QueryRequest\x1a!.milvus.proto.milvus.QueryResults\"\x00\x12\x64\n\x0c\x43\x61lcDistance\x12(.milvus.proto.milvus.CalcDistanceRequest\x1a(.milvus.proto.milvus.CalcDistanceResults\"\x00\x12Y\n\x08\x46lushAll\x12$.milvus.proto.milvus.FlushAllRequest\x1a%.milvus.proto.milvus.FlushAllResponse\"\x00\x12\x63\n\x12\x41\x64\x64\x43ollectionField\x12..milvus.proto.milvus.AddCollectionFieldRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12h\n\rGetFlushState\x12).milvus.proto.milvus.GetFlushStateRequest\x1a*.milvus.proto.milvus.GetFlushStateResponse\"\x00\x12q\n\x10GetFlushAllState\x12,.milvus.proto.milvus.GetFlushAllStateRequest\x1a-.milvus.proto.milvus.GetFlushAllStateResponse\"\x00\x12\x89\x01\n\x18GetPersistentSegmentInfo\x12\x34.milvus.proto.milvus.GetPersistentSegmentInfoRequest\x1a\x35.milvus.proto.milvus.GetPersistentSegmentInfoResponse\"\x00\x12z\n\x13GetQuerySegmentInfo\x12/.milvus.proto.milvus.GetQuerySegmentInfoRequest\x1a\x30.milvus.proto.milvus.GetQuerySegmentInfoResponse\"\x00\x12\x62\n\x0bGetReplicas\x12\'.milvus.proto.milvus.GetReplicasRequest\x1a(.milvus.proto.milvus.GetReplicasResponse\"\x00\x12P\n\x05\x44ummy\x12!.milvus.proto.milvus.DummyRequest\x1a\".milvus.proto.milvus.DummyResponse\"\x00\x12\x65\n\x0cRegisterLink\x12(.milvus.proto.milvus.RegisterLinkRequest\x1a).milvus.proto.milvus.RegisterLinkResponse\"\x00\x12_\n\nGetMetrics\x12&.milvus.proto.milvus.GetMetricsRequest\x1a\'.milvus.proto.milvus.GetMetricsResponse\"\x00\x12l\n\x12GetComponentStates\x12..milvus.proto.milvus.GetComponentStatesRequest\x1a$.milvus.proto.milvus.ComponentStates\"\x00\x12U\n\x0bLoadBalance\x12\'.milvus.proto.milvus.LoadBalanceRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12w\n\x12GetCompactionState\x12..milvus.proto.milvus.GetCompactionStateRequest\x1a/.milvus.proto.milvus.GetCompactionStateResponse\"\x00\x12q\n\x10ManualCompaction\x12,.milvus.proto.milvus.ManualCompactionRequest\x1a-.milvus.proto.milvus.ManualCompactionResponse\"\x00\x12\x80\x01\n\x1bGetCompactionStateWithPlans\x12..milvus.proto.milvus.GetCompactionPlansRequest\x1a/.milvus.proto.milvus.GetCompactionPlansResponse\"\x00\x12S\n\x06Import\x12\".milvus.proto.milvus.ImportRequest\x1a#.milvus.proto.milvus.ImportResponse\"\x00\x12k\n\x0eGetImportState\x12*.milvus.proto.milvus.GetImportStateRequest\x1a+.milvus.proto.milvus.GetImportStateResponse\"\x00\x12n\n\x0fListImportTasks\x12+.milvus.proto.milvus.ListImportTasksRequest\x1a,.milvus.proto.milvus.ListImportTasksResponse\"\x00\x12_\n\x10\x43reateCredential\x12,.milvus.proto.milvus.CreateCredentialRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12_\n\x10UpdateCredential\x12,.milvus.proto.milvus.UpdateCredentialRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12_\n\x10\x44\x65leteCredential\x12,.milvus.proto.milvus.DeleteCredentialRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12h\n\rListCredUsers\x12).milvus.proto.milvus.ListCredUsersRequest\x1a*.milvus.proto.milvus.ListCredUsersResponse\"\x00\x12S\n\nCreateRole\x12&.milvus.proto.milvus.CreateRoleRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12O\n\x08\x44ropRole\x12$.milvus.proto.milvus.DropRoleRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12]\n\x0fOperateUserRole\x12+.milvus.proto.milvus.OperateUserRoleRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12_\n\nSelectRole\x12&.milvus.proto.milvus.SelectRoleRequest\x1a\'.milvus.proto.milvus.SelectRoleResponse\"\x00\x12_\n\nSelectUser\x12&.milvus.proto.milvus.SelectUserRequest\x1a\'.milvus.proto.milvus.SelectUserResponse\"\x00\x12_\n\x10OperatePrivilege\x12,.milvus.proto.milvus.OperatePrivilegeRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x63\n\x12OperatePrivilegeV2\x12..milvus.proto.milvus.OperatePrivilegeV2Request\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x62\n\x0bSelectGrant\x12\'.milvus.proto.milvus.SelectGrantRequest\x1a(.milvus.proto.milvus.SelectGrantResponse\"\x00\x12_\n\nGetVersion\x12&.milvus.proto.milvus.GetVersionRequest\x1a\'.milvus.proto.milvus.GetVersionResponse\"\x00\x12\x62\n\x0b\x43heckHealth\x12\'.milvus.proto.milvus.CheckHealthRequest\x1a(.milvus.proto.milvus.CheckHealthResponse\"\x00\x12\x65\n\x13\x43reateResourceGroup\x12/.milvus.proto.milvus.CreateResourceGroupRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x61\n\x11\x44ropResourceGroup\x12-.milvus.proto.milvus.DropResourceGroupRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12g\n\x14UpdateResourceGroups\x12\x30.milvus.proto.milvus.UpdateResourceGroupsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12W\n\x0cTransferNode\x12(.milvus.proto.milvus.TransferNodeRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12]\n\x0fTransferReplica\x12+.milvus.proto.milvus.TransferReplicaRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12w\n\x12ListResourceGroups\x12..milvus.proto.milvus.ListResourceGroupsRequest\x1a/.milvus.proto.milvus.ListResourceGroupsResponse\"\x00\x12\x80\x01\n\x15\x44\x65scribeResourceGroup\x12\x31.milvus.proto.milvus.DescribeResourceGroupRequest\x1a\x32.milvus.proto.milvus.DescribeResourceGroupResponse\"\x00\x12_\n\x10RenameCollection\x12,.milvus.proto.milvus.RenameCollectionRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12u\n\x12ListIndexedSegment\x12-.milvus.proto.feder.ListIndexedSegmentRequest\x1a..milvus.proto.feder.ListIndexedSegmentResponse\"\x00\x12\x87\x01\n\x18\x44\x65scribeSegmentIndexData\x12\x33.milvus.proto.feder.DescribeSegmentIndexDataRequest\x1a\x34.milvus.proto.feder.DescribeSegmentIndexDataResponse\"\x00\x12V\n\x07\x43onnect\x12#.milvus.proto.milvus.ConnectRequest\x1a$.milvus.proto.milvus.ConnectResponse\"\x00\x12k\n\x0e\x41llocTimestamp\x12*.milvus.proto.milvus.AllocTimestampRequest\x1a+.milvus.proto.milvus.AllocTimestampResponse\"\x00\x12[\n\x0e\x43reateDatabase\x12*.milvus.proto.milvus.CreateDatabaseRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12W\n\x0c\x44ropDatabase\x12(.milvus.proto.milvus.DropDatabaseRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12h\n\rListDatabases\x12).milvus.proto.milvus.ListDatabasesRequest\x1a*.milvus.proto.milvus.ListDatabasesResponse\"\x00\x12Y\n\rAlterDatabase\x12).milvus.proto.milvus.AlterDatabaseRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12q\n\x10\x44\x65scribeDatabase\x12,.milvus.proto.milvus.DescribeDatabaseRequest\x1a-.milvus.proto.milvus.DescribeDatabaseResponse\"\x00\x12q\n\x10ReplicateMessage\x12,.milvus.proto.milvus.ReplicateMessageRequest\x1a-.milvus.proto.milvus.ReplicateMessageResponse\"\x00\x12g\n\nBackupRBAC\x12*.milvus.proto.milvus.BackupRBACMetaRequest\x1a+.milvus.proto.milvus.BackupRBACMetaResponse\"\x00\x12Y\n\x0bRestoreRBAC\x12+.milvus.proto.milvus.RestoreRBACMetaRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12g\n\x14\x43reatePrivilegeGroup\x12\x30.milvus.proto.milvus.CreatePrivilegeGroupRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x63\n\x12\x44ropPrivilegeGroup\x12..milvus.proto.milvus.DropPrivilegeGroupRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12z\n\x13ListPrivilegeGroups\x12/.milvus.proto.milvus.ListPrivilegeGroupsRequest\x1a\x30.milvus.proto.milvus.ListPrivilegeGroupsResponse\"\x00\x12i\n\x15OperatePrivilegeGroup\x12\x31.milvus.proto.milvus.OperatePrivilegeGroupRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x62\n\x0bRunAnalyzer\x12\'.milvus.proto.milvus.RunAnalyzerRequest\x1a(.milvus.proto.milvus.RunAnalyzerResponse\"\x00\x12]\n\x0f\x41\x64\x64\x46ileResource\x12+.milvus.proto.milvus.AddFileResourceRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x63\n\x12RemoveFileResource\x12..milvus.proto.milvus.RemoveFileResourceRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12t\n\x11ListFileResources\x12-.milvus.proto.milvus.ListFileResourcesRequest\x1a..milvus.proto.milvus.ListFileResourcesResponse\"\x00\x12U\n\x0b\x41\x64\x64UserTags\x12\'.milvus.proto.milvus.AddUserTagsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12[\n\x0e\x44\x65leteUserTags\x12*.milvus.proto.milvus.DeleteUserTagsRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12\x62\n\x0bGetUserTags\x12\'.milvus.proto.milvus.GetUserTagsRequest\x1a(.milvus.proto.milvus.GetUserTagsResponse\"\x00\x12q\n\x10ListUsersWithTag\x12,.milvus.proto.milvus.ListUsersWithTagRequest\x1a-.milvus.proto.milvus.ListUsersWithTagResponse\"\x00\x12]\n\x0f\x43reateRowPolicy\x12+.milvus.proto.milvus.CreateRowPolicyRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12Y\n\rDropRowPolicy\x12).milvus.proto.milvus.DropRowPolicyRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12n\n\x0fListRowPolicies\x12+.milvus.proto.milvus.ListRowPoliciesRequest\x1a,.milvus.proto.milvus.ListRowPoliciesResponse\"\x00\x12w\n\x1cUpdateReplicateConfiguration\x12\x38.milvus.proto.milvus.UpdateReplicateConfigurationRequest\x1a\x1b.milvus.proto.common.Status\"\x00\x12q\n\x10GetReplicateInfo\x12,.milvus.proto.milvus.GetReplicateInfoRequest\x1a-.milvus.proto.milvus.GetReplicateInfoResponse\"\x00\x12l\n\x15\x43reateReplicateStream\x12%.milvus.proto.milvus.ReplicateRequest\x1a&.milvus.proto.milvus.ReplicateResponse\"\x00(\x01\x30\x01\x32u\n\x0cProxyService\x12\x65\n\x0cRegisterLink\x12(.milvus.proto.milvus.RegisterLinkRequest\x1a).milvus.proto.milvus.RegisterLinkResponse\"\x00:U\n\x0emilvus_ext_obj\x12\x1c.google.protobuf.FileOptions\x18\xe9\x07 \x01(\x0b\x32\x1e.milvus.proto.milvus.MilvusExtBm\n\x0eio.milvus.grpcB\x0bMilvusProtoP\x01Z4github.com/milvus-io/milvus-proto/go-api/v2/milvuspb\xa0\x01\x01\xaa\x02\x12Milvus.Client.Grpcb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'milvus_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\016io.milvus.grpcB\013MilvusProtoP\001Z4github.com/milvus-io/milvus-proto/go-api/v2/milvuspb\240\001\001\252\002\022Milvus.Client.Grpc' + _globals['_SHOWTYPE']._loaded_options = None + _globals['_SHOWTYPE']._serialized_options = b'\030\001' + _globals['_CREATEALIASREQUEST']._loaded_options = None + _globals['_CREATEALIASREQUEST']._serialized_options = b'\312>\017\010\001\020,\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DROPALIASREQUEST']._loaded_options = None + _globals['_DROPALIASREQUEST']._serialized_options = b'\312>\017\010\001\020-\030\377\377\377\377\377\377\377\377\377\001' + _globals['_ALTERALIASREQUEST']._loaded_options = None + _globals['_ALTERALIASREQUEST']._serialized_options = b'\312>\017\010\001\020,\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DESCRIBEALIASREQUEST']._loaded_options = None + _globals['_DESCRIBEALIASREQUEST']._serialized_options = b'\312>\017\010\001\020.\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LISTALIASESREQUEST']._loaded_options = None + _globals['_LISTALIASESREQUEST']._serialized_options = b'\312>\017\010\001\020/\030\377\377\377\377\377\377\377\377\377\001' + _globals['_CREATECOLLECTIONREQUEST']._loaded_options = None + _globals['_CREATECOLLECTIONREQUEST']._serialized_options = b'\312>\017\010\001\020\001\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DROPCOLLECTIONREQUEST']._loaded_options = None + _globals['_DROPCOLLECTIONREQUEST']._serialized_options = b'\312>\017\010\001\020\002\030\377\377\377\377\377\377\377\377\377\001' + _globals['_ALTERCOLLECTIONREQUEST']._loaded_options = None + _globals['_ALTERCOLLECTIONREQUEST']._serialized_options = b'\312>\017\010\001\020\001\030\377\377\377\377\377\377\377\377\377\001' + _globals['_ALTERCOLLECTIONFIELDREQUEST']._loaded_options = None + _globals['_ALTERCOLLECTIONFIELDREQUEST']._serialized_options = b'\312>\017\010\001\020\001\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DESCRIBECOLLECTIONREQUEST']._loaded_options = None + _globals['_DESCRIBECOLLECTIONREQUEST']._serialized_options = b'\312>\017\010\001\020\003\030\377\377\377\377\377\377\377\377\377\001' + _globals['_BATCHDESCRIBECOLLECTIONREQUEST']._loaded_options = None + _globals['_BATCHDESCRIBECOLLECTIONREQUEST']._serialized_options = b'\312>\017\010\001\020\003\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LOADCOLLECTIONREQUEST_LOADPARAMSENTRY']._loaded_options = None + _globals['_LOADCOLLECTIONREQUEST_LOADPARAMSENTRY']._serialized_options = b'8\001' + _globals['_LOADCOLLECTIONREQUEST']._loaded_options = None + _globals['_LOADCOLLECTIONREQUEST']._serialized_options = b'\312>\004\020\005\030\003' + _globals['_RELEASECOLLECTIONREQUEST']._loaded_options = None + _globals['_RELEASECOLLECTIONREQUEST']._serialized_options = b'\312>\004\020\006\030\003' + _globals['_GETSTATISTICSREQUEST']._loaded_options = None + _globals['_GETSTATISTICSREQUEST']._serialized_options = b'\312>\004\020\n\030\003' + _globals['_GETCOLLECTIONSTATISTICSREQUEST']._loaded_options = None + _globals['_GETCOLLECTIONSTATISTICSREQUEST']._serialized_options = b'\312>\004\020\n\030\003' + _globals['_SHOWCOLLECTIONSREQUEST'].fields_by_name['collection_names']._loaded_options = None + _globals['_SHOWCOLLECTIONSREQUEST'].fields_by_name['collection_names']._serialized_options = b'\030\001' + _globals['_SHOWCOLLECTIONSRESPONSE'].fields_by_name['inMemory_percentages']._loaded_options = None + _globals['_SHOWCOLLECTIONSRESPONSE'].fields_by_name['inMemory_percentages']._serialized_options = b'\030\001' + _globals['_CREATEPARTITIONREQUEST']._loaded_options = None + _globals['_CREATEPARTITIONREQUEST']._serialized_options = b'\312>\004\020\'\030\003' + _globals['_DROPPARTITIONREQUEST']._loaded_options = None + _globals['_DROPPARTITIONREQUEST']._serialized_options = b'\312>\004\020(\030\003' + _globals['_HASPARTITIONREQUEST']._loaded_options = None + _globals['_HASPARTITIONREQUEST']._serialized_options = b'\312>\004\020*\030\003' + _globals['_LOADPARTITIONSREQUEST_LOADPARAMSENTRY']._loaded_options = None + _globals['_LOADPARTITIONSREQUEST_LOADPARAMSENTRY']._serialized_options = b'8\001' + _globals['_LOADPARTITIONSREQUEST']._loaded_options = None + _globals['_LOADPARTITIONSREQUEST']._serialized_options = b'\312>\004\020\005\030\003' + _globals['_RELEASEPARTITIONSREQUEST']._loaded_options = None + _globals['_RELEASEPARTITIONSREQUEST']._serialized_options = b'\312>\004\020\006\030\003' + _globals['_SHOWPARTITIONSREQUEST'].fields_by_name['type']._loaded_options = None + _globals['_SHOWPARTITIONSREQUEST'].fields_by_name['type']._serialized_options = b'\030\001' + _globals['_SHOWPARTITIONSREQUEST']._loaded_options = None + _globals['_SHOWPARTITIONSREQUEST']._serialized_options = b'\312>\004\020)\030\003' + _globals['_SHOWPARTITIONSRESPONSE'].fields_by_name['inMemory_percentages']._loaded_options = None + _globals['_SHOWPARTITIONSRESPONSE'].fields_by_name['inMemory_percentages']._serialized_options = b'\030\001' + _globals['_CREATEINDEXREQUEST']._loaded_options = None + _globals['_CREATEINDEXREQUEST']._serialized_options = b'\312>\004\020\013\030\003' + _globals['_ALTERINDEXREQUEST']._loaded_options = None + _globals['_ALTERINDEXREQUEST']._serialized_options = b'\312>\004\020\013\030\003' + _globals['_DESCRIBEINDEXREQUEST']._loaded_options = None + _globals['_DESCRIBEINDEXREQUEST']._serialized_options = b'\312>\004\020\014\030\003' + _globals['_GETINDEXBUILDPROGRESSREQUEST']._loaded_options = None + _globals['_GETINDEXBUILDPROGRESSREQUEST']._serialized_options = b'\312>\004\020\014\030\003' + _globals['_GETINDEXSTATEREQUEST']._loaded_options = None + _globals['_GETINDEXSTATEREQUEST']._serialized_options = b'\312>\004\020\014\030\003' + _globals['_DROPINDEXREQUEST']._loaded_options = None + _globals['_DROPINDEXREQUEST']._serialized_options = b'\312>\004\020\r\030\003' + _globals['_INSERTREQUEST']._loaded_options = None + _globals['_INSERTREQUEST']._serialized_options = b'\312>\004\020\010\030\003' + _globals['_ADDCOLLECTIONFIELDREQUEST']._loaded_options = None + _globals['_ADDCOLLECTIONFIELDREQUEST']._serialized_options = b'\312>\004\020G\030\003' + _globals['_ADDCOLLECTIONFUNCTIONREQUEST']._loaded_options = None + _globals['_ADDCOLLECTIONFUNCTIONREQUEST']._serialized_options = b'\312>\004\020K\030\003' + _globals['_ALTERCOLLECTIONFUNCTIONREQUEST']._loaded_options = None + _globals['_ALTERCOLLECTIONFUNCTIONREQUEST']._serialized_options = b'\312>\004\020M\030\003' + _globals['_DROPCOLLECTIONFUNCTIONREQUEST']._loaded_options = None + _globals['_DROPCOLLECTIONFUNCTIONREQUEST']._serialized_options = b'\312>\004\020M\030\003' + _globals['_UPSERTREQUEST']._loaded_options = None + _globals['_UPSERTREQUEST']._serialized_options = b'\312>\004\020\031\030\003' + _globals['_DELETEREQUEST_EXPRTEMPLATEVALUESENTRY']._loaded_options = None + _globals['_DELETEREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_options = b'8\001' + _globals['_DELETEREQUEST']._loaded_options = None + _globals['_DELETEREQUEST']._serialized_options = b'\312>\004\020\t\030\003' + _globals['_SUBSEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._loaded_options = None + _globals['_SUBSEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_options = b'8\001' + _globals['_SEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._loaded_options = None + _globals['_SEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_options = b'8\001' + _globals['_SEARCHREQUEST']._loaded_options = None + _globals['_SEARCHREQUEST']._serialized_options = b'\312>\004\020\016\030\003' + _globals['_HYBRIDSEARCHREQUEST']._loaded_options = None + _globals['_HYBRIDSEARCHREQUEST']._serialized_options = b'\312>\004\020\016\030\003' + _globals['_FLUSHREQUEST']._loaded_options = None + _globals['_FLUSHREQUEST']._serialized_options = b'\312>\004\020\017 \003' + _globals['_FLUSHRESPONSE_COLLSEGIDSENTRY']._loaded_options = None + _globals['_FLUSHRESPONSE_COLLSEGIDSENTRY']._serialized_options = b'8\001' + _globals['_FLUSHRESPONSE_FLUSHCOLLSEGIDSENTRY']._loaded_options = None + _globals['_FLUSHRESPONSE_FLUSHCOLLSEGIDSENTRY']._serialized_options = b'8\001' + _globals['_FLUSHRESPONSE_COLLSEALTIMESENTRY']._loaded_options = None + _globals['_FLUSHRESPONSE_COLLSEALTIMESENTRY']._serialized_options = b'8\001' + _globals['_FLUSHRESPONSE_COLLFLUSHTSENTRY']._loaded_options = None + _globals['_FLUSHRESPONSE_COLLFLUSHTSENTRY']._serialized_options = b'8\001' + _globals['_FLUSHRESPONSE_CHANNELCPSENTRY']._loaded_options = None + _globals['_FLUSHRESPONSE_CHANNELCPSENTRY']._serialized_options = b'8\001' + _globals['_QUERYREQUEST_EXPRTEMPLATEVALUESENTRY']._loaded_options = None + _globals['_QUERYREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_options = b'8\001' + _globals['_QUERYREQUEST']._loaded_options = None + _globals['_QUERYREQUEST']._serialized_options = b'\312>\004\020\020\030\003' + _globals['_FLUSHALLREQUEST'].fields_by_name['db_name']._loaded_options = None + _globals['_FLUSHALLREQUEST'].fields_by_name['db_name']._serialized_options = b'\030\001' + _globals['_FLUSHALLREQUEST']._loaded_options = None + _globals['_FLUSHALLREQUEST']._serialized_options = b'\312>\017\010\001\020&\030\377\377\377\377\377\377\377\377\377\001' + _globals['_FLUSHCOLLECTIONRESULT_CHANNELCPSENTRY']._loaded_options = None + _globals['_FLUSHCOLLECTIONRESULT_CHANNELCPSENTRY']._serialized_options = b'8\001' + _globals['_QUERYSEGMENTINFO'].fields_by_name['nodeID']._loaded_options = None + _globals['_QUERYSEGMENTINFO'].fields_by_name['nodeID']._serialized_options = b'\030\001' + _globals['_LOADBALANCEREQUEST']._loaded_options = None + _globals['_LOADBALANCEREQUEST']._serialized_options = b'\312>\004\020\021\030\005' + _globals['_MANUALCOMPACTIONREQUEST']._loaded_options = None + _globals['_MANUALCOMPACTIONREQUEST']._serialized_options = b'\312>\004\020\007\030\004' + _globals['_GETFLUSHSTATEREQUEST']._loaded_options = None + _globals['_GETFLUSHSTATEREQUEST']._serialized_options = b'\312>\004\020+\030\004' + _globals['_GETFLUSHALLSTATEREQUEST'].fields_by_name['db_name']._loaded_options = None + _globals['_GETFLUSHALLSTATEREQUEST'].fields_by_name['db_name']._serialized_options = b'\030\001' + _globals['_FLUSHALLSTATE_COLLECTIONFLUSHSTATESENTRY']._loaded_options = None + _globals['_FLUSHALLSTATE_COLLECTIONFLUSHSTATESENTRY']._serialized_options = b'8\001' + _globals['_IMPORTREQUEST']._loaded_options = None + _globals['_IMPORTREQUEST']._serialized_options = b'\312>\004\020\022\030\001' + _globals['_REPLICAINFO_NUMOUTBOUNDNODEENTRY']._loaded_options = None + _globals['_REPLICAINFO_NUMOUTBOUNDNODEENTRY']._serialized_options = b'8\001' + _globals['_CREATECREDENTIALREQUEST']._loaded_options = None + _globals['_CREATECREDENTIALREQUEST']._serialized_options = b'\312>\017\010\001\020\023\030\377\377\377\377\377\377\377\377\377\001' + _globals['_UPDATECREDENTIALREQUEST']._loaded_options = None + _globals['_UPDATECREDENTIALREQUEST']._serialized_options = b'\312>\006\010\002\020\024\030\002' + _globals['_DELETECREDENTIALREQUEST']._loaded_options = None + _globals['_DELETECREDENTIALREQUEST']._serialized_options = b'\312>\017\010\001\020\025\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LISTCREDUSERSREQUEST']._loaded_options = None + _globals['_LISTCREDUSERSREQUEST']._serialized_options = b'\312>\017\010\001\020\026\030\377\377\377\377\377\377\377\377\377\001' + _globals['_CREATEROLEREQUEST']._loaded_options = None + _globals['_CREATEROLEREQUEST']._serialized_options = b'\312>\017\010\001\020\023\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DROPROLEREQUEST']._loaded_options = None + _globals['_DROPROLEREQUEST']._serialized_options = b'\312>\017\010\001\020\025\030\377\377\377\377\377\377\377\377\377\001' + _globals['_CREATEPRIVILEGEGROUPREQUEST']._loaded_options = None + _globals['_CREATEPRIVILEGEGROUPREQUEST']._serialized_options = b'\312>\017\010\001\0208\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DROPPRIVILEGEGROUPREQUEST']._loaded_options = None + _globals['_DROPPRIVILEGEGROUPREQUEST']._serialized_options = b'\312>\017\010\001\0209\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LISTPRIVILEGEGROUPSREQUEST']._loaded_options = None + _globals['_LISTPRIVILEGEGROUPSREQUEST']._serialized_options = b'\312>\017\010\001\020:\030\377\377\377\377\377\377\377\377\377\001' + _globals['_OPERATEPRIVILEGEGROUPREQUEST']._loaded_options = None + _globals['_OPERATEPRIVILEGEGROUPREQUEST']._serialized_options = b'\312>\017\010\001\020;\030\377\377\377\377\377\377\377\377\377\001' + _globals['_OPERATEUSERROLEREQUEST']._loaded_options = None + _globals['_OPERATEUSERROLEREQUEST']._serialized_options = b'\312>\017\010\001\020\027\030\377\377\377\377\377\377\377\377\377\001' + _globals['_SELECTROLEREQUEST']._loaded_options = None + _globals['_SELECTROLEREQUEST']._serialized_options = b'\312>\017\010\001\020\026\030\377\377\377\377\377\377\377\377\377\001' + _globals['_SELECTUSERREQUEST']._loaded_options = None + _globals['_SELECTUSERREQUEST']._serialized_options = b'\312>\006\010\002\020\030\030\002' + _globals['_SELECTGRANTREQUEST']._loaded_options = None + _globals['_SELECTGRANTREQUEST']._serialized_options = b'\312>\017\010\001\020\026\030\377\377\377\377\377\377\377\377\377\001' + _globals['_OPERATEPRIVILEGEREQUEST']._loaded_options = None + _globals['_OPERATEPRIVILEGEREQUEST']._serialized_options = b'\312>\017\010\001\020\027\030\377\377\377\377\377\377\377\377\377\001' + _globals['_OPERATEPRIVILEGEV2REQUEST']._loaded_options = None + _globals['_OPERATEPRIVILEGEV2REQUEST']._serialized_options = b'\312>\017\010\001\020\027\030\377\377\377\377\377\377\377\377\377\001' + _globals['_BACKUPRBACMETAREQUEST']._loaded_options = None + _globals['_BACKUPRBACMETAREQUEST']._serialized_options = b'\312>\017\010\001\0203\030\377\377\377\377\377\377\377\377\377\001' + _globals['_RESTORERBACMETAREQUEST']._loaded_options = None + _globals['_RESTORERBACMETAREQUEST']._serialized_options = b'\312>\017\010\001\0204\030\377\377\377\377\377\377\377\377\377\001' + _globals['_GETLOADINGPROGRESSREQUEST']._loaded_options = None + _globals['_GETLOADINGPROGRESSREQUEST']._serialized_options = b'\312>\004\020!\030\002' + _globals['_GETLOADSTATEREQUEST']._loaded_options = None + _globals['_GETLOADSTATEREQUEST']._serialized_options = b'\312>\004\020!\030\002' + _globals['_CREATERESOURCEGROUPREQUEST']._loaded_options = None + _globals['_CREATERESOURCEGROUPREQUEST']._serialized_options = b'\312>\017\010\001\020\032\030\377\377\377\377\377\377\377\377\377\001' + _globals['_UPDATERESOURCEGROUPSREQUEST_RESOURCEGROUPSENTRY']._loaded_options = None + _globals['_UPDATERESOURCEGROUPSREQUEST_RESOURCEGROUPSENTRY']._serialized_options = b'8\001' + _globals['_UPDATERESOURCEGROUPSREQUEST']._loaded_options = None + _globals['_UPDATERESOURCEGROUPSREQUEST']._serialized_options = b'\312>\017\010\001\0200\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DROPRESOURCEGROUPREQUEST']._loaded_options = None + _globals['_DROPRESOURCEGROUPREQUEST']._serialized_options = b'\312>\017\010\001\020\033\030\377\377\377\377\377\377\377\377\377\001' + _globals['_TRANSFERNODEREQUEST']._loaded_options = None + _globals['_TRANSFERNODEREQUEST']._serialized_options = b'\312>\017\010\001\020\036\030\377\377\377\377\377\377\377\377\377\001' + _globals['_TRANSFERREPLICAREQUEST']._loaded_options = None + _globals['_TRANSFERREPLICAREQUEST']._serialized_options = b'\312>\017\010\001\020\037\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LISTRESOURCEGROUPSREQUEST']._loaded_options = None + _globals['_LISTRESOURCEGROUPSREQUEST']._serialized_options = b'\312>\017\010\001\020\035\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DESCRIBERESOURCEGROUPREQUEST']._loaded_options = None + _globals['_DESCRIBERESOURCEGROUPREQUEST']._serialized_options = b'\312>\017\010\001\020\034\030\377\377\377\377\377\377\377\377\377\001' + _globals['_RESOURCEGROUP_NUMLOADEDREPLICAENTRY']._loaded_options = None + _globals['_RESOURCEGROUP_NUMLOADEDREPLICAENTRY']._serialized_options = b'8\001' + _globals['_RESOURCEGROUP_NUMOUTGOINGNODEENTRY']._loaded_options = None + _globals['_RESOURCEGROUP_NUMOUTGOINGNODEENTRY']._serialized_options = b'8\001' + _globals['_RESOURCEGROUP_NUMINCOMINGNODEENTRY']._loaded_options = None + _globals['_RESOURCEGROUP_NUMINCOMINGNODEENTRY']._serialized_options = b'8\001' + _globals['_RENAMECOLLECTIONREQUEST']._loaded_options = None + _globals['_RENAMECOLLECTIONREQUEST']._serialized_options = b'\312>\017\010\001\020\"\030\377\377\377\377\377\377\377\377\377\001' + _globals['_GETINDEXSTATISTICSREQUEST']._loaded_options = None + _globals['_GETINDEXSTATISTICSREQUEST']._serialized_options = b'\312>\004\020\014\030\003' + _globals['_CREATEDATABASEREQUEST']._loaded_options = None + _globals['_CREATEDATABASEREQUEST']._serialized_options = b'\312>\017\010\001\020#\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DROPDATABASEREQUEST']._loaded_options = None + _globals['_DROPDATABASEREQUEST']._serialized_options = b'\312>\017\010\001\020$\030\377\377\377\377\377\377\377\377\377\001' + _globals['_ALTERDATABASEREQUEST']._loaded_options = None + _globals['_ALTERDATABASEREQUEST']._serialized_options = b'\312>\017\010\001\0201\030\377\377\377\377\377\377\377\377\377\001' + _globals['_DESCRIBEDATABASEREQUEST']._loaded_options = None + _globals['_DESCRIBEDATABASEREQUEST']._serialized_options = b'\312>\017\010\001\0202\030\377\377\377\377\377\377\377\377\377\001' + _globals['_IMPORTAUTHPLACEHOLDER']._loaded_options = None + _globals['_IMPORTAUTHPLACEHOLDER']._serialized_options = b'\312>\004\020\022\030\002' + _globals['_GETIMPORTPROGRESSAUTHPLACEHOLDER']._loaded_options = None + _globals['_GETIMPORTPROGRESSAUTHPLACEHOLDER']._serialized_options = b'\312>\017\010\001\020E\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LISTIMPORTSAUTHPLACEHOLDER']._loaded_options = None + _globals['_LISTIMPORTSAUTHPLACEHOLDER']._serialized_options = b'\312>\017\010\001\020F\030\377\377\377\377\377\377\377\377\377\001' + _globals['_ADDFILERESOURCEREQUEST']._loaded_options = None + _globals['_ADDFILERESOURCEREQUEST']._serialized_options = b'\312>\017\010\001\020H\030\377\377\377\377\377\377\377\377\377\001' + _globals['_REMOVEFILERESOURCEREQUEST']._loaded_options = None + _globals['_REMOVEFILERESOURCEREQUEST']._serialized_options = b'\312>\017\010\001\020I\030\377\377\377\377\377\377\377\377\377\001' + _globals['_LISTFILERESOURCESREQUEST']._loaded_options = None + _globals['_LISTFILERESOURCESREQUEST']._serialized_options = b'\312>\017\010\001\020J\030\377\377\377\377\377\377\377\377\377\001' + _globals['_ADDUSERTAGSREQUEST_TAGSENTRY']._loaded_options = None + _globals['_ADDUSERTAGSREQUEST_TAGSENTRY']._serialized_options = b'8\001' + _globals['_ADDUSERTAGSREQUEST']._loaded_options = None + _globals['_ADDUSERTAGSREQUEST']._serialized_options = b'\312>\006\010\002\020\024\030\002' + _globals['_DELETEUSERTAGSREQUEST']._loaded_options = None + _globals['_DELETEUSERTAGSREQUEST']._serialized_options = b'\312>\006\010\002\020\024\030\002' + _globals['_GETUSERTAGSREQUEST']._loaded_options = None + _globals['_GETUSERTAGSREQUEST']._serialized_options = b'\312>\006\010\002\020\030\030\002' + _globals['_GETUSERTAGSRESPONSE_TAGSENTRY']._loaded_options = None + _globals['_GETUSERTAGSRESPONSE_TAGSENTRY']._serialized_options = b'8\001' + _globals['_LISTUSERSWITHTAGREQUEST']._loaded_options = None + _globals['_LISTUSERSWITHTAGREQUEST']._serialized_options = b'\312>\017\010\002\020\030\030\377\377\377\377\377\377\377\377\377\001' + _globals['_CREATEROWPOLICYREQUEST']._loaded_options = None + _globals['_CREATEROWPOLICYREQUEST']._serialized_options = b'\312>\004\020\023\030\003' + _globals['_DROPROWPOLICYREQUEST']._loaded_options = None + _globals['_DROPROWPOLICYREQUEST']._serialized_options = b'\312>\004\020\025\030\003' + _globals['_LISTROWPOLICIESREQUEST']._loaded_options = None + _globals['_LISTROWPOLICIESREQUEST']._serialized_options = b'\312>\004\020\026\030\003' + _globals['_UPDATEREPLICATECONFIGURATIONREQUEST']._loaded_options = None + _globals['_UPDATEREPLICATECONFIGURATIONREQUEST']._serialized_options = b'\312>\017\010\001\020N\030\377\377\377\377\377\377\377\377\377\001' + _globals['_MILVUSSERVICE'].methods_by_name['GetIndexState']._loaded_options = None + _globals['_MILVUSSERVICE'].methods_by_name['GetIndexState']._serialized_options = b'\210\002\001' + _globals['_MILVUSSERVICE'].methods_by_name['GetIndexBuildProgress']._loaded_options = None + _globals['_MILVUSSERVICE'].methods_by_name['GetIndexBuildProgress']._serialized_options = b'\210\002\001' + _globals['_SHOWTYPE']._serialized_start=35018 + _globals['_SHOWTYPE']._serialized_end=35055 + _globals['_OPERATEPRIVILEGEGROUPTYPE']._serialized_start=35057 + _globals['_OPERATEPRIVILEGEGROUPTYPE']._serialized_end=35141 + _globals['_OPERATEUSERROLETYPE']._serialized_start=35143 + _globals['_OPERATEUSERROLETYPE']._serialized_end=35207 + _globals['_PRIVILEGELEVEL']._serialized_start=35209 + _globals['_PRIVILEGELEVEL']._serialized_end=35268 + _globals['_OPERATEPRIVILEGETYPE']._serialized_start=35270 + _globals['_OPERATEPRIVILEGETYPE']._serialized_end=35315 + _globals['_QUOTASTATE']._serialized_start=35317 + _globals['_QUOTASTATE']._serialized_end=35425 + _globals['_ROWPOLICYACTION']._serialized_start=35427 + _globals['_ROWPOLICYACTION']._serialized_end=35503 + _globals['_CREATEALIASREQUEST']._serialized_start=134 + _globals['_CREATEALIASREQUEST']._serialized_end=275 + _globals['_DROPALIASREQUEST']._serialized_start=277 + _globals['_DROPALIASREQUEST']._serialized_end=391 + _globals['_ALTERALIASREQUEST']._serialized_start=394 + _globals['_ALTERALIASREQUEST']._serialized_end=534 + _globals['_DESCRIBEALIASREQUEST']._serialized_start=536 + _globals['_DESCRIBEALIASREQUEST']._serialized_end=654 + _globals['_DESCRIBEALIASRESPONSE']._serialized_start=656 + _globals['_DESCRIBEALIASRESPONSE']._serialized_end=776 + _globals['_LISTALIASESREQUEST']._serialized_start=778 + _globals['_LISTALIASESREQUEST']._serialized_end=904 + _globals['_LISTALIASESRESPONSE']._serialized_start=906 + _globals['_LISTALIASESRESPONSE']._serialized_end=1031 + _globals['_CREATECOLLECTIONREQUEST']._serialized_start=1034 + _globals['_CREATECOLLECTIONREQUEST']._serialized_end=1346 + _globals['_DROPCOLLECTIONREQUEST']._serialized_start=1349 + _globals['_DROPCOLLECTIONREQUEST']._serialized_end=1478 + _globals['_ALTERCOLLECTIONREQUEST']._serialized_start=1481 + _globals['_ALTERCOLLECTIONREQUEST']._serialized_end=1709 + _globals['_ALTERCOLLECTIONFIELDREQUEST']._serialized_start=1712 + _globals['_ALTERCOLLECTIONFIELDREQUEST']._serialized_end=1943 + _globals['_HASCOLLECTIONREQUEST']._serialized_start=1946 + _globals['_HASCOLLECTIONREQUEST']._serialized_end=2074 + _globals['_BOOLRESPONSE']._serialized_start=2076 + _globals['_BOOLRESPONSE']._serialized_end=2150 + _globals['_STRINGRESPONSE']._serialized_start=2152 + _globals['_STRINGRESPONSE']._serialized_end=2228 + _globals['_DESCRIBECOLLECTIONREQUEST']._serialized_start=2231 + _globals['_DESCRIBECOLLECTIONREQUEST']._serialized_end=2406 + _globals['_DESCRIBECOLLECTIONRESPONSE']._serialized_start=2409 + _globals['_DESCRIBECOLLECTIONRESPONSE']._serialized_end=3056 + _globals['_BATCHDESCRIBECOLLECTIONREQUEST']._serialized_start=3058 + _globals['_BATCHDESCRIBECOLLECTIONREQUEST']._serialized_end=3174 + _globals['_BATCHDESCRIBECOLLECTIONRESPONSE']._serialized_start=3177 + _globals['_BATCHDESCRIBECOLLECTIONRESPONSE']._serialized_end=3323 + _globals['_LOADCOLLECTIONREQUEST']._serialized_start=3326 + _globals['_LOADCOLLECTIONREQUEST']._serialized_end=3696 + _globals['_LOADCOLLECTIONREQUEST_LOADPARAMSENTRY']._serialized_start=3638 + _globals['_LOADCOLLECTIONREQUEST_LOADPARAMSENTRY']._serialized_end=3687 + _globals['_RELEASECOLLECTIONREQUEST']._serialized_start=3698 + _globals['_RELEASECOLLECTIONREQUEST']._serialized_end=3819 + _globals['_GETSTATISTICSREQUEST']._serialized_start=3822 + _globals['_GETSTATISTICSREQUEST']._serialized_end=3993 + _globals['_GETSTATISTICSRESPONSE']._serialized_start=3995 + _globals['_GETSTATISTICSRESPONSE']._serialized_end=4113 + _globals['_GETCOLLECTIONSTATISTICSREQUEST']._serialized_start=4115 + _globals['_GETCOLLECTIONSTATISTICSREQUEST']._serialized_end=4242 + _globals['_GETCOLLECTIONSTATISTICSRESPONSE']._serialized_start=4245 + _globals['_GETCOLLECTIONSTATISTICSRESPONSE']._serialized_end=4373 + _globals['_SHOWCOLLECTIONSREQUEST']._serialized_start=4376 + _globals['_SHOWCOLLECTIONSREQUEST']._serialized_end=4556 + _globals['_SHOWCOLLECTIONSRESPONSE']._serialized_start=4559 + _globals['_SHOWCOLLECTIONSRESPONSE']._serialized_end=4826 + _globals['_CREATEPARTITIONREQUEST']._serialized_start=4829 + _globals['_CREATEPARTITIONREQUEST']._serialized_end=4972 + _globals['_DROPPARTITIONREQUEST']._serialized_start=4975 + _globals['_DROPPARTITIONREQUEST']._serialized_end=5116 + _globals['_HASPARTITIONREQUEST']._serialized_start=5119 + _globals['_HASPARTITIONREQUEST']._serialized_end=5259 + _globals['_LOADPARTITIONSREQUEST']._serialized_start=5262 + _globals['_LOADPARTITIONSREQUEST']._serialized_end=5657 + _globals['_LOADPARTITIONSREQUEST_LOADPARAMSENTRY']._serialized_start=3638 + _globals['_LOADPARTITIONSREQUEST_LOADPARAMSENTRY']._serialized_end=3687 + _globals['_RELEASEPARTITIONSREQUEST']._serialized_start=5660 + _globals['_RELEASEPARTITIONSREQUEST']._serialized_end=5806 + _globals['_GETPARTITIONSTATISTICSREQUEST']._serialized_start=5809 + _globals['_GETPARTITIONSTATISTICSREQUEST']._serialized_end=5950 + _globals['_GETPARTITIONSTATISTICSRESPONSE']._serialized_start=5952 + _globals['_GETPARTITIONSTATISTICSRESPONSE']._serialized_end=6079 + _globals['_SHOWPARTITIONSREQUEST']._serialized_start=6082 + _globals['_SHOWPARTITIONSREQUEST']._serialized_end=6296 + _globals['_SHOWPARTITIONSRESPONSE']._serialized_start=6299 + _globals['_SHOWPARTITIONSRESPONSE']._serialized_end=6509 + _globals['_DESCRIBESEGMENTREQUEST']._serialized_start=6511 + _globals['_DESCRIBESEGMENTREQUEST']._serialized_end=6620 + _globals['_DESCRIBESEGMENTRESPONSE']._serialized_start=6623 + _globals['_DESCRIBESEGMENTRESPONSE']._serialized_end=6766 + _globals['_SHOWSEGMENTSREQUEST']._serialized_start=6768 + _globals['_SHOWSEGMENTSREQUEST']._serialized_end=6876 + _globals['_SHOWSEGMENTSRESPONSE']._serialized_start=6878 + _globals['_SHOWSEGMENTSRESPONSE']._serialized_end=6965 + _globals['_CREATEINDEXREQUEST']._serialized_start=6968 + _globals['_CREATEINDEXREQUEST']._serialized_end=7180 + _globals['_ALTERINDEXREQUEST']._serialized_start=7183 + _globals['_ALTERINDEXREQUEST']._serialized_end=7395 + _globals['_DESCRIBEINDEXREQUEST']._serialized_start=7398 + _globals['_DESCRIBEINDEXREQUEST']._serialized_end=7574 + _globals['_INDEXDESCRIPTION']._serialized_start=7577 + _globals['_INDEXDESCRIPTION']._serialized_end=7908 + _globals['_DESCRIBEINDEXRESPONSE']._serialized_start=7911 + _globals['_DESCRIBEINDEXRESPONSE']._serialized_end=8046 + _globals['_GETINDEXBUILDPROGRESSREQUEST']._serialized_start=8049 + _globals['_GETINDEXBUILDPROGRESSREQUEST']._serialized_end=8214 + _globals['_GETINDEXBUILDPROGRESSRESPONSE']._serialized_start=8216 + _globals['_GETINDEXBUILDPROGRESSRESPONSE']._serialized_end=8334 + _globals['_GETINDEXSTATEREQUEST']._serialized_start=8337 + _globals['_GETINDEXSTATEREQUEST']._serialized_end=8494 + _globals['_GETINDEXSTATERESPONSE']._serialized_start=8497 + _globals['_GETINDEXSTATERESPONSE']._serialized_end=8634 + _globals['_DROPINDEXREQUEST']._serialized_start=8637 + _globals['_DROPINDEXREQUEST']._serialized_end=8790 + _globals['_INSERTREQUEST']._serialized_start=8793 + _globals['_INSERTREQUEST']._serialized_end=9081 + _globals['_ADDCOLLECTIONFIELDREQUEST']._serialized_start=9084 + _globals['_ADDCOLLECTIONFIELDREQUEST']._serialized_end=9244 + _globals['_ADDCOLLECTIONFUNCTIONREQUEST']._serialized_start=9247 + _globals['_ADDCOLLECTIONFUNCTIONREQUEST']._serialized_end=9455 + _globals['_ALTERCOLLECTIONFUNCTIONREQUEST']._serialized_start=9458 + _globals['_ALTERCOLLECTIONFUNCTIONREQUEST']._serialized_end=9691 + _globals['_DROPCOLLECTIONFUNCTIONREQUEST']._serialized_start=9694 + _globals['_DROPCOLLECTIONFUNCTIONREQUEST']._serialized_end=9865 + _globals['_UPSERTREQUEST']._serialized_start=9868 + _globals['_UPSERTREQUEST']._serialized_end=10180 + _globals['_MUTATIONRESULT']._serialized_start=10183 + _globals['_MUTATIONRESULT']._serialized_end=10423 + _globals['_DELETEREQUEST']._serialized_start=10426 + _globals['_DELETEREQUEST']._serialized_end=10844 + _globals['_DELETEREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_start=10742 + _globals['_DELETEREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_end=10835 + _globals['_SUBSEARCHREQUEST']._serialized_start=10847 + _globals['_SUBSEARCHREQUEST']._serialized_end=11249 + _globals['_SUBSEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_start=10742 + _globals['_SUBSEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_end=10835 + _globals['_SEARCHREQUEST']._serialized_start=11252 + _globals['_SEARCHREQUEST']._serialized_end=12178 + _globals['_SEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_start=10742 + _globals['_SEARCHREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_end=10835 + _globals['_HITS']._serialized_start=12180 + _globals['_HITS']._serialized_end=12233 + _globals['_SEARCHRESULTS']._serialized_start=12236 + _globals['_SEARCHRESULTS']._serialized_end=12397 + _globals['_HYBRIDSEARCHREQUEST']._serialized_start=12400 + _globals['_HYBRIDSEARCHREQUEST']._serialized_end=12955 + _globals['_FLUSHREQUEST']._serialized_start=12957 + _globals['_FLUSHREQUEST']._serialized_end=13067 + _globals['_FLUSHRESPONSE']._serialized_start=13070 + _globals['_FLUSHRESPONSE']._serialized_end=13892 + _globals['_FLUSHRESPONSE_COLLSEGIDSENTRY']._serialized_start=13535 + _globals['_FLUSHRESPONSE_COLLSEGIDSENTRY']._serialized_end=13616 + _globals['_FLUSHRESPONSE_FLUSHCOLLSEGIDSENTRY']._serialized_start=13618 + _globals['_FLUSHRESPONSE_FLUSHCOLLSEGIDSENTRY']._serialized_end=13704 + _globals['_FLUSHRESPONSE_COLLSEALTIMESENTRY']._serialized_start=13706 + _globals['_FLUSHRESPONSE_COLLSEALTIMESENTRY']._serialized_end=13758 + _globals['_FLUSHRESPONSE_COLLFLUSHTSENTRY']._serialized_start=13760 + _globals['_FLUSHRESPONSE_COLLFLUSHTSENTRY']._serialized_end=13810 + _globals['_FLUSHRESPONSE_CHANNELCPSENTRY']._serialized_start=13812 + _globals['_FLUSHRESPONSE_CHANNELCPSENTRY']._serialized_end=13892 + _globals['_QUERYREQUEST']._serialized_start=13895 + _globals['_QUERYREQUEST']._serialized_end=14528 + _globals['_QUERYREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_start=10742 + _globals['_QUERYREQUEST_EXPRTEMPLATEVALUESENTRY']._serialized_end=10835 + _globals['_QUERYRESULTS']._serialized_start=14531 + _globals['_QUERYRESULTS']._serialized_end=14739 + _globals['_QUERYCURSOR']._serialized_start=14741 + _globals['_QUERYCURSOR']._serialized_end=14823 + _globals['_VECTORIDS']._serialized_start=14825 + _globals['_VECTORIDS']._serialized_end=14950 + _globals['_VECTORSARRAY']._serialized_start=14953 + _globals['_VECTORSARRAY']._serialized_end=15084 + _globals['_CALCDISTANCEREQUEST']._serialized_start=15087 + _globals['_CALCDISTANCEREQUEST']._serialized_end=15308 + _globals['_CALCDISTANCERESULTS']._serialized_start=15311 + _globals['_CALCDISTANCERESULTS']._serialized_end=15492 + _globals['_FLUSHALLTARGET']._serialized_start=15494 + _globals['_FLUSHALLTARGET']._serialized_end=15553 + _globals['_FLUSHALLREQUEST']._serialized_start=15556 + _globals['_FLUSHALLREQUEST']._serialized_end=15718 + _globals['_FLUSHALLRESPONSE']._serialized_start=15721 + _globals['_FLUSHALLRESPONSE']._serialized_end=15866 + _globals['_FLUSHALLRESULT']._serialized_start=15868 + _globals['_FLUSHALLRESULT']._serialized_end=15973 + _globals['_FLUSHCOLLECTIONRESULT']._serialized_start=15976 + _globals['_FLUSHCOLLECTIONRESULT']._serialized_end=16336 + _globals['_FLUSHCOLLECTIONRESULT_CHANNELCPSENTRY']._serialized_start=13812 + _globals['_FLUSHCOLLECTIONRESULT_CHANNELCPSENTRY']._serialized_end=13892 + _globals['_PERSISTENTSEGMENTINFO']._serialized_start=16339 + _globals['_PERSISTENTSEGMENTINFO']._serialized_end=16586 + _globals['_GETPERSISTENTSEGMENTINFOREQUEST']._serialized_start=16588 + _globals['_GETPERSISTENTSEGMENTINFOREQUEST']._serialized_end=16705 + _globals['_GETPERSISTENTSEGMENTINFORESPONSE']._serialized_start=16708 + _globals['_GETPERSISTENTSEGMENTINFORESPONSE']._serialized_end=16846 + _globals['_QUERYSEGMENTINFO']._serialized_start=16849 + _globals['_QUERYSEGMENTINFO']._serialized_end=17183 + _globals['_GETQUERYSEGMENTINFOREQUEST']._serialized_start=17185 + _globals['_GETQUERYSEGMENTINFOREQUEST']._serialized_end=17297 + _globals['_GETQUERYSEGMENTINFORESPONSE']._serialized_start=17300 + _globals['_GETQUERYSEGMENTINFORESPONSE']._serialized_end=17428 + _globals['_DUMMYREQUEST']._serialized_start=17430 + _globals['_DUMMYREQUEST']._serialized_end=17466 + _globals['_DUMMYRESPONSE']._serialized_start=17468 + _globals['_DUMMYRESPONSE']._serialized_end=17501 + _globals['_REGISTERLINKREQUEST']._serialized_start=17503 + _globals['_REGISTERLINKREQUEST']._serialized_end=17524 + _globals['_REGISTERLINKRESPONSE']._serialized_start=17526 + _globals['_REGISTERLINKRESPONSE']._serialized_end=17640 + _globals['_GETMETRICSREQUEST']._serialized_start=17642 + _globals['_GETMETRICSREQUEST']._serialized_end=17722 + _globals['_GETMETRICSRESPONSE']._serialized_start=17724 + _globals['_GETMETRICSRESPONSE']._serialized_end=17831 + _globals['_COMPONENTINFO']._serialized_start=17834 + _globals['_COMPONENTINFO']._serialized_end=17986 + _globals['_COMPONENTSTATES']._serialized_start=17989 + _globals['_COMPONENTSTATES']._serialized_end=18167 + _globals['_GETCOMPONENTSTATESREQUEST']._serialized_start=18169 + _globals['_GETCOMPONENTSTATESREQUEST']._serialized_end=18196 + _globals['_LOADBALANCEREQUEST']._serialized_start=18199 + _globals['_LOADBALANCEREQUEST']._serialized_end=18381 + _globals['_MANUALCOMPACTIONREQUEST']._serialized_start=18384 + _globals['_MANUALCOMPACTIONREQUEST']._serialized_end=18630 + _globals['_MANUALCOMPACTIONRESPONSE']._serialized_start=18632 + _globals['_MANUALCOMPACTIONRESPONSE']._serialized_end=18754 + _globals['_GETCOMPACTIONSTATEREQUEST']._serialized_start=18756 + _globals['_GETCOMPACTIONSTATEREQUEST']._serialized_end=18805 + _globals['_GETCOMPACTIONSTATERESPONSE']._serialized_start=18808 + _globals['_GETCOMPACTIONSTATERESPONSE']._serialized_end=19029 + _globals['_GETCOMPACTIONPLANSREQUEST']._serialized_start=19031 + _globals['_GETCOMPACTIONPLANSREQUEST']._serialized_end=19080 + _globals['_GETCOMPACTIONPLANSRESPONSE']._serialized_start=19083 + _globals['_GETCOMPACTIONPLANSRESPONSE']._serialized_end=19271 + _globals['_COMPACTIONMERGEINFO']._serialized_start=19273 + _globals['_COMPACTIONMERGEINFO']._serialized_end=19327 + _globals['_GETFLUSHSTATEREQUEST']._serialized_start=19329 + _globals['_GETFLUSHSTATEREQUEST']._serialized_end=19440 + _globals['_GETFLUSHSTATERESPONSE']._serialized_start=19442 + _globals['_GETFLUSHSTATERESPONSE']._serialized_end=19527 + _globals['_GETFLUSHALLSTATEREQUEST']._serialized_start=19530 + _globals['_GETFLUSHALLSTATEREQUEST']._serialized_end=19702 + _globals['_GETFLUSHALLSTATERESPONSE']._serialized_start=19705 + _globals['_GETFLUSHALLSTATERESPONSE']._serialized_end=19851 + _globals['_FLUSHALLSTATE']._serialized_start=19854 + _globals['_FLUSHALLSTATE']._serialized_end=20044 + _globals['_FLUSHALLSTATE_COLLECTIONFLUSHSTATESENTRY']._serialized_start=19984 + _globals['_FLUSHALLSTATE_COLLECTIONFLUSHSTATESENTRY']._serialized_end=20044 + _globals['_IMPORTREQUEST']._serialized_start=20047 + _globals['_IMPORTREQUEST']._serialized_end=20271 + _globals['_IMPORTRESPONSE']._serialized_start=20273 + _globals['_IMPORTRESPONSE']._serialized_end=20349 + _globals['_GETIMPORTSTATEREQUEST']._serialized_start=20351 + _globals['_GETIMPORTSTATEREQUEST']._serialized_end=20388 + _globals['_GETIMPORTSTATERESPONSE']._serialized_start=20391 + _globals['_GETIMPORTSTATERESPONSE']._serialized_end=20670 + _globals['_LISTIMPORTTASKSREQUEST']._serialized_start=20672 + _globals['_LISTIMPORTTASKSREQUEST']._serialized_end=20753 + _globals['_LISTIMPORTTASKSRESPONSE']._serialized_start=20756 + _globals['_LISTIMPORTTASKSRESPONSE']._serialized_end=20886 + _globals['_GETREPLICASREQUEST']._serialized_start=20889 + _globals['_GETREPLICASREQUEST']._serialized_end=21043 + _globals['_GETREPLICASRESPONSE']._serialized_start=21045 + _globals['_GETREPLICASRESPONSE']._serialized_end=21163 + _globals['_REPLICAINFO']._serialized_start=21166 + _globals['_REPLICAINFO']._serialized_end=21487 + _globals['_REPLICAINFO_NUMOUTBOUNDNODEENTRY']._serialized_start=21433 + _globals['_REPLICAINFO_NUMOUTBOUNDNODEENTRY']._serialized_end=21487 + _globals['_SHARDREPLICA']._serialized_start=21489 + _globals['_SHARDREPLICA']._serialized_end=21585 + _globals['_CREATECREDENTIALREQUEST']._serialized_start=21588 + _globals['_CREATECREDENTIALREQUEST']._serialized_end=21778 + _globals['_UPDATECREDENTIALREQUEST']._serialized_start=21781 + _globals['_UPDATECREDENTIALREQUEST']._serialized_end=21986 + _globals['_DELETECREDENTIALREQUEST']._serialized_start=21988 + _globals['_DELETECREDENTIALREQUEST']._serialized_end=22095 + _globals['_LISTCREDUSERSRESPONSE']._serialized_start=22097 + _globals['_LISTCREDUSERSRESPONSE']._serialized_end=22184 + _globals['_LISTCREDUSERSREQUEST']._serialized_start=22186 + _globals['_LISTCREDUSERSREQUEST']._serialized_end=22272 + _globals['_ROLEENTITY']._serialized_start=22274 + _globals['_ROLEENTITY']._serialized_end=22300 + _globals['_USERENTITY']._serialized_start=22302 + _globals['_USERENTITY']._serialized_end=22328 + _globals['_CREATEROLEREQUEST']._serialized_start=22331 + _globals['_CREATEROLEREQUEST']._serialized_end=22463 + _globals['_DROPROLEREQUEST']._serialized_start=22465 + _globals['_DROPROLEREQUEST']._serialized_end=22585 + _globals['_CREATEPRIVILEGEGROUPREQUEST']._serialized_start=22587 + _globals['_CREATEPRIVILEGEGROUPREQUEST']._serialized_end=22700 + _globals['_DROPPRIVILEGEGROUPREQUEST']._serialized_start=22702 + _globals['_DROPPRIVILEGEGROUPREQUEST']._serialized_end=22813 + _globals['_LISTPRIVILEGEGROUPSREQUEST']._serialized_start=22815 + _globals['_LISTPRIVILEGEGROUPSREQUEST']._serialized_end=22907 + _globals['_LISTPRIVILEGEGROUPSRESPONSE']._serialized_start=22910 + _globals['_LISTPRIVILEGEGROUPSRESPONSE']._serialized_end=23051 + _globals['_OPERATEPRIVILEGEGROUPREQUEST']._serialized_start=23054 + _globals['_OPERATEPRIVILEGEGROUPREQUEST']._serialized_end=23288 + _globals['_OPERATEUSERROLEREQUEST']._serialized_start=23291 + _globals['_OPERATEUSERROLEREQUEST']._serialized_end=23472 + _globals['_PRIVILEGEGROUPINFO']._serialized_start=23474 + _globals['_PRIVILEGEGROUPINFO']._serialized_end=23572 + _globals['_SELECTROLEREQUEST']._serialized_start=23575 + _globals['_SELECTROLEREQUEST']._serialized_end=23732 + _globals['_ROLERESULT']._serialized_start=23734 + _globals['_ROLERESULT']._serialized_end=23841 + _globals['_SELECTROLERESPONSE']._serialized_start=23843 + _globals['_SELECTROLERESPONSE']._serialized_end=23958 + _globals['_SELECTUSERREQUEST']._serialized_start=23961 + _globals['_SELECTUSERREQUEST']._serialized_end=24109 + _globals['_USERRESULT']._serialized_start=24111 + _globals['_USERRESULT']._serialized_end=24218 + _globals['_SELECTUSERRESPONSE']._serialized_start=24220 + _globals['_SELECTUSERRESPONSE']._serialized_end=24335 + _globals['_OBJECTENTITY']._serialized_start=24337 + _globals['_OBJECTENTITY']._serialized_end=24365 + _globals['_PRIVILEGEENTITY']._serialized_start=24367 + _globals['_PRIVILEGEENTITY']._serialized_end=24398 + _globals['_GRANTORENTITY']._serialized_start=24400 + _globals['_GRANTORENTITY']._serialized_end=24519 + _globals['_GRANTPRIVILEGEENTITY']._serialized_start=24521 + _globals['_GRANTPRIVILEGEENTITY']._serialized_end=24597 + _globals['_GRANTENTITY']._serialized_start=24600 + _globals['_GRANTENTITY']._serialized_end=24802 + _globals['_SELECTGRANTREQUEST']._serialized_start=24805 + _globals['_SELECTGRANTREQUEST']._serialized_end=24939 + _globals['_SELECTGRANTRESPONSE']._serialized_start=24941 + _globals['_SELECTGRANTRESPONSE']._serialized_end=25059 + _globals['_OPERATEPRIVILEGEREQUEST']._serialized_start=25062 + _globals['_OPERATEPRIVILEGEREQUEST']._serialized_end=25275 + _globals['_OPERATEPRIVILEGEV2REQUEST']._serialized_start=25278 + _globals['_OPERATEPRIVILEGEV2REQUEST']._serialized_end=25568 + _globals['_USERINFO']._serialized_start=25570 + _globals['_USERINFO']._serialized_end=25660 + _globals['_RBACMETA']._serialized_start=25663 + _globals['_RBACMETA']._serialized_end=25884 + _globals['_BACKUPRBACMETAREQUEST']._serialized_start=25886 + _globals['_BACKUPRBACMETAREQUEST']._serialized_end=25973 + _globals['_BACKUPRBACMETARESPONSE']._serialized_start=25975 + _globals['_BACKUPRBACMETARESPONSE']._serialized_end=26094 + _globals['_RESTORERBACMETAREQUEST']._serialized_start=26097 + _globals['_RESTORERBACMETAREQUEST']._serialized_end=26235 + _globals['_GETLOADINGPROGRESSREQUEST']._serialized_start=26238 + _globals['_GETLOADINGPROGRESSREQUEST']._serialized_end=26385 + _globals['_GETLOADINGPROGRESSRESPONSE']._serialized_start=26387 + _globals['_GETLOADINGPROGRESSRESPONSE']._serialized_end=26504 + _globals['_GETLOADSTATEREQUEST']._serialized_start=26507 + _globals['_GETLOADSTATEREQUEST']._serialized_end=26648 + _globals['_GETLOADSTATERESPONSE']._serialized_start=26650 + _globals['_GETLOADSTATERESPONSE']._serialized_end=26764 + _globals['_MILVUSEXT']._serialized_start=26766 + _globals['_MILVUSEXT']._serialized_end=26794 + _globals['_GETVERSIONREQUEST']._serialized_start=26796 + _globals['_GETVERSIONREQUEST']._serialized_end=26815 + _globals['_GETVERSIONRESPONSE']._serialized_start=26817 + _globals['_GETVERSIONRESPONSE']._serialized_end=26899 + _globals['_CHECKHEALTHREQUEST']._serialized_start=26901 + _globals['_CHECKHEALTHREQUEST']._serialized_end=26921 + _globals['_CHECKHEALTHRESPONSE']._serialized_start=26924 + _globals['_CHECKHEALTHRESPONSE']._serialized_end=27081 + _globals['_CREATERESOURCEGROUPREQUEST']._serialized_start=27084 + _globals['_CREATERESOURCEGROUPREQUEST']._serialized_end=27254 + _globals['_UPDATERESOURCEGROUPSREQUEST']._serialized_start=27257 + _globals['_UPDATERESOURCEGROUPSREQUEST']._serialized_end=27538 + _globals['_UPDATERESOURCEGROUPSREQUEST_RESOURCEGROUPSENTRY']._serialized_start=27427 + _globals['_UPDATERESOURCEGROUPSREQUEST_RESOURCEGROUPSENTRY']._serialized_end=27518 + _globals['_DROPRESOURCEGROUPREQUEST']._serialized_start=27540 + _globals['_DROPRESOURCEGROUPREQUEST']._serialized_end=27654 + _globals['_TRANSFERNODEREQUEST']._serialized_start=27657 + _globals['_TRANSFERNODEREQUEST']._serialized_end=27822 + _globals['_TRANSFERREPLICAREQUEST']._serialized_start=27825 + _globals['_TRANSFERREPLICAREQUEST']._serialized_end=28038 + _globals['_LISTRESOURCEGROUPSREQUEST']._serialized_start=28040 + _globals['_LISTRESOURCEGROUPSREQUEST']._serialized_end=28131 + _globals['_LISTRESOURCEGROUPSRESPONSE']._serialized_start=28133 + _globals['_LISTRESOURCEGROUPSRESPONSE']._serialized_end=28231 + _globals['_DESCRIBERESOURCEGROUPREQUEST']._serialized_start=28233 + _globals['_DESCRIBERESOURCEGROUPREQUEST']._serialized_end=28351 + _globals['_DESCRIBERESOURCEGROUPRESPONSE']._serialized_start=28354 + _globals['_DESCRIBERESOURCEGROUPRESPONSE']._serialized_end=28490 + _globals['_RESOURCEGROUP']._serialized_start=28493 + _globals['_RESOURCEGROUP']._serialized_end=29091 + _globals['_RESOURCEGROUP_NUMLOADEDREPLICAENTRY']._serialized_start=28924 + _globals['_RESOURCEGROUP_NUMLOADEDREPLICAENTRY']._serialized_end=28979 + _globals['_RESOURCEGROUP_NUMOUTGOINGNODEENTRY']._serialized_start=28981 + _globals['_RESOURCEGROUP_NUMOUTGOINGNODEENTRY']._serialized_end=29035 + _globals['_RESOURCEGROUP_NUMINCOMINGNODEENTRY']._serialized_start=29037 + _globals['_RESOURCEGROUP_NUMINCOMINGNODEENTRY']._serialized_end=29091 + _globals['_RENAMECOLLECTIONREQUEST']._serialized_start=29094 + _globals['_RENAMECOLLECTIONREQUEST']._serialized_end=29253 + _globals['_GETINDEXSTATISTICSREQUEST']._serialized_start=29256 + _globals['_GETINDEXSTATISTICSREQUEST']._serialized_end=29417 + _globals['_GETINDEXSTATISTICSRESPONSE']._serialized_start=29420 + _globals['_GETINDEXSTATISTICSRESPONSE']._serialized_end=29560 + _globals['_CONNECTREQUEST']._serialized_start=29562 + _globals['_CONNECTREQUEST']._serialized_end=29676 + _globals['_CONNECTRESPONSE']._serialized_start=29679 + _globals['_CONNECTRESPONSE']._serialized_end=29815 + _globals['_ALLOCTIMESTAMPREQUEST']._serialized_start=29817 + _globals['_ALLOCTIMESTAMPREQUEST']._serialized_end=29884 + _globals['_ALLOCTIMESTAMPRESPONSE']._serialized_start=29886 + _globals['_ALLOCTIMESTAMPRESPONSE']._serialized_end=29974 + _globals['_CREATEDATABASEREQUEST']._serialized_start=29977 + _globals['_CREATEDATABASEREQUEST']._serialized_end=30136 + _globals['_DROPDATABASEREQUEST']._serialized_start=30138 + _globals['_DROPDATABASEREQUEST']._serialized_end=30240 + _globals['_LISTDATABASESREQUEST']._serialized_start=30242 + _globals['_LISTDATABASESREQUEST']._serialized_end=30308 + _globals['_LISTDATABASESRESPONSE']._serialized_start=30311 + _globals['_LISTDATABASESRESPONSE']._serialized_end=30440 + _globals['_ALTERDATABASEREQUEST']._serialized_start=30443 + _globals['_ALTERDATABASEREQUEST']._serialized_end=30637 + _globals['_DESCRIBEDATABASEREQUEST']._serialized_start=30639 + _globals['_DESCRIBEDATABASEREQUEST']._serialized_end=30745 + _globals['_DESCRIBEDATABASERESPONSE']._serialized_start=30748 + _globals['_DESCRIBEDATABASERESPONSE']._serialized_end=30932 + _globals['_REPLICATEMESSAGEREQUEST']._serialized_start=30935 + _globals['_REPLICATEMESSAGEREQUEST']._serialized_end=31180 + _globals['_REPLICATEMESSAGERESPONSE']._serialized_start=31182 + _globals['_REPLICATEMESSAGERESPONSE']._serialized_end=31271 + _globals['_IMPORTAUTHPLACEHOLDER']._serialized_start=31273 + _globals['_IMPORTAUTHPLACEHOLDER']._serialized_end=31371 + _globals['_GETIMPORTPROGRESSAUTHPLACEHOLDER']._serialized_start=31373 + _globals['_GETIMPORTPROGRESSAUTHPLACEHOLDER']._serialized_end=31444 + _globals['_LISTIMPORTSAUTHPLACEHOLDER']._serialized_start=31446 + _globals['_LISTIMPORTSAUTHPLACEHOLDER']._serialized_end=31536 + _globals['_RUNANALYZERREQUEST']._serialized_start=31539 + _globals['_RUNANALYZERREQUEST']._serialized_end=31775 + _globals['_ANALYZERTOKEN']._serialized_start=31778 + _globals['_ANALYZERTOKEN']._serialized_end=31907 + _globals['_ANALYZERRESULT']._serialized_start=31909 + _globals['_ANALYZERRESULT']._serialized_end=31977 + _globals['_RUNANALYZERRESPONSE']._serialized_start=31979 + _globals['_RUNANALYZERRESPONSE']._serialized_end=32099 + _globals['_FILERESOURCEINFO']._serialized_start=32101 + _globals['_FILERESOURCEINFO']._serialized_end=32159 + _globals['_ADDFILERESOURCEREQUEST']._serialized_start=32161 + _globals['_ADDFILERESOURCEREQUEST']._serialized_end=32277 + _globals['_REMOVEFILERESOURCEREQUEST']._serialized_start=32279 + _globals['_REMOVEFILERESOURCEREQUEST']._serialized_end=32384 + _globals['_LISTFILERESOURCESREQUEST']._serialized_start=32386 + _globals['_LISTFILERESOURCESREQUEST']._serialized_end=32476 + _globals['_LISTFILERESOURCESRESPONSE']._serialized_start=32479 + _globals['_LISTFILERESOURCESRESPONSE']._serialized_end=32609 + _globals['_ADDUSERTAGSREQUEST']._serialized_start=32612 + _globals['_ADDUSERTAGSREQUEST']._serialized_end=32816 + _globals['_ADDUSERTAGSREQUEST_TAGSENTRY']._serialized_start=32762 + _globals['_ADDUSERTAGSREQUEST_TAGSENTRY']._serialized_end=32805 + _globals['_DELETEUSERTAGSREQUEST']._serialized_start=32818 + _globals['_DELETEUSERTAGSREQUEST']._serialized_end=32933 + _globals['_GETUSERTAGSREQUEST']._serialized_start=32935 + _globals['_GETUSERTAGSREQUEST']._serialized_end=33029 + _globals['_GETUSERTAGSRESPONSE']._serialized_start=33032 + _globals['_GETUSERTAGSRESPONSE']._serialized_end=33209 + _globals['_GETUSERTAGSRESPONSE_TAGSENTRY']._serialized_start=32762 + _globals['_GETUSERTAGSRESPONSE_TAGSENTRY']._serialized_end=32805 + _globals['_LISTUSERSWITHTAGREQUEST']._serialized_start=33211 + _globals['_LISTUSERSWITHTAGREQUEST']._serialized_end=33336 + _globals['_LISTUSERSWITHTAGRESPONSE']._serialized_start=33338 + _globals['_LISTUSERSWITHTAGRESPONSE']._serialized_end=33429 + _globals['_CREATEROWPOLICYREQUEST']._serialized_start=33432 + _globals['_CREATEROWPOLICYREQUEST']._serialized_end=33703 + _globals['_DROPROWPOLICYREQUEST']._serialized_start=33706 + _globals['_DROPROWPOLICYREQUEST']._serialized_end=33844 + _globals['_LISTROWPOLICIESREQUEST']._serialized_start=33846 + _globals['_LISTROWPOLICIESREQUEST']._serialized_end=33965 + _globals['_ROWPOLICY']._serialized_start=33968 + _globals['_ROWPOLICY']._serialized_end=34151 + _globals['_LISTROWPOLICIESRESPONSE']._serialized_start=34154 + _globals['_LISTROWPOLICIESRESPONSE']._serialized_end=34316 + _globals['_UPDATEREPLICATECONFIGURATIONREQUEST']._serialized_start=34319 + _globals['_UPDATEREPLICATECONFIGURATIONREQUEST']._serialized_end=34454 + _globals['_GETREPLICATEINFOREQUEST']._serialized_start=34456 + _globals['_GETREPLICATEINFOREQUEST']._serialized_end=34533 + _globals['_GETREPLICATEINFORESPONSE']._serialized_start=34535 + _globals['_GETREPLICATEINFORESPONSE']._serialized_end=34623 + _globals['_REPLICATEMESSAGE']._serialized_start=34625 + _globals['_REPLICATEMESSAGE']._serialized_end=34726 + _globals['_REPLICATEREQUEST']._serialized_start=34728 + _globals['_REPLICATEREQUEST']._serialized_end=34825 + _globals['_REPLICATECONFIRMEDMESSAGEINFO']._serialized_start=34827 + _globals['_REPLICATECONFIRMEDMESSAGEINFO']._serialized_end=34887 + _globals['_REPLICATERESPONSE']._serialized_start=34889 + _globals['_REPLICATERESPONSE']._serialized_end=35016 + _globals['_MILVUSSERVICE']._serialized_start=35506 + _globals['_MILVUSSERVICE']._serialized_end=47125 + _globals['_PROXYSERVICE']._serialized_start=47127 + _globals['_PROXYSERVICE']._serialized_end=47244 # @@protoc_insertion_point(module_scope) diff --git a/pymilvus/grpc_gen/milvus_pb2.pyi b/pymilvus/grpc_gen/milvus_pb2.pyi new file mode 100644 index 000000000..40d68ccdf --- /dev/null +++ b/pymilvus/grpc_gen/milvus_pb2.pyi @@ -0,0 +1,2710 @@ +from . import common_pb2 as _common_pb2 +from . import rg_pb2 as _rg_pb2 +from . import schema_pb2 as _schema_pb2 +from . import feder_pb2 as _feder_pb2 +from . import msg_pb2 as _msg_pb2 +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ShowType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + All: _ClassVar[ShowType] + InMemory: _ClassVar[ShowType] + +class OperatePrivilegeGroupType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + AddPrivilegesToGroup: _ClassVar[OperatePrivilegeGroupType] + RemovePrivilegesFromGroup: _ClassVar[OperatePrivilegeGroupType] + +class OperateUserRoleType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + AddUserToRole: _ClassVar[OperateUserRoleType] + RemoveUserFromRole: _ClassVar[OperateUserRoleType] + +class PrivilegeLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Cluster: _ClassVar[PrivilegeLevel] + Database: _ClassVar[PrivilegeLevel] + Collection: _ClassVar[PrivilegeLevel] + +class OperatePrivilegeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Grant: _ClassVar[OperatePrivilegeType] + Revoke: _ClassVar[OperatePrivilegeType] + +class QuotaState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Unknown: _ClassVar[QuotaState] + ReadLimited: _ClassVar[QuotaState] + WriteLimited: _ClassVar[QuotaState] + DenyToRead: _ClassVar[QuotaState] + DenyToWrite: _ClassVar[QuotaState] + DenyToDDL: _ClassVar[QuotaState] + +class RowPolicyAction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Query: _ClassVar[RowPolicyAction] + Search: _ClassVar[RowPolicyAction] + Insert: _ClassVar[RowPolicyAction] + Delete: _ClassVar[RowPolicyAction] + Upsert: _ClassVar[RowPolicyAction] +All: ShowType +InMemory: ShowType +AddPrivilegesToGroup: OperatePrivilegeGroupType +RemovePrivilegesFromGroup: OperatePrivilegeGroupType +AddUserToRole: OperateUserRoleType +RemoveUserFromRole: OperateUserRoleType +Cluster: PrivilegeLevel +Database: PrivilegeLevel +Collection: PrivilegeLevel +Grant: OperatePrivilegeType +Revoke: OperatePrivilegeType +Unknown: QuotaState +ReadLimited: QuotaState +WriteLimited: QuotaState +DenyToRead: QuotaState +DenyToWrite: QuotaState +DenyToDDL: QuotaState +Query: RowPolicyAction +Search: RowPolicyAction +Insert: RowPolicyAction +Delete: RowPolicyAction +Upsert: RowPolicyAction +MILVUS_EXT_OBJ_FIELD_NUMBER: _ClassVar[int] +milvus_ext_obj: _descriptor.FieldDescriptor + +class CreateAliasRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "alias") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + ALIAS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + alias: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., alias: _Optional[str] = ...) -> None: ... + +class DropAliasRequest(_message.Message): + __slots__ = ("base", "db_name", "alias") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + ALIAS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + alias: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., alias: _Optional[str] = ...) -> None: ... + +class AlterAliasRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "alias") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + ALIAS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + alias: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., alias: _Optional[str] = ...) -> None: ... + +class DescribeAliasRequest(_message.Message): + __slots__ = ("base", "db_name", "alias") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + ALIAS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + alias: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., alias: _Optional[str] = ...) -> None: ... + +class DescribeAliasResponse(_message.Message): + __slots__ = ("status", "db_name", "alias", "collection") + STATUS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + ALIAS_FIELD_NUMBER: _ClassVar[int] + COLLECTION_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + db_name: str + alias: str + collection: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., db_name: _Optional[str] = ..., alias: _Optional[str] = ..., collection: _Optional[str] = ...) -> None: ... + +class ListAliasesRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class ListAliasesResponse(_message.Message): + __slots__ = ("status", "db_name", "collection_name", "aliases") + STATUS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + ALIASES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + db_name: str + collection_name: str + aliases: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., aliases: _Optional[_Iterable[str]] = ...) -> None: ... + +class CreateCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "schema", "shards_num", "consistency_level", "properties", "num_partitions") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + SHARDS_NUM_FIELD_NUMBER: _ClassVar[int] + CONSISTENCY_LEVEL_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + NUM_PARTITIONS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + schema: bytes + shards_num: int + consistency_level: _common_pb2.ConsistencyLevel + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + num_partitions: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., schema: _Optional[bytes] = ..., shards_num: _Optional[int] = ..., consistency_level: _Optional[_Union[_common_pb2.ConsistencyLevel, str]] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., num_partitions: _Optional[int] = ...) -> None: ... + +class DropCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class AlterCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "properties", "delete_keys") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + DELETE_KEYS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + delete_keys: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., delete_keys: _Optional[_Iterable[str]] = ...) -> None: ... + +class AlterCollectionFieldRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "field_name", "properties", "delete_keys") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + DELETE_KEYS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + field_name: str + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + delete_keys: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., delete_keys: _Optional[_Iterable[str]] = ...) -> None: ... + +class HasCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "time_stamp") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + TIME_STAMP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + time_stamp: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., time_stamp: _Optional[int] = ...) -> None: ... + +class BoolResponse(_message.Message): + __slots__ = ("status", "value") + STATUS_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + value: bool + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., value: bool = ...) -> None: ... + +class StringResponse(_message.Message): + __slots__ = ("status", "value") + STATUS_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + value: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., value: _Optional[str] = ...) -> None: ... + +class DescribeCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "time_stamp") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + TIME_STAMP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + time_stamp: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., time_stamp: _Optional[int] = ...) -> None: ... + +class DescribeCollectionResponse(_message.Message): + __slots__ = ("status", "schema", "collectionID", "virtual_channel_names", "physical_channel_names", "created_timestamp", "created_utc_timestamp", "shards_num", "aliases", "start_positions", "consistency_level", "collection_name", "properties", "db_name", "num_partitions", "db_id", "request_time", "update_timestamp", "update_timestamp_str") + STATUS_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + VIRTUAL_CHANNEL_NAMES_FIELD_NUMBER: _ClassVar[int] + PHYSICAL_CHANNEL_NAMES_FIELD_NUMBER: _ClassVar[int] + CREATED_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + CREATED_UTC_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + SHARDS_NUM_FIELD_NUMBER: _ClassVar[int] + ALIASES_FIELD_NUMBER: _ClassVar[int] + START_POSITIONS_FIELD_NUMBER: _ClassVar[int] + CONSISTENCY_LEVEL_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + NUM_PARTITIONS_FIELD_NUMBER: _ClassVar[int] + DB_ID_FIELD_NUMBER: _ClassVar[int] + REQUEST_TIME_FIELD_NUMBER: _ClassVar[int] + UPDATE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + UPDATE_TIMESTAMP_STR_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + schema: _schema_pb2.CollectionSchema + collectionID: int + virtual_channel_names: _containers.RepeatedScalarFieldContainer[str] + physical_channel_names: _containers.RepeatedScalarFieldContainer[str] + created_timestamp: int + created_utc_timestamp: int + shards_num: int + aliases: _containers.RepeatedScalarFieldContainer[str] + start_positions: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyDataPair] + consistency_level: _common_pb2.ConsistencyLevel + collection_name: str + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + db_name: str + num_partitions: int + db_id: int + request_time: int + update_timestamp: int + update_timestamp_str: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., schema: _Optional[_Union[_schema_pb2.CollectionSchema, _Mapping]] = ..., collectionID: _Optional[int] = ..., virtual_channel_names: _Optional[_Iterable[str]] = ..., physical_channel_names: _Optional[_Iterable[str]] = ..., created_timestamp: _Optional[int] = ..., created_utc_timestamp: _Optional[int] = ..., shards_num: _Optional[int] = ..., aliases: _Optional[_Iterable[str]] = ..., start_positions: _Optional[_Iterable[_Union[_common_pb2.KeyDataPair, _Mapping]]] = ..., consistency_level: _Optional[_Union[_common_pb2.ConsistencyLevel, str]] = ..., collection_name: _Optional[str] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., db_name: _Optional[str] = ..., num_partitions: _Optional[int] = ..., db_id: _Optional[int] = ..., request_time: _Optional[int] = ..., update_timestamp: _Optional[int] = ..., update_timestamp_str: _Optional[str] = ...) -> None: ... + +class BatchDescribeCollectionRequest(_message.Message): + __slots__ = ("db_name", "collection_name", "collectionID") + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + db_name: str + collection_name: _containers.RepeatedScalarFieldContainer[str] + collectionID: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, db_name: _Optional[str] = ..., collection_name: _Optional[_Iterable[str]] = ..., collectionID: _Optional[_Iterable[int]] = ...) -> None: ... + +class BatchDescribeCollectionResponse(_message.Message): + __slots__ = ("status", "responses") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESPONSES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + responses: _containers.RepeatedCompositeFieldContainer[DescribeCollectionResponse] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., responses: _Optional[_Iterable[_Union[DescribeCollectionResponse, _Mapping]]] = ...) -> None: ... + +class LoadCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "replica_number", "resource_groups", "refresh", "load_fields", "skip_load_dynamic_field", "load_params") + class LoadParamsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + REPLICA_NUMBER_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUPS_FIELD_NUMBER: _ClassVar[int] + REFRESH_FIELD_NUMBER: _ClassVar[int] + LOAD_FIELDS_FIELD_NUMBER: _ClassVar[int] + SKIP_LOAD_DYNAMIC_FIELD_FIELD_NUMBER: _ClassVar[int] + LOAD_PARAMS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + replica_number: int + resource_groups: _containers.RepeatedScalarFieldContainer[str] + refresh: bool + load_fields: _containers.RepeatedScalarFieldContainer[str] + skip_load_dynamic_field: bool + load_params: _containers.ScalarMap[str, str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., replica_number: _Optional[int] = ..., resource_groups: _Optional[_Iterable[str]] = ..., refresh: bool = ..., load_fields: _Optional[_Iterable[str]] = ..., skip_load_dynamic_field: bool = ..., load_params: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class ReleaseCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class GetStatisticsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_names", "guarantee_timestamp") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + GUARANTEE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + guarantee_timestamp: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ..., guarantee_timestamp: _Optional[int] = ...) -> None: ... + +class GetStatisticsResponse(_message.Message): + __slots__ = ("status", "stats") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + stats: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., stats: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class GetCollectionStatisticsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class GetCollectionStatisticsResponse(_message.Message): + __slots__ = ("status", "stats") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + stats: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., stats: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class ShowCollectionsRequest(_message.Message): + __slots__ = ("base", "db_name", "time_stamp", "type", "collection_names") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + TIME_STAMP_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAMES_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + time_stamp: int + type: ShowType + collection_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., time_stamp: _Optional[int] = ..., type: _Optional[_Union[ShowType, str]] = ..., collection_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class ShowCollectionsResponse(_message.Message): + __slots__ = ("status", "collection_names", "collection_ids", "created_timestamps", "created_utc_timestamps", "inMemory_percentages", "query_service_available", "shards_num") + STATUS_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAMES_FIELD_NUMBER: _ClassVar[int] + COLLECTION_IDS_FIELD_NUMBER: _ClassVar[int] + CREATED_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + CREATED_UTC_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + INMEMORY_PERCENTAGES_FIELD_NUMBER: _ClassVar[int] + QUERY_SERVICE_AVAILABLE_FIELD_NUMBER: _ClassVar[int] + SHARDS_NUM_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + collection_names: _containers.RepeatedScalarFieldContainer[str] + collection_ids: _containers.RepeatedScalarFieldContainer[int] + created_timestamps: _containers.RepeatedScalarFieldContainer[int] + created_utc_timestamps: _containers.RepeatedScalarFieldContainer[int] + inMemory_percentages: _containers.RepeatedScalarFieldContainer[int] + query_service_available: _containers.RepeatedScalarFieldContainer[bool] + shards_num: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., collection_names: _Optional[_Iterable[str]] = ..., collection_ids: _Optional[_Iterable[int]] = ..., created_timestamps: _Optional[_Iterable[int]] = ..., created_utc_timestamps: _Optional[_Iterable[int]] = ..., inMemory_percentages: _Optional[_Iterable[int]] = ..., query_service_available: _Optional[_Iterable[bool]] = ..., shards_num: _Optional[_Iterable[int]] = ...) -> None: ... + +class CreatePartitionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ...) -> None: ... + +class DropPartitionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ...) -> None: ... + +class HasPartitionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ...) -> None: ... + +class LoadPartitionsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_names", "replica_number", "resource_groups", "refresh", "load_fields", "skip_load_dynamic_field", "load_params") + class LoadParamsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + REPLICA_NUMBER_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUPS_FIELD_NUMBER: _ClassVar[int] + REFRESH_FIELD_NUMBER: _ClassVar[int] + LOAD_FIELDS_FIELD_NUMBER: _ClassVar[int] + SKIP_LOAD_DYNAMIC_FIELD_FIELD_NUMBER: _ClassVar[int] + LOAD_PARAMS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + replica_number: int + resource_groups: _containers.RepeatedScalarFieldContainer[str] + refresh: bool + load_fields: _containers.RepeatedScalarFieldContainer[str] + skip_load_dynamic_field: bool + load_params: _containers.ScalarMap[str, str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ..., replica_number: _Optional[int] = ..., resource_groups: _Optional[_Iterable[str]] = ..., refresh: bool = ..., load_fields: _Optional[_Iterable[str]] = ..., skip_load_dynamic_field: bool = ..., load_params: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class ReleasePartitionsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_names") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetPartitionStatisticsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ...) -> None: ... + +class GetPartitionStatisticsResponse(_message.Message): + __slots__ = ("status", "stats") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + stats: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., stats: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class ShowPartitionsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "partition_names", "type") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + partition_names: _containers.RepeatedScalarFieldContainer[str] + type: ShowType + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., partition_names: _Optional[_Iterable[str]] = ..., type: _Optional[_Union[ShowType, str]] = ...) -> None: ... + +class ShowPartitionsResponse(_message.Message): + __slots__ = ("status", "partition_names", "partitionIDs", "created_timestamps", "created_utc_timestamps", "inMemory_percentages") + STATUS_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + PARTITIONIDS_FIELD_NUMBER: _ClassVar[int] + CREATED_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + CREATED_UTC_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + INMEMORY_PERCENTAGES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + partition_names: _containers.RepeatedScalarFieldContainer[str] + partitionIDs: _containers.RepeatedScalarFieldContainer[int] + created_timestamps: _containers.RepeatedScalarFieldContainer[int] + created_utc_timestamps: _containers.RepeatedScalarFieldContainer[int] + inMemory_percentages: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., partition_names: _Optional[_Iterable[str]] = ..., partitionIDs: _Optional[_Iterable[int]] = ..., created_timestamps: _Optional[_Iterable[int]] = ..., created_utc_timestamps: _Optional[_Iterable[int]] = ..., inMemory_percentages: _Optional[_Iterable[int]] = ...) -> None: ... + +class DescribeSegmentRequest(_message.Message): + __slots__ = ("base", "collectionID", "segmentID") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collectionID: int + segmentID: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collectionID: _Optional[int] = ..., segmentID: _Optional[int] = ...) -> None: ... + +class DescribeSegmentResponse(_message.Message): + __slots__ = ("status", "indexID", "buildID", "enable_index", "fieldID") + STATUS_FIELD_NUMBER: _ClassVar[int] + INDEXID_FIELD_NUMBER: _ClassVar[int] + BUILDID_FIELD_NUMBER: _ClassVar[int] + ENABLE_INDEX_FIELD_NUMBER: _ClassVar[int] + FIELDID_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + indexID: int + buildID: int + enable_index: bool + fieldID: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., indexID: _Optional[int] = ..., buildID: _Optional[int] = ..., enable_index: bool = ..., fieldID: _Optional[int] = ...) -> None: ... + +class ShowSegmentsRequest(_message.Message): + __slots__ = ("base", "collectionID", "partitionID") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collectionID: int + partitionID: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ...) -> None: ... + +class ShowSegmentsResponse(_message.Message): + __slots__ = ("status", "segmentIDs") + STATUS_FIELD_NUMBER: _ClassVar[int] + SEGMENTIDS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + segmentIDs: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., segmentIDs: _Optional[_Iterable[int]] = ...) -> None: ... + +class CreateIndexRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "field_name", "extra_params", "index_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + EXTRA_PARAMS_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + field_name: str + extra_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + index_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., extra_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., index_name: _Optional[str] = ...) -> None: ... + +class AlterIndexRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "index_name", "extra_params", "delete_keys") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + EXTRA_PARAMS_FIELD_NUMBER: _ClassVar[int] + DELETE_KEYS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + index_name: str + extra_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + delete_keys: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., index_name: _Optional[str] = ..., extra_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., delete_keys: _Optional[_Iterable[str]] = ...) -> None: ... + +class DescribeIndexRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "field_name", "index_name", "timestamp") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + field_name: str + index_name: str + timestamp: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., index_name: _Optional[str] = ..., timestamp: _Optional[int] = ...) -> None: ... + +class IndexDescription(_message.Message): + __slots__ = ("index_name", "indexID", "params", "field_name", "indexed_rows", "total_rows", "state", "index_state_fail_reason", "pending_index_rows", "min_index_version", "max_index_version") + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + INDEXID_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + INDEXED_ROWS_FIELD_NUMBER: _ClassVar[int] + TOTAL_ROWS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + INDEX_STATE_FAIL_REASON_FIELD_NUMBER: _ClassVar[int] + PENDING_INDEX_ROWS_FIELD_NUMBER: _ClassVar[int] + MIN_INDEX_VERSION_FIELD_NUMBER: _ClassVar[int] + MAX_INDEX_VERSION_FIELD_NUMBER: _ClassVar[int] + index_name: str + indexID: int + params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + field_name: str + indexed_rows: int + total_rows: int + state: _common_pb2.IndexState + index_state_fail_reason: str + pending_index_rows: int + min_index_version: int + max_index_version: int + def __init__(self, index_name: _Optional[str] = ..., indexID: _Optional[int] = ..., params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., field_name: _Optional[str] = ..., indexed_rows: _Optional[int] = ..., total_rows: _Optional[int] = ..., state: _Optional[_Union[_common_pb2.IndexState, str]] = ..., index_state_fail_reason: _Optional[str] = ..., pending_index_rows: _Optional[int] = ..., min_index_version: _Optional[int] = ..., max_index_version: _Optional[int] = ...) -> None: ... + +class DescribeIndexResponse(_message.Message): + __slots__ = ("status", "index_descriptions") + STATUS_FIELD_NUMBER: _ClassVar[int] + INDEX_DESCRIPTIONS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + index_descriptions: _containers.RepeatedCompositeFieldContainer[IndexDescription] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., index_descriptions: _Optional[_Iterable[_Union[IndexDescription, _Mapping]]] = ...) -> None: ... + +class GetIndexBuildProgressRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "field_name", "index_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + field_name: str + index_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., index_name: _Optional[str] = ...) -> None: ... + +class GetIndexBuildProgressResponse(_message.Message): + __slots__ = ("status", "indexed_rows", "total_rows") + STATUS_FIELD_NUMBER: _ClassVar[int] + INDEXED_ROWS_FIELD_NUMBER: _ClassVar[int] + TOTAL_ROWS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + indexed_rows: int + total_rows: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., indexed_rows: _Optional[int] = ..., total_rows: _Optional[int] = ...) -> None: ... + +class GetIndexStateRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "field_name", "index_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + field_name: str + index_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., index_name: _Optional[str] = ...) -> None: ... + +class GetIndexStateResponse(_message.Message): + __slots__ = ("status", "state", "fail_reason") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + FAIL_REASON_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + state: _common_pb2.IndexState + fail_reason: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., state: _Optional[_Union[_common_pb2.IndexState, str]] = ..., fail_reason: _Optional[str] = ...) -> None: ... + +class DropIndexRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "field_name", "index_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + field_name: str + index_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., index_name: _Optional[str] = ...) -> None: ... + +class InsertRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name", "fields_data", "hash_keys", "num_rows", "schema_timestamp", "namespace") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELDS_DATA_FIELD_NUMBER: _ClassVar[int] + HASH_KEYS_FIELD_NUMBER: _ClassVar[int] + NUM_ROWS_FIELD_NUMBER: _ClassVar[int] + SCHEMA_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + fields_data: _containers.RepeatedCompositeFieldContainer[_schema_pb2.FieldData] + hash_keys: _containers.RepeatedScalarFieldContainer[int] + num_rows: int + schema_timestamp: int + namespace: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., fields_data: _Optional[_Iterable[_Union[_schema_pb2.FieldData, _Mapping]]] = ..., hash_keys: _Optional[_Iterable[int]] = ..., num_rows: _Optional[int] = ..., schema_timestamp: _Optional[int] = ..., namespace: _Optional[str] = ...) -> None: ... + +class AddCollectionFieldRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "schema") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + schema: bytes + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., schema: _Optional[bytes] = ...) -> None: ... + +class AddCollectionFunctionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "functionSchema") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + FUNCTIONSCHEMA_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + functionSchema: _schema_pb2.FunctionSchema + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., functionSchema: _Optional[_Union[_schema_pb2.FunctionSchema, _Mapping]] = ...) -> None: ... + +class AlterCollectionFunctionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "function_name", "functionSchema") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + FUNCTION_NAME_FIELD_NUMBER: _ClassVar[int] + FUNCTIONSCHEMA_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + function_name: str + functionSchema: _schema_pb2.FunctionSchema + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., function_name: _Optional[str] = ..., functionSchema: _Optional[_Union[_schema_pb2.FunctionSchema, _Mapping]] = ...) -> None: ... + +class DropCollectionFunctionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "function_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + FUNCTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + function_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., function_name: _Optional[str] = ...) -> None: ... + +class UpsertRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name", "fields_data", "hash_keys", "num_rows", "schema_timestamp", "partial_update", "namespace") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELDS_DATA_FIELD_NUMBER: _ClassVar[int] + HASH_KEYS_FIELD_NUMBER: _ClassVar[int] + NUM_ROWS_FIELD_NUMBER: _ClassVar[int] + SCHEMA_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + PARTIAL_UPDATE_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + fields_data: _containers.RepeatedCompositeFieldContainer[_schema_pb2.FieldData] + hash_keys: _containers.RepeatedScalarFieldContainer[int] + num_rows: int + schema_timestamp: int + partial_update: bool + namespace: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., fields_data: _Optional[_Iterable[_Union[_schema_pb2.FieldData, _Mapping]]] = ..., hash_keys: _Optional[_Iterable[int]] = ..., num_rows: _Optional[int] = ..., schema_timestamp: _Optional[int] = ..., partial_update: bool = ..., namespace: _Optional[str] = ...) -> None: ... + +class MutationResult(_message.Message): + __slots__ = ("status", "IDs", "succ_index", "err_index", "acknowledged", "insert_cnt", "delete_cnt", "upsert_cnt", "timestamp") + STATUS_FIELD_NUMBER: _ClassVar[int] + IDS_FIELD_NUMBER: _ClassVar[int] + SUCC_INDEX_FIELD_NUMBER: _ClassVar[int] + ERR_INDEX_FIELD_NUMBER: _ClassVar[int] + ACKNOWLEDGED_FIELD_NUMBER: _ClassVar[int] + INSERT_CNT_FIELD_NUMBER: _ClassVar[int] + DELETE_CNT_FIELD_NUMBER: _ClassVar[int] + UPSERT_CNT_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + IDs: _schema_pb2.IDs + succ_index: _containers.RepeatedScalarFieldContainer[int] + err_index: _containers.RepeatedScalarFieldContainer[int] + acknowledged: bool + insert_cnt: int + delete_cnt: int + upsert_cnt: int + timestamp: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., IDs: _Optional[_Union[_schema_pb2.IDs, _Mapping]] = ..., succ_index: _Optional[_Iterable[int]] = ..., err_index: _Optional[_Iterable[int]] = ..., acknowledged: bool = ..., insert_cnt: _Optional[int] = ..., delete_cnt: _Optional[int] = ..., upsert_cnt: _Optional[int] = ..., timestamp: _Optional[int] = ...) -> None: ... + +class DeleteRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name", "expr", "hash_keys", "consistency_level", "expr_template_values") + class ExprTemplateValuesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _schema_pb2.TemplateValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_schema_pb2.TemplateValue, _Mapping]] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + EXPR_FIELD_NUMBER: _ClassVar[int] + HASH_KEYS_FIELD_NUMBER: _ClassVar[int] + CONSISTENCY_LEVEL_FIELD_NUMBER: _ClassVar[int] + EXPR_TEMPLATE_VALUES_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + expr: str + hash_keys: _containers.RepeatedScalarFieldContainer[int] + consistency_level: _common_pb2.ConsistencyLevel + expr_template_values: _containers.MessageMap[str, _schema_pb2.TemplateValue] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., expr: _Optional[str] = ..., hash_keys: _Optional[_Iterable[int]] = ..., consistency_level: _Optional[_Union[_common_pb2.ConsistencyLevel, str]] = ..., expr_template_values: _Optional[_Mapping[str, _schema_pb2.TemplateValue]] = ...) -> None: ... + +class SubSearchRequest(_message.Message): + __slots__ = ("dsl", "placeholder_group", "dsl_type", "search_params", "nq", "expr_template_values", "namespace") + class ExprTemplateValuesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _schema_pb2.TemplateValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_schema_pb2.TemplateValue, _Mapping]] = ...) -> None: ... + DSL_FIELD_NUMBER: _ClassVar[int] + PLACEHOLDER_GROUP_FIELD_NUMBER: _ClassVar[int] + DSL_TYPE_FIELD_NUMBER: _ClassVar[int] + SEARCH_PARAMS_FIELD_NUMBER: _ClassVar[int] + NQ_FIELD_NUMBER: _ClassVar[int] + EXPR_TEMPLATE_VALUES_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + dsl: str + placeholder_group: bytes + dsl_type: _common_pb2.DslType + search_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + nq: int + expr_template_values: _containers.MessageMap[str, _schema_pb2.TemplateValue] + namespace: str + def __init__(self, dsl: _Optional[str] = ..., placeholder_group: _Optional[bytes] = ..., dsl_type: _Optional[_Union[_common_pb2.DslType, str]] = ..., search_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., nq: _Optional[int] = ..., expr_template_values: _Optional[_Mapping[str, _schema_pb2.TemplateValue]] = ..., namespace: _Optional[str] = ...) -> None: ... + +class SearchRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_names", "dsl", "placeholder_group", "dsl_type", "output_fields", "search_params", "travel_timestamp", "guarantee_timestamp", "nq", "not_return_all_meta", "consistency_level", "use_default_consistency", "search_by_primary_keys", "sub_reqs", "expr_template_values", "function_score", "namespace", "highlighter") + class ExprTemplateValuesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _schema_pb2.TemplateValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_schema_pb2.TemplateValue, _Mapping]] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + DSL_FIELD_NUMBER: _ClassVar[int] + PLACEHOLDER_GROUP_FIELD_NUMBER: _ClassVar[int] + DSL_TYPE_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELDS_FIELD_NUMBER: _ClassVar[int] + SEARCH_PARAMS_FIELD_NUMBER: _ClassVar[int] + TRAVEL_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + GUARANTEE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + NQ_FIELD_NUMBER: _ClassVar[int] + NOT_RETURN_ALL_META_FIELD_NUMBER: _ClassVar[int] + CONSISTENCY_LEVEL_FIELD_NUMBER: _ClassVar[int] + USE_DEFAULT_CONSISTENCY_FIELD_NUMBER: _ClassVar[int] + SEARCH_BY_PRIMARY_KEYS_FIELD_NUMBER: _ClassVar[int] + SUB_REQS_FIELD_NUMBER: _ClassVar[int] + EXPR_TEMPLATE_VALUES_FIELD_NUMBER: _ClassVar[int] + FUNCTION_SCORE_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + HIGHLIGHTER_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + dsl: str + placeholder_group: bytes + dsl_type: _common_pb2.DslType + output_fields: _containers.RepeatedScalarFieldContainer[str] + search_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + travel_timestamp: int + guarantee_timestamp: int + nq: int + not_return_all_meta: bool + consistency_level: _common_pb2.ConsistencyLevel + use_default_consistency: bool + search_by_primary_keys: bool + sub_reqs: _containers.RepeatedCompositeFieldContainer[SubSearchRequest] + expr_template_values: _containers.MessageMap[str, _schema_pb2.TemplateValue] + function_score: _schema_pb2.FunctionScore + namespace: str + highlighter: _common_pb2.Highlighter + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ..., dsl: _Optional[str] = ..., placeholder_group: _Optional[bytes] = ..., dsl_type: _Optional[_Union[_common_pb2.DslType, str]] = ..., output_fields: _Optional[_Iterable[str]] = ..., search_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., travel_timestamp: _Optional[int] = ..., guarantee_timestamp: _Optional[int] = ..., nq: _Optional[int] = ..., not_return_all_meta: bool = ..., consistency_level: _Optional[_Union[_common_pb2.ConsistencyLevel, str]] = ..., use_default_consistency: bool = ..., search_by_primary_keys: bool = ..., sub_reqs: _Optional[_Iterable[_Union[SubSearchRequest, _Mapping]]] = ..., expr_template_values: _Optional[_Mapping[str, _schema_pb2.TemplateValue]] = ..., function_score: _Optional[_Union[_schema_pb2.FunctionScore, _Mapping]] = ..., namespace: _Optional[str] = ..., highlighter: _Optional[_Union[_common_pb2.Highlighter, _Mapping]] = ...) -> None: ... + +class Hits(_message.Message): + __slots__ = ("IDs", "row_data", "scores") + IDS_FIELD_NUMBER: _ClassVar[int] + ROW_DATA_FIELD_NUMBER: _ClassVar[int] + SCORES_FIELD_NUMBER: _ClassVar[int] + IDs: _containers.RepeatedScalarFieldContainer[int] + row_data: _containers.RepeatedScalarFieldContainer[bytes] + scores: _containers.RepeatedScalarFieldContainer[float] + def __init__(self, IDs: _Optional[_Iterable[int]] = ..., row_data: _Optional[_Iterable[bytes]] = ..., scores: _Optional[_Iterable[float]] = ...) -> None: ... + +class SearchResults(_message.Message): + __slots__ = ("status", "results", "collection_name", "session_ts") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESULTS_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + SESSION_TS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + results: _schema_pb2.SearchResultData + collection_name: str + session_ts: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., results: _Optional[_Union[_schema_pb2.SearchResultData, _Mapping]] = ..., collection_name: _Optional[str] = ..., session_ts: _Optional[int] = ...) -> None: ... + +class HybridSearchRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_names", "requests", "rank_params", "travel_timestamp", "guarantee_timestamp", "not_return_all_meta", "output_fields", "consistency_level", "use_default_consistency", "function_score", "namespace") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + REQUESTS_FIELD_NUMBER: _ClassVar[int] + RANK_PARAMS_FIELD_NUMBER: _ClassVar[int] + TRAVEL_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + GUARANTEE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + NOT_RETURN_ALL_META_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELDS_FIELD_NUMBER: _ClassVar[int] + CONSISTENCY_LEVEL_FIELD_NUMBER: _ClassVar[int] + USE_DEFAULT_CONSISTENCY_FIELD_NUMBER: _ClassVar[int] + FUNCTION_SCORE_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + requests: _containers.RepeatedCompositeFieldContainer[SearchRequest] + rank_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + travel_timestamp: int + guarantee_timestamp: int + not_return_all_meta: bool + output_fields: _containers.RepeatedScalarFieldContainer[str] + consistency_level: _common_pb2.ConsistencyLevel + use_default_consistency: bool + function_score: _schema_pb2.FunctionScore + namespace: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ..., requests: _Optional[_Iterable[_Union[SearchRequest, _Mapping]]] = ..., rank_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., travel_timestamp: _Optional[int] = ..., guarantee_timestamp: _Optional[int] = ..., not_return_all_meta: bool = ..., output_fields: _Optional[_Iterable[str]] = ..., consistency_level: _Optional[_Union[_common_pb2.ConsistencyLevel, str]] = ..., use_default_consistency: bool = ..., function_score: _Optional[_Union[_schema_pb2.FunctionScore, _Mapping]] = ..., namespace: _Optional[str] = ...) -> None: ... + +class FlushRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_names") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAMES_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class FlushResponse(_message.Message): + __slots__ = ("status", "db_name", "coll_segIDs", "flush_coll_segIDs", "coll_seal_times", "coll_flush_ts", "channel_cps") + class CollSegIDsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _schema_pb2.LongArray + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_schema_pb2.LongArray, _Mapping]] = ...) -> None: ... + class FlushCollSegIDsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _schema_pb2.LongArray + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_schema_pb2.LongArray, _Mapping]] = ...) -> None: ... + class CollSealTimesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + class CollFlushTsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + class ChannelCpsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _msg_pb2.MsgPosition + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_msg_pb2.MsgPosition, _Mapping]] = ...) -> None: ... + STATUS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLL_SEGIDS_FIELD_NUMBER: _ClassVar[int] + FLUSH_COLL_SEGIDS_FIELD_NUMBER: _ClassVar[int] + COLL_SEAL_TIMES_FIELD_NUMBER: _ClassVar[int] + COLL_FLUSH_TS_FIELD_NUMBER: _ClassVar[int] + CHANNEL_CPS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + db_name: str + coll_segIDs: _containers.MessageMap[str, _schema_pb2.LongArray] + flush_coll_segIDs: _containers.MessageMap[str, _schema_pb2.LongArray] + coll_seal_times: _containers.ScalarMap[str, int] + coll_flush_ts: _containers.ScalarMap[str, int] + channel_cps: _containers.MessageMap[str, _msg_pb2.MsgPosition] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., db_name: _Optional[str] = ..., coll_segIDs: _Optional[_Mapping[str, _schema_pb2.LongArray]] = ..., flush_coll_segIDs: _Optional[_Mapping[str, _schema_pb2.LongArray]] = ..., coll_seal_times: _Optional[_Mapping[str, int]] = ..., coll_flush_ts: _Optional[_Mapping[str, int]] = ..., channel_cps: _Optional[_Mapping[str, _msg_pb2.MsgPosition]] = ...) -> None: ... + +class QueryRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "expr", "output_fields", "partition_names", "travel_timestamp", "guarantee_timestamp", "query_params", "not_return_all_meta", "consistency_level", "use_default_consistency", "expr_template_values", "namespace") + class ExprTemplateValuesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _schema_pb2.TemplateValue + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_schema_pb2.TemplateValue, _Mapping]] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + EXPR_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELDS_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + TRAVEL_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + GUARANTEE_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + QUERY_PARAMS_FIELD_NUMBER: _ClassVar[int] + NOT_RETURN_ALL_META_FIELD_NUMBER: _ClassVar[int] + CONSISTENCY_LEVEL_FIELD_NUMBER: _ClassVar[int] + USE_DEFAULT_CONSISTENCY_FIELD_NUMBER: _ClassVar[int] + EXPR_TEMPLATE_VALUES_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + expr: str + output_fields: _containers.RepeatedScalarFieldContainer[str] + partition_names: _containers.RepeatedScalarFieldContainer[str] + travel_timestamp: int + guarantee_timestamp: int + query_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + not_return_all_meta: bool + consistency_level: _common_pb2.ConsistencyLevel + use_default_consistency: bool + expr_template_values: _containers.MessageMap[str, _schema_pb2.TemplateValue] + namespace: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., expr: _Optional[str] = ..., output_fields: _Optional[_Iterable[str]] = ..., partition_names: _Optional[_Iterable[str]] = ..., travel_timestamp: _Optional[int] = ..., guarantee_timestamp: _Optional[int] = ..., query_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., not_return_all_meta: bool = ..., consistency_level: _Optional[_Union[_common_pb2.ConsistencyLevel, str]] = ..., use_default_consistency: bool = ..., expr_template_values: _Optional[_Mapping[str, _schema_pb2.TemplateValue]] = ..., namespace: _Optional[str] = ...) -> None: ... + +class QueryResults(_message.Message): + __slots__ = ("status", "fields_data", "collection_name", "output_fields", "session_ts", "primary_field_name") + STATUS_FIELD_NUMBER: _ClassVar[int] + FIELDS_DATA_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELDS_FIELD_NUMBER: _ClassVar[int] + SESSION_TS_FIELD_NUMBER: _ClassVar[int] + PRIMARY_FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + fields_data: _containers.RepeatedCompositeFieldContainer[_schema_pb2.FieldData] + collection_name: str + output_fields: _containers.RepeatedScalarFieldContainer[str] + session_ts: int + primary_field_name: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., fields_data: _Optional[_Iterable[_Union[_schema_pb2.FieldData, _Mapping]]] = ..., collection_name: _Optional[str] = ..., output_fields: _Optional[_Iterable[str]] = ..., session_ts: _Optional[int] = ..., primary_field_name: _Optional[str] = ...) -> None: ... + +class QueryCursor(_message.Message): + __slots__ = ("session_ts", "str_pk", "int_pk") + SESSION_TS_FIELD_NUMBER: _ClassVar[int] + STR_PK_FIELD_NUMBER: _ClassVar[int] + INT_PK_FIELD_NUMBER: _ClassVar[int] + session_ts: int + str_pk: str + int_pk: int + def __init__(self, session_ts: _Optional[int] = ..., str_pk: _Optional[str] = ..., int_pk: _Optional[int] = ...) -> None: ... + +class VectorIDs(_message.Message): + __slots__ = ("collection_name", "field_name", "id_array", "partition_names") + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + ID_ARRAY_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + collection_name: str + field_name: str + id_array: _schema_pb2.IDs + partition_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., id_array: _Optional[_Union[_schema_pb2.IDs, _Mapping]] = ..., partition_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class VectorsArray(_message.Message): + __slots__ = ("id_array", "data_array") + ID_ARRAY_FIELD_NUMBER: _ClassVar[int] + DATA_ARRAY_FIELD_NUMBER: _ClassVar[int] + id_array: VectorIDs + data_array: _schema_pb2.VectorField + def __init__(self, id_array: _Optional[_Union[VectorIDs, _Mapping]] = ..., data_array: _Optional[_Union[_schema_pb2.VectorField, _Mapping]] = ...) -> None: ... + +class CalcDistanceRequest(_message.Message): + __slots__ = ("base", "op_left", "op_right", "params") + BASE_FIELD_NUMBER: _ClassVar[int] + OP_LEFT_FIELD_NUMBER: _ClassVar[int] + OP_RIGHT_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + op_left: VectorsArray + op_right: VectorsArray + params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., op_left: _Optional[_Union[VectorsArray, _Mapping]] = ..., op_right: _Optional[_Union[VectorsArray, _Mapping]] = ..., params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class CalcDistanceResults(_message.Message): + __slots__ = ("status", "int_dist", "float_dist") + STATUS_FIELD_NUMBER: _ClassVar[int] + INT_DIST_FIELD_NUMBER: _ClassVar[int] + FLOAT_DIST_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + int_dist: _schema_pb2.IntArray + float_dist: _schema_pb2.FloatArray + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., int_dist: _Optional[_Union[_schema_pb2.IntArray, _Mapping]] = ..., float_dist: _Optional[_Union[_schema_pb2.FloatArray, _Mapping]] = ...) -> None: ... + +class FlushAllTarget(_message.Message): + __slots__ = ("db_name", "collection_names") + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAMES_FIELD_NUMBER: _ClassVar[int] + db_name: str + collection_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, db_name: _Optional[str] = ..., collection_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class FlushAllRequest(_message.Message): + __slots__ = ("base", "db_name", "flush_targets") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + FLUSH_TARGETS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + flush_targets: _containers.RepeatedCompositeFieldContainer[FlushAllTarget] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., flush_targets: _Optional[_Iterable[_Union[FlushAllTarget, _Mapping]]] = ...) -> None: ... + +class FlushAllResponse(_message.Message): + __slots__ = ("status", "flush_all_ts", "flush_results") + STATUS_FIELD_NUMBER: _ClassVar[int] + FLUSH_ALL_TS_FIELD_NUMBER: _ClassVar[int] + FLUSH_RESULTS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + flush_all_ts: int + flush_results: _containers.RepeatedCompositeFieldContainer[FlushAllResult] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., flush_all_ts: _Optional[int] = ..., flush_results: _Optional[_Iterable[_Union[FlushAllResult, _Mapping]]] = ...) -> None: ... + +class FlushAllResult(_message.Message): + __slots__ = ("db_name", "collection_results") + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_RESULTS_FIELD_NUMBER: _ClassVar[int] + db_name: str + collection_results: _containers.RepeatedCompositeFieldContainer[FlushCollectionResult] + def __init__(self, db_name: _Optional[str] = ..., collection_results: _Optional[_Iterable[_Union[FlushCollectionResult, _Mapping]]] = ...) -> None: ... + +class FlushCollectionResult(_message.Message): + __slots__ = ("collection_name", "segment_ids", "flush_segment_ids", "seal_time", "flush_ts", "channel_cps") + class ChannelCpsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _msg_pb2.MsgPosition + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_msg_pb2.MsgPosition, _Mapping]] = ...) -> None: ... + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + SEGMENT_IDS_FIELD_NUMBER: _ClassVar[int] + FLUSH_SEGMENT_IDS_FIELD_NUMBER: _ClassVar[int] + SEAL_TIME_FIELD_NUMBER: _ClassVar[int] + FLUSH_TS_FIELD_NUMBER: _ClassVar[int] + CHANNEL_CPS_FIELD_NUMBER: _ClassVar[int] + collection_name: str + segment_ids: _schema_pb2.LongArray + flush_segment_ids: _schema_pb2.LongArray + seal_time: int + flush_ts: int + channel_cps: _containers.MessageMap[str, _msg_pb2.MsgPosition] + def __init__(self, collection_name: _Optional[str] = ..., segment_ids: _Optional[_Union[_schema_pb2.LongArray, _Mapping]] = ..., flush_segment_ids: _Optional[_Union[_schema_pb2.LongArray, _Mapping]] = ..., seal_time: _Optional[int] = ..., flush_ts: _Optional[int] = ..., channel_cps: _Optional[_Mapping[str, _msg_pb2.MsgPosition]] = ...) -> None: ... + +class PersistentSegmentInfo(_message.Message): + __slots__ = ("segmentID", "collectionID", "partitionID", "num_rows", "state", "level", "is_sorted", "storage_version") + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + NUM_ROWS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + LEVEL_FIELD_NUMBER: _ClassVar[int] + IS_SORTED_FIELD_NUMBER: _ClassVar[int] + STORAGE_VERSION_FIELD_NUMBER: _ClassVar[int] + segmentID: int + collectionID: int + partitionID: int + num_rows: int + state: _common_pb2.SegmentState + level: _common_pb2.SegmentLevel + is_sorted: bool + storage_version: int + def __init__(self, segmentID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ..., num_rows: _Optional[int] = ..., state: _Optional[_Union[_common_pb2.SegmentState, str]] = ..., level: _Optional[_Union[_common_pb2.SegmentLevel, str]] = ..., is_sorted: bool = ..., storage_version: _Optional[int] = ...) -> None: ... + +class GetPersistentSegmentInfoRequest(_message.Message): + __slots__ = ("base", "dbName", "collectionName") + BASE_FIELD_NUMBER: _ClassVar[int] + DBNAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONNAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + dbName: str + collectionName: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., dbName: _Optional[str] = ..., collectionName: _Optional[str] = ...) -> None: ... + +class GetPersistentSegmentInfoResponse(_message.Message): + __slots__ = ("status", "infos") + STATUS_FIELD_NUMBER: _ClassVar[int] + INFOS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + infos: _containers.RepeatedCompositeFieldContainer[PersistentSegmentInfo] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., infos: _Optional[_Iterable[_Union[PersistentSegmentInfo, _Mapping]]] = ...) -> None: ... + +class QuerySegmentInfo(_message.Message): + __slots__ = ("segmentID", "collectionID", "partitionID", "mem_size", "num_rows", "index_name", "indexID", "nodeID", "state", "nodeIds", "level", "is_sorted", "storage_version") + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + MEM_SIZE_FIELD_NUMBER: _ClassVar[int] + NUM_ROWS_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + INDEXID_FIELD_NUMBER: _ClassVar[int] + NODEID_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + NODEIDS_FIELD_NUMBER: _ClassVar[int] + LEVEL_FIELD_NUMBER: _ClassVar[int] + IS_SORTED_FIELD_NUMBER: _ClassVar[int] + STORAGE_VERSION_FIELD_NUMBER: _ClassVar[int] + segmentID: int + collectionID: int + partitionID: int + mem_size: int + num_rows: int + index_name: str + indexID: int + nodeID: int + state: _common_pb2.SegmentState + nodeIds: _containers.RepeatedScalarFieldContainer[int] + level: _common_pb2.SegmentLevel + is_sorted: bool + storage_version: int + def __init__(self, segmentID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ..., mem_size: _Optional[int] = ..., num_rows: _Optional[int] = ..., index_name: _Optional[str] = ..., indexID: _Optional[int] = ..., nodeID: _Optional[int] = ..., state: _Optional[_Union[_common_pb2.SegmentState, str]] = ..., nodeIds: _Optional[_Iterable[int]] = ..., level: _Optional[_Union[_common_pb2.SegmentLevel, str]] = ..., is_sorted: bool = ..., storage_version: _Optional[int] = ...) -> None: ... + +class GetQuerySegmentInfoRequest(_message.Message): + __slots__ = ("base", "dbName", "collectionName") + BASE_FIELD_NUMBER: _ClassVar[int] + DBNAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONNAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + dbName: str + collectionName: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., dbName: _Optional[str] = ..., collectionName: _Optional[str] = ...) -> None: ... + +class GetQuerySegmentInfoResponse(_message.Message): + __slots__ = ("status", "infos") + STATUS_FIELD_NUMBER: _ClassVar[int] + INFOS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + infos: _containers.RepeatedCompositeFieldContainer[QuerySegmentInfo] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., infos: _Optional[_Iterable[_Union[QuerySegmentInfo, _Mapping]]] = ...) -> None: ... + +class DummyRequest(_message.Message): + __slots__ = ("request_type",) + REQUEST_TYPE_FIELD_NUMBER: _ClassVar[int] + request_type: str + def __init__(self, request_type: _Optional[str] = ...) -> None: ... + +class DummyResponse(_message.Message): + __slots__ = ("response",) + RESPONSE_FIELD_NUMBER: _ClassVar[int] + response: str + def __init__(self, response: _Optional[str] = ...) -> None: ... + +class RegisterLinkRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class RegisterLinkResponse(_message.Message): + __slots__ = ("address", "status") + ADDRESS_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + address: _common_pb2.Address + status: _common_pb2.Status + def __init__(self, address: _Optional[_Union[_common_pb2.Address, _Mapping]] = ..., status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ...) -> None: ... + +class GetMetricsRequest(_message.Message): + __slots__ = ("base", "request") + BASE_FIELD_NUMBER: _ClassVar[int] + REQUEST_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + request: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., request: _Optional[str] = ...) -> None: ... + +class GetMetricsResponse(_message.Message): + __slots__ = ("status", "response", "component_name") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESPONSE_FIELD_NUMBER: _ClassVar[int] + COMPONENT_NAME_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + response: str + component_name: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., response: _Optional[str] = ..., component_name: _Optional[str] = ...) -> None: ... + +class ComponentInfo(_message.Message): + __slots__ = ("nodeID", "role", "state_code", "extra_info") + NODEID_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + STATE_CODE_FIELD_NUMBER: _ClassVar[int] + EXTRA_INFO_FIELD_NUMBER: _ClassVar[int] + nodeID: int + role: str + state_code: _common_pb2.StateCode + extra_info: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, nodeID: _Optional[int] = ..., role: _Optional[str] = ..., state_code: _Optional[_Union[_common_pb2.StateCode, str]] = ..., extra_info: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class ComponentStates(_message.Message): + __slots__ = ("state", "subcomponent_states", "status") + STATE_FIELD_NUMBER: _ClassVar[int] + SUBCOMPONENT_STATES_FIELD_NUMBER: _ClassVar[int] + STATUS_FIELD_NUMBER: _ClassVar[int] + state: ComponentInfo + subcomponent_states: _containers.RepeatedCompositeFieldContainer[ComponentInfo] + status: _common_pb2.Status + def __init__(self, state: _Optional[_Union[ComponentInfo, _Mapping]] = ..., subcomponent_states: _Optional[_Iterable[_Union[ComponentInfo, _Mapping]]] = ..., status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ...) -> None: ... + +class GetComponentStatesRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class LoadBalanceRequest(_message.Message): + __slots__ = ("base", "src_nodeID", "dst_nodeIDs", "sealed_segmentIDs", "collectionName", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + SRC_NODEID_FIELD_NUMBER: _ClassVar[int] + DST_NODEIDS_FIELD_NUMBER: _ClassVar[int] + SEALED_SEGMENTIDS_FIELD_NUMBER: _ClassVar[int] + COLLECTIONNAME_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + src_nodeID: int + dst_nodeIDs: _containers.RepeatedScalarFieldContainer[int] + sealed_segmentIDs: _containers.RepeatedScalarFieldContainer[int] + collectionName: str + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., src_nodeID: _Optional[int] = ..., dst_nodeIDs: _Optional[_Iterable[int]] = ..., sealed_segmentIDs: _Optional[_Iterable[int]] = ..., collectionName: _Optional[str] = ..., db_name: _Optional[str] = ...) -> None: ... + +class ManualCompactionRequest(_message.Message): + __slots__ = ("collectionID", "timetravel", "majorCompaction", "collection_name", "db_name", "partition_id", "channel", "segment_ids", "l0Compaction", "target_size") + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + TIMETRAVEL_FIELD_NUMBER: _ClassVar[int] + MAJORCOMPACTION_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_ID_FIELD_NUMBER: _ClassVar[int] + CHANNEL_FIELD_NUMBER: _ClassVar[int] + SEGMENT_IDS_FIELD_NUMBER: _ClassVar[int] + L0COMPACTION_FIELD_NUMBER: _ClassVar[int] + TARGET_SIZE_FIELD_NUMBER: _ClassVar[int] + collectionID: int + timetravel: int + majorCompaction: bool + collection_name: str + db_name: str + partition_id: int + channel: str + segment_ids: _containers.RepeatedScalarFieldContainer[int] + l0Compaction: bool + target_size: int + def __init__(self, collectionID: _Optional[int] = ..., timetravel: _Optional[int] = ..., majorCompaction: bool = ..., collection_name: _Optional[str] = ..., db_name: _Optional[str] = ..., partition_id: _Optional[int] = ..., channel: _Optional[str] = ..., segment_ids: _Optional[_Iterable[int]] = ..., l0Compaction: bool = ..., target_size: _Optional[int] = ...) -> None: ... + +class ManualCompactionResponse(_message.Message): + __slots__ = ("status", "compactionID", "compactionPlanCount") + STATUS_FIELD_NUMBER: _ClassVar[int] + COMPACTIONID_FIELD_NUMBER: _ClassVar[int] + COMPACTIONPLANCOUNT_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + compactionID: int + compactionPlanCount: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., compactionID: _Optional[int] = ..., compactionPlanCount: _Optional[int] = ...) -> None: ... + +class GetCompactionStateRequest(_message.Message): + __slots__ = ("compactionID",) + COMPACTIONID_FIELD_NUMBER: _ClassVar[int] + compactionID: int + def __init__(self, compactionID: _Optional[int] = ...) -> None: ... + +class GetCompactionStateResponse(_message.Message): + __slots__ = ("status", "state", "executingPlanNo", "timeoutPlanNo", "completedPlanNo", "failedPlanNo") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + EXECUTINGPLANNO_FIELD_NUMBER: _ClassVar[int] + TIMEOUTPLANNO_FIELD_NUMBER: _ClassVar[int] + COMPLETEDPLANNO_FIELD_NUMBER: _ClassVar[int] + FAILEDPLANNO_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + state: _common_pb2.CompactionState + executingPlanNo: int + timeoutPlanNo: int + completedPlanNo: int + failedPlanNo: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., state: _Optional[_Union[_common_pb2.CompactionState, str]] = ..., executingPlanNo: _Optional[int] = ..., timeoutPlanNo: _Optional[int] = ..., completedPlanNo: _Optional[int] = ..., failedPlanNo: _Optional[int] = ...) -> None: ... + +class GetCompactionPlansRequest(_message.Message): + __slots__ = ("compactionID",) + COMPACTIONID_FIELD_NUMBER: _ClassVar[int] + compactionID: int + def __init__(self, compactionID: _Optional[int] = ...) -> None: ... + +class GetCompactionPlansResponse(_message.Message): + __slots__ = ("status", "state", "mergeInfos") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + MERGEINFOS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + state: _common_pb2.CompactionState + mergeInfos: _containers.RepeatedCompositeFieldContainer[CompactionMergeInfo] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., state: _Optional[_Union[_common_pb2.CompactionState, str]] = ..., mergeInfos: _Optional[_Iterable[_Union[CompactionMergeInfo, _Mapping]]] = ...) -> None: ... + +class CompactionMergeInfo(_message.Message): + __slots__ = ("sources", "target") + SOURCES_FIELD_NUMBER: _ClassVar[int] + TARGET_FIELD_NUMBER: _ClassVar[int] + sources: _containers.RepeatedScalarFieldContainer[int] + target: int + def __init__(self, sources: _Optional[_Iterable[int]] = ..., target: _Optional[int] = ...) -> None: ... + +class GetFlushStateRequest(_message.Message): + __slots__ = ("segmentIDs", "flush_ts", "db_name", "collection_name") + SEGMENTIDS_FIELD_NUMBER: _ClassVar[int] + FLUSH_TS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + segmentIDs: _containers.RepeatedScalarFieldContainer[int] + flush_ts: int + db_name: str + collection_name: str + def __init__(self, segmentIDs: _Optional[_Iterable[int]] = ..., flush_ts: _Optional[int] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class GetFlushStateResponse(_message.Message): + __slots__ = ("status", "flushed") + STATUS_FIELD_NUMBER: _ClassVar[int] + FLUSHED_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + flushed: bool + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., flushed: bool = ...) -> None: ... + +class GetFlushAllStateRequest(_message.Message): + __slots__ = ("base", "flush_all_ts", "db_name", "flush_targets") + BASE_FIELD_NUMBER: _ClassVar[int] + FLUSH_ALL_TS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + FLUSH_TARGETS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + flush_all_ts: int + db_name: str + flush_targets: _containers.RepeatedCompositeFieldContainer[FlushAllTarget] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., flush_all_ts: _Optional[int] = ..., db_name: _Optional[str] = ..., flush_targets: _Optional[_Iterable[_Union[FlushAllTarget, _Mapping]]] = ...) -> None: ... + +class GetFlushAllStateResponse(_message.Message): + __slots__ = ("status", "flushed", "flush_states") + STATUS_FIELD_NUMBER: _ClassVar[int] + FLUSHED_FIELD_NUMBER: _ClassVar[int] + FLUSH_STATES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + flushed: bool + flush_states: _containers.RepeatedCompositeFieldContainer[FlushAllState] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., flushed: bool = ..., flush_states: _Optional[_Iterable[_Union[FlushAllState, _Mapping]]] = ...) -> None: ... + +class FlushAllState(_message.Message): + __slots__ = ("db_name", "collection_flush_states") + class CollectionFlushStatesEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: bool + def __init__(self, key: _Optional[str] = ..., value: bool = ...) -> None: ... + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_FLUSH_STATES_FIELD_NUMBER: _ClassVar[int] + db_name: str + collection_flush_states: _containers.ScalarMap[str, bool] + def __init__(self, db_name: _Optional[str] = ..., collection_flush_states: _Optional[_Mapping[str, bool]] = ...) -> None: ... + +class ImportRequest(_message.Message): + __slots__ = ("collection_name", "partition_name", "channel_names", "row_based", "files", "options", "db_name", "clustering_info") + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + CHANNEL_NAMES_FIELD_NUMBER: _ClassVar[int] + ROW_BASED_FIELD_NUMBER: _ClassVar[int] + FILES_FIELD_NUMBER: _ClassVar[int] + OPTIONS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + CLUSTERING_INFO_FIELD_NUMBER: _ClassVar[int] + collection_name: str + partition_name: str + channel_names: _containers.RepeatedScalarFieldContainer[str] + row_based: bool + files: _containers.RepeatedScalarFieldContainer[str] + options: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + db_name: str + clustering_info: bytes + def __init__(self, collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., channel_names: _Optional[_Iterable[str]] = ..., row_based: bool = ..., files: _Optional[_Iterable[str]] = ..., options: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., db_name: _Optional[str] = ..., clustering_info: _Optional[bytes] = ...) -> None: ... + +class ImportResponse(_message.Message): + __slots__ = ("status", "tasks") + STATUS_FIELD_NUMBER: _ClassVar[int] + TASKS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + tasks: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., tasks: _Optional[_Iterable[int]] = ...) -> None: ... + +class GetImportStateRequest(_message.Message): + __slots__ = ("task",) + TASK_FIELD_NUMBER: _ClassVar[int] + task: int + def __init__(self, task: _Optional[int] = ...) -> None: ... + +class GetImportStateResponse(_message.Message): + __slots__ = ("status", "state", "row_count", "id_list", "infos", "id", "collection_id", "segment_ids", "create_ts") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + ROW_COUNT_FIELD_NUMBER: _ClassVar[int] + ID_LIST_FIELD_NUMBER: _ClassVar[int] + INFOS_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + COLLECTION_ID_FIELD_NUMBER: _ClassVar[int] + SEGMENT_IDS_FIELD_NUMBER: _ClassVar[int] + CREATE_TS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + state: _common_pb2.ImportState + row_count: int + id_list: _containers.RepeatedScalarFieldContainer[int] + infos: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + id: int + collection_id: int + segment_ids: _containers.RepeatedScalarFieldContainer[int] + create_ts: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., state: _Optional[_Union[_common_pb2.ImportState, str]] = ..., row_count: _Optional[int] = ..., id_list: _Optional[_Iterable[int]] = ..., infos: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., id: _Optional[int] = ..., collection_id: _Optional[int] = ..., segment_ids: _Optional[_Iterable[int]] = ..., create_ts: _Optional[int] = ...) -> None: ... + +class ListImportTasksRequest(_message.Message): + __slots__ = ("collection_name", "limit", "db_name") + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + LIMIT_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + collection_name: str + limit: int + db_name: str + def __init__(self, collection_name: _Optional[str] = ..., limit: _Optional[int] = ..., db_name: _Optional[str] = ...) -> None: ... + +class ListImportTasksResponse(_message.Message): + __slots__ = ("status", "tasks") + STATUS_FIELD_NUMBER: _ClassVar[int] + TASKS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + tasks: _containers.RepeatedCompositeFieldContainer[GetImportStateResponse] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., tasks: _Optional[_Iterable[_Union[GetImportStateResponse, _Mapping]]] = ...) -> None: ... + +class GetReplicasRequest(_message.Message): + __slots__ = ("base", "collectionID", "with_shard_nodes", "collection_name", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + WITH_SHARD_NODES_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collectionID: int + with_shard_nodes: bool + collection_name: str + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collectionID: _Optional[int] = ..., with_shard_nodes: bool = ..., collection_name: _Optional[str] = ..., db_name: _Optional[str] = ...) -> None: ... + +class GetReplicasResponse(_message.Message): + __slots__ = ("status", "replicas") + STATUS_FIELD_NUMBER: _ClassVar[int] + REPLICAS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + replicas: _containers.RepeatedCompositeFieldContainer[ReplicaInfo] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., replicas: _Optional[_Iterable[_Union[ReplicaInfo, _Mapping]]] = ...) -> None: ... + +class ReplicaInfo(_message.Message): + __slots__ = ("replicaID", "collectionID", "partition_ids", "shard_replicas", "node_ids", "resource_group_name", "num_outbound_node") + class NumOutboundNodeEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + REPLICAID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITION_IDS_FIELD_NUMBER: _ClassVar[int] + SHARD_REPLICAS_FIELD_NUMBER: _ClassVar[int] + NODE_IDS_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUP_NAME_FIELD_NUMBER: _ClassVar[int] + NUM_OUTBOUND_NODE_FIELD_NUMBER: _ClassVar[int] + replicaID: int + collectionID: int + partition_ids: _containers.RepeatedScalarFieldContainer[int] + shard_replicas: _containers.RepeatedCompositeFieldContainer[ShardReplica] + node_ids: _containers.RepeatedScalarFieldContainer[int] + resource_group_name: str + num_outbound_node: _containers.ScalarMap[str, int] + def __init__(self, replicaID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partition_ids: _Optional[_Iterable[int]] = ..., shard_replicas: _Optional[_Iterable[_Union[ShardReplica, _Mapping]]] = ..., node_ids: _Optional[_Iterable[int]] = ..., resource_group_name: _Optional[str] = ..., num_outbound_node: _Optional[_Mapping[str, int]] = ...) -> None: ... + +class ShardReplica(_message.Message): + __slots__ = ("leaderID", "leader_addr", "dm_channel_name", "node_ids") + LEADERID_FIELD_NUMBER: _ClassVar[int] + LEADER_ADDR_FIELD_NUMBER: _ClassVar[int] + DM_CHANNEL_NAME_FIELD_NUMBER: _ClassVar[int] + NODE_IDS_FIELD_NUMBER: _ClassVar[int] + leaderID: int + leader_addr: str + dm_channel_name: str + node_ids: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, leaderID: _Optional[int] = ..., leader_addr: _Optional[str] = ..., dm_channel_name: _Optional[str] = ..., node_ids: _Optional[_Iterable[int]] = ...) -> None: ... + +class CreateCredentialRequest(_message.Message): + __slots__ = ("base", "username", "password", "created_utc_timestamps", "modified_utc_timestamps") + BASE_FIELD_NUMBER: _ClassVar[int] + USERNAME_FIELD_NUMBER: _ClassVar[int] + PASSWORD_FIELD_NUMBER: _ClassVar[int] + CREATED_UTC_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + MODIFIED_UTC_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + username: str + password: str + created_utc_timestamps: int + modified_utc_timestamps: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., username: _Optional[str] = ..., password: _Optional[str] = ..., created_utc_timestamps: _Optional[int] = ..., modified_utc_timestamps: _Optional[int] = ...) -> None: ... + +class UpdateCredentialRequest(_message.Message): + __slots__ = ("base", "username", "oldPassword", "newPassword", "created_utc_timestamps", "modified_utc_timestamps") + BASE_FIELD_NUMBER: _ClassVar[int] + USERNAME_FIELD_NUMBER: _ClassVar[int] + OLDPASSWORD_FIELD_NUMBER: _ClassVar[int] + NEWPASSWORD_FIELD_NUMBER: _ClassVar[int] + CREATED_UTC_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + MODIFIED_UTC_TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + username: str + oldPassword: str + newPassword: str + created_utc_timestamps: int + modified_utc_timestamps: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., username: _Optional[str] = ..., oldPassword: _Optional[str] = ..., newPassword: _Optional[str] = ..., created_utc_timestamps: _Optional[int] = ..., modified_utc_timestamps: _Optional[int] = ...) -> None: ... + +class DeleteCredentialRequest(_message.Message): + __slots__ = ("base", "username") + BASE_FIELD_NUMBER: _ClassVar[int] + USERNAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + username: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., username: _Optional[str] = ...) -> None: ... + +class ListCredUsersResponse(_message.Message): + __slots__ = ("status", "usernames") + STATUS_FIELD_NUMBER: _ClassVar[int] + USERNAMES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + usernames: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., usernames: _Optional[_Iterable[str]] = ...) -> None: ... + +class ListCredUsersRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class RoleEntity(_message.Message): + __slots__ = ("name",) + NAME_FIELD_NUMBER: _ClassVar[int] + name: str + def __init__(self, name: _Optional[str] = ...) -> None: ... + +class UserEntity(_message.Message): + __slots__ = ("name",) + NAME_FIELD_NUMBER: _ClassVar[int] + name: str + def __init__(self, name: _Optional[str] = ...) -> None: ... + +class CreateRoleRequest(_message.Message): + __slots__ = ("base", "entity") + BASE_FIELD_NUMBER: _ClassVar[int] + ENTITY_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + entity: RoleEntity + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., entity: _Optional[_Union[RoleEntity, _Mapping]] = ...) -> None: ... + +class DropRoleRequest(_message.Message): + __slots__ = ("base", "role_name", "force_drop") + BASE_FIELD_NUMBER: _ClassVar[int] + ROLE_NAME_FIELD_NUMBER: _ClassVar[int] + FORCE_DROP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + role_name: str + force_drop: bool + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., role_name: _Optional[str] = ..., force_drop: bool = ...) -> None: ... + +class CreatePrivilegeGroupRequest(_message.Message): + __slots__ = ("base", "group_name") + BASE_FIELD_NUMBER: _ClassVar[int] + GROUP_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + group_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., group_name: _Optional[str] = ...) -> None: ... + +class DropPrivilegeGroupRequest(_message.Message): + __slots__ = ("base", "group_name") + BASE_FIELD_NUMBER: _ClassVar[int] + GROUP_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + group_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., group_name: _Optional[str] = ...) -> None: ... + +class ListPrivilegeGroupsRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class ListPrivilegeGroupsResponse(_message.Message): + __slots__ = ("status", "privilege_groups") + STATUS_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_GROUPS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + privilege_groups: _containers.RepeatedCompositeFieldContainer[PrivilegeGroupInfo] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., privilege_groups: _Optional[_Iterable[_Union[PrivilegeGroupInfo, _Mapping]]] = ...) -> None: ... + +class OperatePrivilegeGroupRequest(_message.Message): + __slots__ = ("base", "group_name", "privileges", "type") + BASE_FIELD_NUMBER: _ClassVar[int] + GROUP_NAME_FIELD_NUMBER: _ClassVar[int] + PRIVILEGES_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + group_name: str + privileges: _containers.RepeatedCompositeFieldContainer[PrivilegeEntity] + type: OperatePrivilegeGroupType + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., group_name: _Optional[str] = ..., privileges: _Optional[_Iterable[_Union[PrivilegeEntity, _Mapping]]] = ..., type: _Optional[_Union[OperatePrivilegeGroupType, str]] = ...) -> None: ... + +class OperateUserRoleRequest(_message.Message): + __slots__ = ("base", "username", "role_name", "type") + BASE_FIELD_NUMBER: _ClassVar[int] + USERNAME_FIELD_NUMBER: _ClassVar[int] + ROLE_NAME_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + username: str + role_name: str + type: OperateUserRoleType + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., username: _Optional[str] = ..., role_name: _Optional[str] = ..., type: _Optional[_Union[OperateUserRoleType, str]] = ...) -> None: ... + +class PrivilegeGroupInfo(_message.Message): + __slots__ = ("group_name", "privileges") + GROUP_NAME_FIELD_NUMBER: _ClassVar[int] + PRIVILEGES_FIELD_NUMBER: _ClassVar[int] + group_name: str + privileges: _containers.RepeatedCompositeFieldContainer[PrivilegeEntity] + def __init__(self, group_name: _Optional[str] = ..., privileges: _Optional[_Iterable[_Union[PrivilegeEntity, _Mapping]]] = ...) -> None: ... + +class SelectRoleRequest(_message.Message): + __slots__ = ("base", "role", "include_user_info") + BASE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + INCLUDE_USER_INFO_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + role: RoleEntity + include_user_info: bool + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., role: _Optional[_Union[RoleEntity, _Mapping]] = ..., include_user_info: bool = ...) -> None: ... + +class RoleResult(_message.Message): + __slots__ = ("role", "users") + ROLE_FIELD_NUMBER: _ClassVar[int] + USERS_FIELD_NUMBER: _ClassVar[int] + role: RoleEntity + users: _containers.RepeatedCompositeFieldContainer[UserEntity] + def __init__(self, role: _Optional[_Union[RoleEntity, _Mapping]] = ..., users: _Optional[_Iterable[_Union[UserEntity, _Mapping]]] = ...) -> None: ... + +class SelectRoleResponse(_message.Message): + __slots__ = ("status", "results") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESULTS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + results: _containers.RepeatedCompositeFieldContainer[RoleResult] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., results: _Optional[_Iterable[_Union[RoleResult, _Mapping]]] = ...) -> None: ... + +class SelectUserRequest(_message.Message): + __slots__ = ("base", "user", "include_role_info") + BASE_FIELD_NUMBER: _ClassVar[int] + USER_FIELD_NUMBER: _ClassVar[int] + INCLUDE_ROLE_INFO_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + user: UserEntity + include_role_info: bool + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., user: _Optional[_Union[UserEntity, _Mapping]] = ..., include_role_info: bool = ...) -> None: ... + +class UserResult(_message.Message): + __slots__ = ("user", "roles") + USER_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + user: UserEntity + roles: _containers.RepeatedCompositeFieldContainer[RoleEntity] + def __init__(self, user: _Optional[_Union[UserEntity, _Mapping]] = ..., roles: _Optional[_Iterable[_Union[RoleEntity, _Mapping]]] = ...) -> None: ... + +class SelectUserResponse(_message.Message): + __slots__ = ("status", "results") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESULTS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + results: _containers.RepeatedCompositeFieldContainer[UserResult] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., results: _Optional[_Iterable[_Union[UserResult, _Mapping]]] = ...) -> None: ... + +class ObjectEntity(_message.Message): + __slots__ = ("name",) + NAME_FIELD_NUMBER: _ClassVar[int] + name: str + def __init__(self, name: _Optional[str] = ...) -> None: ... + +class PrivilegeEntity(_message.Message): + __slots__ = ("name",) + NAME_FIELD_NUMBER: _ClassVar[int] + name: str + def __init__(self, name: _Optional[str] = ...) -> None: ... + +class GrantorEntity(_message.Message): + __slots__ = ("user", "privilege") + USER_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_FIELD_NUMBER: _ClassVar[int] + user: UserEntity + privilege: PrivilegeEntity + def __init__(self, user: _Optional[_Union[UserEntity, _Mapping]] = ..., privilege: _Optional[_Union[PrivilegeEntity, _Mapping]] = ...) -> None: ... + +class GrantPrivilegeEntity(_message.Message): + __slots__ = ("entities",) + ENTITIES_FIELD_NUMBER: _ClassVar[int] + entities: _containers.RepeatedCompositeFieldContainer[GrantorEntity] + def __init__(self, entities: _Optional[_Iterable[_Union[GrantorEntity, _Mapping]]] = ...) -> None: ... + +class GrantEntity(_message.Message): + __slots__ = ("role", "object", "object_name", "grantor", "db_name") + ROLE_FIELD_NUMBER: _ClassVar[int] + OBJECT_FIELD_NUMBER: _ClassVar[int] + OBJECT_NAME_FIELD_NUMBER: _ClassVar[int] + GRANTOR_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + role: RoleEntity + object: ObjectEntity + object_name: str + grantor: GrantorEntity + db_name: str + def __init__(self, role: _Optional[_Union[RoleEntity, _Mapping]] = ..., object: _Optional[_Union[ObjectEntity, _Mapping]] = ..., object_name: _Optional[str] = ..., grantor: _Optional[_Union[GrantorEntity, _Mapping]] = ..., db_name: _Optional[str] = ...) -> None: ... + +class SelectGrantRequest(_message.Message): + __slots__ = ("base", "entity") + BASE_FIELD_NUMBER: _ClassVar[int] + ENTITY_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + entity: GrantEntity + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., entity: _Optional[_Union[GrantEntity, _Mapping]] = ...) -> None: ... + +class SelectGrantResponse(_message.Message): + __slots__ = ("status", "entities") + STATUS_FIELD_NUMBER: _ClassVar[int] + ENTITIES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + entities: _containers.RepeatedCompositeFieldContainer[GrantEntity] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., entities: _Optional[_Iterable[_Union[GrantEntity, _Mapping]]] = ...) -> None: ... + +class OperatePrivilegeRequest(_message.Message): + __slots__ = ("base", "entity", "type", "version") + BASE_FIELD_NUMBER: _ClassVar[int] + ENTITY_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + entity: GrantEntity + type: OperatePrivilegeType + version: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., entity: _Optional[_Union[GrantEntity, _Mapping]] = ..., type: _Optional[_Union[OperatePrivilegeType, str]] = ..., version: _Optional[str] = ...) -> None: ... + +class OperatePrivilegeV2Request(_message.Message): + __slots__ = ("base", "role", "grantor", "type", "db_name", "collection_name") + BASE_FIELD_NUMBER: _ClassVar[int] + ROLE_FIELD_NUMBER: _ClassVar[int] + GRANTOR_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + role: RoleEntity + grantor: GrantorEntity + type: OperatePrivilegeType + db_name: str + collection_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., role: _Optional[_Union[RoleEntity, _Mapping]] = ..., grantor: _Optional[_Union[GrantorEntity, _Mapping]] = ..., type: _Optional[_Union[OperatePrivilegeType, str]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class UserInfo(_message.Message): + __slots__ = ("user", "password", "roles") + USER_FIELD_NUMBER: _ClassVar[int] + PASSWORD_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + user: str + password: str + roles: _containers.RepeatedCompositeFieldContainer[RoleEntity] + def __init__(self, user: _Optional[str] = ..., password: _Optional[str] = ..., roles: _Optional[_Iterable[_Union[RoleEntity, _Mapping]]] = ...) -> None: ... + +class RBACMeta(_message.Message): + __slots__ = ("users", "roles", "grants", "privilege_groups") + USERS_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + GRANTS_FIELD_NUMBER: _ClassVar[int] + PRIVILEGE_GROUPS_FIELD_NUMBER: _ClassVar[int] + users: _containers.RepeatedCompositeFieldContainer[UserInfo] + roles: _containers.RepeatedCompositeFieldContainer[RoleEntity] + grants: _containers.RepeatedCompositeFieldContainer[GrantEntity] + privilege_groups: _containers.RepeatedCompositeFieldContainer[PrivilegeGroupInfo] + def __init__(self, users: _Optional[_Iterable[_Union[UserInfo, _Mapping]]] = ..., roles: _Optional[_Iterable[_Union[RoleEntity, _Mapping]]] = ..., grants: _Optional[_Iterable[_Union[GrantEntity, _Mapping]]] = ..., privilege_groups: _Optional[_Iterable[_Union[PrivilegeGroupInfo, _Mapping]]] = ...) -> None: ... + +class BackupRBACMetaRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class BackupRBACMetaResponse(_message.Message): + __slots__ = ("status", "RBAC_meta") + STATUS_FIELD_NUMBER: _ClassVar[int] + RBAC_META_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + RBAC_meta: RBACMeta + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., RBAC_meta: _Optional[_Union[RBACMeta, _Mapping]] = ...) -> None: ... + +class RestoreRBACMetaRequest(_message.Message): + __slots__ = ("base", "RBAC_meta") + BASE_FIELD_NUMBER: _ClassVar[int] + RBAC_META_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + RBAC_meta: RBACMeta + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., RBAC_meta: _Optional[_Union[RBACMeta, _Mapping]] = ...) -> None: ... + +class GetLoadingProgressRequest(_message.Message): + __slots__ = ("base", "collection_name", "partition_names", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ..., db_name: _Optional[str] = ...) -> None: ... + +class GetLoadingProgressResponse(_message.Message): + __slots__ = ("status", "progress", "refresh_progress") + STATUS_FIELD_NUMBER: _ClassVar[int] + PROGRESS_FIELD_NUMBER: _ClassVar[int] + REFRESH_PROGRESS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + progress: int + refresh_progress: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., progress: _Optional[int] = ..., refresh_progress: _Optional[int] = ...) -> None: ... + +class GetLoadStateRequest(_message.Message): + __slots__ = ("base", "collection_name", "partition_names", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAMES_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + collection_name: str + partition_names: _containers.RepeatedScalarFieldContainer[str] + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., collection_name: _Optional[str] = ..., partition_names: _Optional[_Iterable[str]] = ..., db_name: _Optional[str] = ...) -> None: ... + +class GetLoadStateResponse(_message.Message): + __slots__ = ("status", "state") + STATUS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + state: _common_pb2.LoadState + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., state: _Optional[_Union[_common_pb2.LoadState, str]] = ...) -> None: ... + +class MilvusExt(_message.Message): + __slots__ = ("version",) + VERSION_FIELD_NUMBER: _ClassVar[int] + version: str + def __init__(self, version: _Optional[str] = ...) -> None: ... + +class GetVersionRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class GetVersionResponse(_message.Message): + __slots__ = ("status", "version") + STATUS_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + version: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., version: _Optional[str] = ...) -> None: ... + +class CheckHealthRequest(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class CheckHealthResponse(_message.Message): + __slots__ = ("status", "isHealthy", "reasons", "quota_states") + STATUS_FIELD_NUMBER: _ClassVar[int] + ISHEALTHY_FIELD_NUMBER: _ClassVar[int] + REASONS_FIELD_NUMBER: _ClassVar[int] + QUOTA_STATES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + isHealthy: bool + reasons: _containers.RepeatedScalarFieldContainer[str] + quota_states: _containers.RepeatedScalarFieldContainer[QuotaState] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., isHealthy: bool = ..., reasons: _Optional[_Iterable[str]] = ..., quota_states: _Optional[_Iterable[_Union[QuotaState, str]]] = ...) -> None: ... + +class CreateResourceGroupRequest(_message.Message): + __slots__ = ("base", "resource_group", "config") + BASE_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + resource_group: str + config: _rg_pb2.ResourceGroupConfig + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., resource_group: _Optional[str] = ..., config: _Optional[_Union[_rg_pb2.ResourceGroupConfig, _Mapping]] = ...) -> None: ... + +class UpdateResourceGroupsRequest(_message.Message): + __slots__ = ("base", "resource_groups") + class ResourceGroupsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: _rg_pb2.ResourceGroupConfig + def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_rg_pb2.ResourceGroupConfig, _Mapping]] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUPS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + resource_groups: _containers.MessageMap[str, _rg_pb2.ResourceGroupConfig] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., resource_groups: _Optional[_Mapping[str, _rg_pb2.ResourceGroupConfig]] = ...) -> None: ... + +class DropResourceGroupRequest(_message.Message): + __slots__ = ("base", "resource_group") + BASE_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + resource_group: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., resource_group: _Optional[str] = ...) -> None: ... + +class TransferNodeRequest(_message.Message): + __slots__ = ("base", "source_resource_group", "target_resource_group", "num_node") + BASE_FIELD_NUMBER: _ClassVar[int] + SOURCE_RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + TARGET_RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + NUM_NODE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + source_resource_group: str + target_resource_group: str + num_node: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., source_resource_group: _Optional[str] = ..., target_resource_group: _Optional[str] = ..., num_node: _Optional[int] = ...) -> None: ... + +class TransferReplicaRequest(_message.Message): + __slots__ = ("base", "source_resource_group", "target_resource_group", "collection_name", "num_replica", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + SOURCE_RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + TARGET_RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + NUM_REPLICA_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + source_resource_group: str + target_resource_group: str + collection_name: str + num_replica: int + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., source_resource_group: _Optional[str] = ..., target_resource_group: _Optional[str] = ..., collection_name: _Optional[str] = ..., num_replica: _Optional[int] = ..., db_name: _Optional[str] = ...) -> None: ... + +class ListResourceGroupsRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class ListResourceGroupsResponse(_message.Message): + __slots__ = ("status", "resource_groups") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUPS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + resource_groups: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., resource_groups: _Optional[_Iterable[str]] = ...) -> None: ... + +class DescribeResourceGroupRequest(_message.Message): + __slots__ = ("base", "resource_group") + BASE_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + resource_group: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., resource_group: _Optional[str] = ...) -> None: ... + +class DescribeResourceGroupResponse(_message.Message): + __slots__ = ("status", "resource_group") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + resource_group: ResourceGroup + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., resource_group: _Optional[_Union[ResourceGroup, _Mapping]] = ...) -> None: ... + +class ResourceGroup(_message.Message): + __slots__ = ("name", "capacity", "num_available_node", "num_loaded_replica", "num_outgoing_node", "num_incoming_node", "config", "nodes") + class NumLoadedReplicaEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + class NumOutgoingNodeEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + class NumIncomingNodeEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: int + def __init__(self, key: _Optional[str] = ..., value: _Optional[int] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + CAPACITY_FIELD_NUMBER: _ClassVar[int] + NUM_AVAILABLE_NODE_FIELD_NUMBER: _ClassVar[int] + NUM_LOADED_REPLICA_FIELD_NUMBER: _ClassVar[int] + NUM_OUTGOING_NODE_FIELD_NUMBER: _ClassVar[int] + NUM_INCOMING_NODE_FIELD_NUMBER: _ClassVar[int] + CONFIG_FIELD_NUMBER: _ClassVar[int] + NODES_FIELD_NUMBER: _ClassVar[int] + name: str + capacity: int + num_available_node: int + num_loaded_replica: _containers.ScalarMap[str, int] + num_outgoing_node: _containers.ScalarMap[str, int] + num_incoming_node: _containers.ScalarMap[str, int] + config: _rg_pb2.ResourceGroupConfig + nodes: _containers.RepeatedCompositeFieldContainer[_common_pb2.NodeInfo] + def __init__(self, name: _Optional[str] = ..., capacity: _Optional[int] = ..., num_available_node: _Optional[int] = ..., num_loaded_replica: _Optional[_Mapping[str, int]] = ..., num_outgoing_node: _Optional[_Mapping[str, int]] = ..., num_incoming_node: _Optional[_Mapping[str, int]] = ..., config: _Optional[_Union[_rg_pb2.ResourceGroupConfig, _Mapping]] = ..., nodes: _Optional[_Iterable[_Union[_common_pb2.NodeInfo, _Mapping]]] = ...) -> None: ... + +class RenameCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "oldName", "newName", "newDBName") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + OLDNAME_FIELD_NUMBER: _ClassVar[int] + NEWNAME_FIELD_NUMBER: _ClassVar[int] + NEWDBNAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + oldName: str + newName: str + newDBName: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., oldName: _Optional[str] = ..., newName: _Optional[str] = ..., newDBName: _Optional[str] = ...) -> None: ... + +class GetIndexStatisticsRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "index_name", "timestamp") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + INDEX_NAME_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + index_name: str + timestamp: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., index_name: _Optional[str] = ..., timestamp: _Optional[int] = ...) -> None: ... + +class GetIndexStatisticsResponse(_message.Message): + __slots__ = ("status", "index_descriptions") + STATUS_FIELD_NUMBER: _ClassVar[int] + INDEX_DESCRIPTIONS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + index_descriptions: _containers.RepeatedCompositeFieldContainer[IndexDescription] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., index_descriptions: _Optional[_Iterable[_Union[IndexDescription, _Mapping]]] = ...) -> None: ... + +class ConnectRequest(_message.Message): + __slots__ = ("base", "client_info") + BASE_FIELD_NUMBER: _ClassVar[int] + CLIENT_INFO_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + client_info: _common_pb2.ClientInfo + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., client_info: _Optional[_Union[_common_pb2.ClientInfo, _Mapping]] = ...) -> None: ... + +class ConnectResponse(_message.Message): + __slots__ = ("status", "server_info", "identifier") + STATUS_FIELD_NUMBER: _ClassVar[int] + SERVER_INFO_FIELD_NUMBER: _ClassVar[int] + IDENTIFIER_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + server_info: _common_pb2.ServerInfo + identifier: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., server_info: _Optional[_Union[_common_pb2.ServerInfo, _Mapping]] = ..., identifier: _Optional[int] = ...) -> None: ... + +class AllocTimestampRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class AllocTimestampResponse(_message.Message): + __slots__ = ("status", "timestamp") + STATUS_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + timestamp: int + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., timestamp: _Optional[int] = ...) -> None: ... + +class CreateDatabaseRequest(_message.Message): + __slots__ = ("base", "db_name", "properties") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class DropDatabaseRequest(_message.Message): + __slots__ = ("base", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ...) -> None: ... + +class ListDatabasesRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class ListDatabasesResponse(_message.Message): + __slots__ = ("status", "db_names", "created_timestamp", "db_ids") + STATUS_FIELD_NUMBER: _ClassVar[int] + DB_NAMES_FIELD_NUMBER: _ClassVar[int] + CREATED_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + DB_IDS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + db_names: _containers.RepeatedScalarFieldContainer[str] + created_timestamp: _containers.RepeatedScalarFieldContainer[int] + db_ids: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., db_names: _Optional[_Iterable[str]] = ..., created_timestamp: _Optional[_Iterable[int]] = ..., db_ids: _Optional[_Iterable[int]] = ...) -> None: ... + +class AlterDatabaseRequest(_message.Message): + __slots__ = ("base", "db_name", "db_id", "properties", "delete_keys") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + DB_ID_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + DELETE_KEYS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + db_id: str + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + delete_keys: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., db_id: _Optional[str] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., delete_keys: _Optional[_Iterable[str]] = ...) -> None: ... + +class DescribeDatabaseRequest(_message.Message): + __slots__ = ("base", "db_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ...) -> None: ... + +class DescribeDatabaseResponse(_message.Message): + __slots__ = ("status", "db_name", "dbID", "created_timestamp", "properties") + STATUS_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + CREATED_TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + db_name: str + dbID: int + created_timestamp: int + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., db_name: _Optional[str] = ..., dbID: _Optional[int] = ..., created_timestamp: _Optional[int] = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class ReplicateMessageRequest(_message.Message): + __slots__ = ("base", "channel_name", "BeginTs", "EndTs", "Msgs", "StartPositions", "EndPositions") + BASE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_NAME_FIELD_NUMBER: _ClassVar[int] + BEGINTS_FIELD_NUMBER: _ClassVar[int] + ENDTS_FIELD_NUMBER: _ClassVar[int] + MSGS_FIELD_NUMBER: _ClassVar[int] + STARTPOSITIONS_FIELD_NUMBER: _ClassVar[int] + ENDPOSITIONS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + channel_name: str + BeginTs: int + EndTs: int + Msgs: _containers.RepeatedScalarFieldContainer[bytes] + StartPositions: _containers.RepeatedCompositeFieldContainer[_msg_pb2.MsgPosition] + EndPositions: _containers.RepeatedCompositeFieldContainer[_msg_pb2.MsgPosition] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., channel_name: _Optional[str] = ..., BeginTs: _Optional[int] = ..., EndTs: _Optional[int] = ..., Msgs: _Optional[_Iterable[bytes]] = ..., StartPositions: _Optional[_Iterable[_Union[_msg_pb2.MsgPosition, _Mapping]]] = ..., EndPositions: _Optional[_Iterable[_Union[_msg_pb2.MsgPosition, _Mapping]]] = ...) -> None: ... + +class ReplicateMessageResponse(_message.Message): + __slots__ = ("status", "position") + STATUS_FIELD_NUMBER: _ClassVar[int] + POSITION_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + position: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., position: _Optional[str] = ...) -> None: ... + +class ImportAuthPlaceholder(_message.Message): + __slots__ = ("db_name", "collection_name", "partition_name") + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + db_name: str + collection_name: str + partition_name: str + def __init__(self, db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ...) -> None: ... + +class GetImportProgressAuthPlaceholder(_message.Message): + __slots__ = ("db_name",) + DB_NAME_FIELD_NUMBER: _ClassVar[int] + db_name: str + def __init__(self, db_name: _Optional[str] = ...) -> None: ... + +class ListImportsAuthPlaceholder(_message.Message): + __slots__ = ("db_name", "collection_name") + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + db_name: str + collection_name: str + def __init__(self, db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class RunAnalyzerRequest(_message.Message): + __slots__ = ("base", "analyzer_params", "placeholder", "with_detail", "with_hash", "db_name", "collection_name", "field_name", "analyzer_names") + BASE_FIELD_NUMBER: _ClassVar[int] + ANALYZER_PARAMS_FIELD_NUMBER: _ClassVar[int] + PLACEHOLDER_FIELD_NUMBER: _ClassVar[int] + WITH_DETAIL_FIELD_NUMBER: _ClassVar[int] + WITH_HASH_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + ANALYZER_NAMES_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + analyzer_params: str + placeholder: _containers.RepeatedScalarFieldContainer[bytes] + with_detail: bool + with_hash: bool + db_name: str + collection_name: str + field_name: str + analyzer_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., analyzer_params: _Optional[str] = ..., placeholder: _Optional[_Iterable[bytes]] = ..., with_detail: bool = ..., with_hash: bool = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., field_name: _Optional[str] = ..., analyzer_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class AnalyzerToken(_message.Message): + __slots__ = ("token", "start_offset", "end_offset", "position", "position_length", "hash") + TOKEN_FIELD_NUMBER: _ClassVar[int] + START_OFFSET_FIELD_NUMBER: _ClassVar[int] + END_OFFSET_FIELD_NUMBER: _ClassVar[int] + POSITION_FIELD_NUMBER: _ClassVar[int] + POSITION_LENGTH_FIELD_NUMBER: _ClassVar[int] + HASH_FIELD_NUMBER: _ClassVar[int] + token: str + start_offset: int + end_offset: int + position: int + position_length: int + hash: int + def __init__(self, token: _Optional[str] = ..., start_offset: _Optional[int] = ..., end_offset: _Optional[int] = ..., position: _Optional[int] = ..., position_length: _Optional[int] = ..., hash: _Optional[int] = ...) -> None: ... + +class AnalyzerResult(_message.Message): + __slots__ = ("tokens",) + TOKENS_FIELD_NUMBER: _ClassVar[int] + tokens: _containers.RepeatedCompositeFieldContainer[AnalyzerToken] + def __init__(self, tokens: _Optional[_Iterable[_Union[AnalyzerToken, _Mapping]]] = ...) -> None: ... + +class RunAnalyzerResponse(_message.Message): + __slots__ = ("status", "results") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESULTS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + results: _containers.RepeatedCompositeFieldContainer[AnalyzerResult] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., results: _Optional[_Iterable[_Union[AnalyzerResult, _Mapping]]] = ...) -> None: ... + +class FileResourceInfo(_message.Message): + __slots__ = ("id", "name", "path") + ID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + id: int + name: str + path: str + def __init__(self, id: _Optional[int] = ..., name: _Optional[str] = ..., path: _Optional[str] = ...) -> None: ... + +class AddFileResourceRequest(_message.Message): + __slots__ = ("base", "name", "path") + BASE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + PATH_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + name: str + path: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., name: _Optional[str] = ..., path: _Optional[str] = ...) -> None: ... + +class RemoveFileResourceRequest(_message.Message): + __slots__ = ("base", "name") + BASE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., name: _Optional[str] = ...) -> None: ... + +class ListFileResourcesRequest(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class ListFileResourcesResponse(_message.Message): + __slots__ = ("status", "resources") + STATUS_FIELD_NUMBER: _ClassVar[int] + RESOURCES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + resources: _containers.RepeatedCompositeFieldContainer[FileResourceInfo] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., resources: _Optional[_Iterable[_Union[FileResourceInfo, _Mapping]]] = ...) -> None: ... + +class AddUserTagsRequest(_message.Message): + __slots__ = ("base", "user_name", "tags") + class TagsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + USER_NAME_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + user_name: str + tags: _containers.ScalarMap[str, str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., user_name: _Optional[str] = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class DeleteUserTagsRequest(_message.Message): + __slots__ = ("base", "user_name", "tag_keys") + BASE_FIELD_NUMBER: _ClassVar[int] + USER_NAME_FIELD_NUMBER: _ClassVar[int] + TAG_KEYS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + user_name: str + tag_keys: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., user_name: _Optional[str] = ..., tag_keys: _Optional[_Iterable[str]] = ...) -> None: ... + +class GetUserTagsRequest(_message.Message): + __slots__ = ("base", "user_name") + BASE_FIELD_NUMBER: _ClassVar[int] + USER_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + user_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., user_name: _Optional[str] = ...) -> None: ... + +class GetUserTagsResponse(_message.Message): + __slots__ = ("status", "tags") + class TagsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + STATUS_FIELD_NUMBER: _ClassVar[int] + TAGS_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + tags: _containers.ScalarMap[str, str] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., tags: _Optional[_Mapping[str, str]] = ...) -> None: ... + +class ListUsersWithTagRequest(_message.Message): + __slots__ = ("base", "tag_key", "tag_value") + BASE_FIELD_NUMBER: _ClassVar[int] + TAG_KEY_FIELD_NUMBER: _ClassVar[int] + TAG_VALUE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + tag_key: str + tag_value: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., tag_key: _Optional[str] = ..., tag_value: _Optional[str] = ...) -> None: ... + +class ListUsersWithTagResponse(_message.Message): + __slots__ = ("status", "user_names") + STATUS_FIELD_NUMBER: _ClassVar[int] + USER_NAMES_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + user_names: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., user_names: _Optional[_Iterable[str]] = ...) -> None: ... + +class CreateRowPolicyRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "policy_name", "actions", "roles", "using_expr", "check_expr", "description") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + POLICY_NAME_FIELD_NUMBER: _ClassVar[int] + ACTIONS_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + USING_EXPR_FIELD_NUMBER: _ClassVar[int] + CHECK_EXPR_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + policy_name: str + actions: _containers.RepeatedScalarFieldContainer[RowPolicyAction] + roles: _containers.RepeatedScalarFieldContainer[str] + using_expr: str + check_expr: str + description: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., policy_name: _Optional[str] = ..., actions: _Optional[_Iterable[_Union[RowPolicyAction, str]]] = ..., roles: _Optional[_Iterable[str]] = ..., using_expr: _Optional[str] = ..., check_expr: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ... + +class DropRowPolicyRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "policy_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + POLICY_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + policy_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., policy_name: _Optional[str] = ...) -> None: ... + +class ListRowPoliciesRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class RowPolicy(_message.Message): + __slots__ = ("policy_name", "actions", "roles", "using_expr", "check_expr", "description", "created_at") + POLICY_NAME_FIELD_NUMBER: _ClassVar[int] + ACTIONS_FIELD_NUMBER: _ClassVar[int] + ROLES_FIELD_NUMBER: _ClassVar[int] + USING_EXPR_FIELD_NUMBER: _ClassVar[int] + CHECK_EXPR_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + policy_name: str + actions: _containers.RepeatedScalarFieldContainer[RowPolicyAction] + roles: _containers.RepeatedScalarFieldContainer[str] + using_expr: str + check_expr: str + description: str + created_at: int + def __init__(self, policy_name: _Optional[str] = ..., actions: _Optional[_Iterable[_Union[RowPolicyAction, str]]] = ..., roles: _Optional[_Iterable[str]] = ..., using_expr: _Optional[str] = ..., check_expr: _Optional[str] = ..., description: _Optional[str] = ..., created_at: _Optional[int] = ...) -> None: ... + +class ListRowPoliciesResponse(_message.Message): + __slots__ = ("status", "policies", "db_name", "collection_name") + STATUS_FIELD_NUMBER: _ClassVar[int] + POLICIES_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + status: _common_pb2.Status + policies: _containers.RepeatedCompositeFieldContainer[RowPolicy] + db_name: str + collection_name: str + def __init__(self, status: _Optional[_Union[_common_pb2.Status, _Mapping]] = ..., policies: _Optional[_Iterable[_Union[RowPolicy, _Mapping]]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ...) -> None: ... + +class UpdateReplicateConfigurationRequest(_message.Message): + __slots__ = ("replicate_configuration",) + REPLICATE_CONFIGURATION_FIELD_NUMBER: _ClassVar[int] + replicate_configuration: _common_pb2.ReplicateConfiguration + def __init__(self, replicate_configuration: _Optional[_Union[_common_pb2.ReplicateConfiguration, _Mapping]] = ...) -> None: ... + +class GetReplicateInfoRequest(_message.Message): + __slots__ = ("source_cluster_id", "target_pchannel") + SOURCE_CLUSTER_ID_FIELD_NUMBER: _ClassVar[int] + TARGET_PCHANNEL_FIELD_NUMBER: _ClassVar[int] + source_cluster_id: str + target_pchannel: str + def __init__(self, source_cluster_id: _Optional[str] = ..., target_pchannel: _Optional[str] = ...) -> None: ... + +class GetReplicateInfoResponse(_message.Message): + __slots__ = ("checkpoint",) + CHECKPOINT_FIELD_NUMBER: _ClassVar[int] + checkpoint: _common_pb2.ReplicateCheckpoint + def __init__(self, checkpoint: _Optional[_Union[_common_pb2.ReplicateCheckpoint, _Mapping]] = ...) -> None: ... + +class ReplicateMessage(_message.Message): + __slots__ = ("source_cluster_id", "message") + SOURCE_CLUSTER_ID_FIELD_NUMBER: _ClassVar[int] + MESSAGE_FIELD_NUMBER: _ClassVar[int] + source_cluster_id: str + message: _common_pb2.ImmutableMessage + def __init__(self, source_cluster_id: _Optional[str] = ..., message: _Optional[_Union[_common_pb2.ImmutableMessage, _Mapping]] = ...) -> None: ... + +class ReplicateRequest(_message.Message): + __slots__ = ("replicate_message",) + REPLICATE_MESSAGE_FIELD_NUMBER: _ClassVar[int] + replicate_message: ReplicateMessage + def __init__(self, replicate_message: _Optional[_Union[ReplicateMessage, _Mapping]] = ...) -> None: ... + +class ReplicateConfirmedMessageInfo(_message.Message): + __slots__ = ("confirmed_time_tick",) + CONFIRMED_TIME_TICK_FIELD_NUMBER: _ClassVar[int] + confirmed_time_tick: int + def __init__(self, confirmed_time_tick: _Optional[int] = ...) -> None: ... + +class ReplicateResponse(_message.Message): + __slots__ = ("replicate_confirmed_message_info",) + REPLICATE_CONFIRMED_MESSAGE_INFO_FIELD_NUMBER: _ClassVar[int] + replicate_confirmed_message_info: ReplicateConfirmedMessageInfo + def __init__(self, replicate_confirmed_message_info: _Optional[_Union[ReplicateConfirmedMessageInfo, _Mapping]] = ...) -> None: ... diff --git a/pymilvus/grpc_gen/milvus_pb2_grpc.py b/pymilvus/grpc_gen/milvus_pb2_grpc.py index 2d2647605..591428e77 100644 --- a/pymilvus/grpc_gen/milvus_pb2_grpc.py +++ b/pymilvus/grpc_gen/milvus_pb2_grpc.py @@ -1,10 +1,31 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! """Client and server classes corresponding to protobuf-defined services.""" import grpc +import warnings from . import common_pb2 as common__pb2 +from . import feder_pb2 as feder__pb2 from . import milvus_pb2 as milvus__pb2 +GRPC_GENERATED_VERSION = '1.66.2' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in milvus_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + class MilvusServiceStub(object): """Missing associated documentation comment in .proto file.""" @@ -45,6 +66,11 @@ def __init__(self, channel): request_serializer=milvus__pb2.DescribeCollectionRequest.SerializeToString, response_deserializer=milvus__pb2.DescribeCollectionResponse.FromString, ) + self.BatchDescribeCollection = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/BatchDescribeCollection', + request_serializer=milvus__pb2.BatchDescribeCollectionRequest.SerializeToString, + response_deserializer=milvus__pb2.BatchDescribeCollectionResponse.FromString, + ) self.GetCollectionStatistics = channel.unary_unary( '/milvus.proto.milvus.MilvusService/GetCollectionStatistics', request_serializer=milvus__pb2.GetCollectionStatisticsRequest.SerializeToString, @@ -55,6 +81,31 @@ def __init__(self, channel): request_serializer=milvus__pb2.ShowCollectionsRequest.SerializeToString, response_deserializer=milvus__pb2.ShowCollectionsResponse.FromString, ) + self.AlterCollection = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AlterCollection', + request_serializer=milvus__pb2.AlterCollectionRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.AlterCollectionField = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AlterCollectionField', + request_serializer=milvus__pb2.AlterCollectionFieldRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.AddCollectionFunction = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AddCollectionFunction', + request_serializer=milvus__pb2.AddCollectionFunctionRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.AlterCollectionFunction = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AlterCollectionFunction', + request_serializer=milvus__pb2.AlterCollectionFunctionRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DropCollectionFunction = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DropCollectionFunction', + request_serializer=milvus__pb2.DropCollectionFunctionRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) self.CreatePartition = channel.unary_unary( '/milvus.proto.milvus.MilvusService/CreatePartition', request_serializer=milvus__pb2.CreatePartitionRequest.SerializeToString, @@ -90,6 +141,16 @@ def __init__(self, channel): request_serializer=milvus__pb2.ShowPartitionsRequest.SerializeToString, response_deserializer=milvus__pb2.ShowPartitionsResponse.FromString, ) + self.GetLoadingProgress = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetLoadingProgress', + request_serializer=milvus__pb2.GetLoadingProgressRequest.SerializeToString, + response_deserializer=milvus__pb2.GetLoadingProgressResponse.FromString, + ) + self.GetLoadState = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetLoadState', + request_serializer=milvus__pb2.GetLoadStateRequest.SerializeToString, + response_deserializer=milvus__pb2.GetLoadStateResponse.FromString, + ) self.CreateAlias = channel.unary_unary( '/milvus.proto.milvus.MilvusService/CreateAlias', request_serializer=milvus__pb2.CreateAliasRequest.SerializeToString, @@ -105,16 +166,36 @@ def __init__(self, channel): request_serializer=milvus__pb2.AlterAliasRequest.SerializeToString, response_deserializer=common__pb2.Status.FromString, ) + self.DescribeAlias = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DescribeAlias', + request_serializer=milvus__pb2.DescribeAliasRequest.SerializeToString, + response_deserializer=milvus__pb2.DescribeAliasResponse.FromString, + ) + self.ListAliases = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListAliases', + request_serializer=milvus__pb2.ListAliasesRequest.SerializeToString, + response_deserializer=milvus__pb2.ListAliasesResponse.FromString, + ) self.CreateIndex = channel.unary_unary( '/milvus.proto.milvus.MilvusService/CreateIndex', request_serializer=milvus__pb2.CreateIndexRequest.SerializeToString, response_deserializer=common__pb2.Status.FromString, ) + self.AlterIndex = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AlterIndex', + request_serializer=milvus__pb2.AlterIndexRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) self.DescribeIndex = channel.unary_unary( '/milvus.proto.milvus.MilvusService/DescribeIndex', request_serializer=milvus__pb2.DescribeIndexRequest.SerializeToString, response_deserializer=milvus__pb2.DescribeIndexResponse.FromString, ) + self.GetIndexStatistics = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetIndexStatistics', + request_serializer=milvus__pb2.GetIndexStatisticsRequest.SerializeToString, + response_deserializer=milvus__pb2.GetIndexStatisticsResponse.FromString, + ) self.GetIndexState = channel.unary_unary( '/milvus.proto.milvus.MilvusService/GetIndexState', request_serializer=milvus__pb2.GetIndexStateRequest.SerializeToString, @@ -140,11 +221,21 @@ def __init__(self, channel): request_serializer=milvus__pb2.DeleteRequest.SerializeToString, response_deserializer=milvus__pb2.MutationResult.FromString, ) + self.Upsert = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/Upsert', + request_serializer=milvus__pb2.UpsertRequest.SerializeToString, + response_deserializer=milvus__pb2.MutationResult.FromString, + ) self.Search = channel.unary_unary( '/milvus.proto.milvus.MilvusService/Search', request_serializer=milvus__pb2.SearchRequest.SerializeToString, response_deserializer=milvus__pb2.SearchResults.FromString, ) + self.HybridSearch = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/HybridSearch', + request_serializer=milvus__pb2.HybridSearchRequest.SerializeToString, + response_deserializer=milvus__pb2.SearchResults.FromString, + ) self.Flush = channel.unary_unary( '/milvus.proto.milvus.MilvusService/Flush', request_serializer=milvus__pb2.FlushRequest.SerializeToString, @@ -160,11 +251,26 @@ def __init__(self, channel): request_serializer=milvus__pb2.CalcDistanceRequest.SerializeToString, response_deserializer=milvus__pb2.CalcDistanceResults.FromString, ) + self.FlushAll = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/FlushAll', + request_serializer=milvus__pb2.FlushAllRequest.SerializeToString, + response_deserializer=milvus__pb2.FlushAllResponse.FromString, + ) + self.AddCollectionField = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AddCollectionField', + request_serializer=milvus__pb2.AddCollectionFieldRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) self.GetFlushState = channel.unary_unary( '/milvus.proto.milvus.MilvusService/GetFlushState', request_serializer=milvus__pb2.GetFlushStateRequest.SerializeToString, response_deserializer=milvus__pb2.GetFlushStateResponse.FromString, ) + self.GetFlushAllState = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetFlushAllState', + request_serializer=milvus__pb2.GetFlushAllStateRequest.SerializeToString, + response_deserializer=milvus__pb2.GetFlushAllStateResponse.FromString, + ) self.GetPersistentSegmentInfo = channel.unary_unary( '/milvus.proto.milvus.MilvusService/GetPersistentSegmentInfo', request_serializer=milvus__pb2.GetPersistentSegmentInfoRequest.SerializeToString, @@ -175,6 +281,11 @@ def __init__(self, channel): request_serializer=milvus__pb2.GetQuerySegmentInfoRequest.SerializeToString, response_deserializer=milvus__pb2.GetQuerySegmentInfoResponse.FromString, ) + self.GetReplicas = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetReplicas', + request_serializer=milvus__pb2.GetReplicasRequest.SerializeToString, + response_deserializer=milvus__pb2.GetReplicasResponse.FromString, + ) self.Dummy = channel.unary_unary( '/milvus.proto.milvus.MilvusService/Dummy', request_serializer=milvus__pb2.DummyRequest.SerializeToString, @@ -190,6 +301,11 @@ def __init__(self, channel): request_serializer=milvus__pb2.GetMetricsRequest.SerializeToString, response_deserializer=milvus__pb2.GetMetricsResponse.FromString, ) + self.GetComponentStates = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetComponentStates', + request_serializer=milvus__pb2.GetComponentStatesRequest.SerializeToString, + response_deserializer=milvus__pb2.ComponentStates.FromString, + ) self.LoadBalance = channel.unary_unary( '/milvus.proto.milvus.MilvusService/LoadBalance', request_serializer=milvus__pb2.LoadBalanceRequest.SerializeToString, @@ -210,6 +326,281 @@ def __init__(self, channel): request_serializer=milvus__pb2.GetCompactionPlansRequest.SerializeToString, response_deserializer=milvus__pb2.GetCompactionPlansResponse.FromString, ) + self.Import = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/Import', + request_serializer=milvus__pb2.ImportRequest.SerializeToString, + response_deserializer=milvus__pb2.ImportResponse.FromString, + ) + self.GetImportState = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetImportState', + request_serializer=milvus__pb2.GetImportStateRequest.SerializeToString, + response_deserializer=milvus__pb2.GetImportStateResponse.FromString, + ) + self.ListImportTasks = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListImportTasks', + request_serializer=milvus__pb2.ListImportTasksRequest.SerializeToString, + response_deserializer=milvus__pb2.ListImportTasksResponse.FromString, + ) + self.CreateCredential = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CreateCredential', + request_serializer=milvus__pb2.CreateCredentialRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.UpdateCredential = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/UpdateCredential', + request_serializer=milvus__pb2.UpdateCredentialRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DeleteCredential = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DeleteCredential', + request_serializer=milvus__pb2.DeleteCredentialRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListCredUsers = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListCredUsers', + request_serializer=milvus__pb2.ListCredUsersRequest.SerializeToString, + response_deserializer=milvus__pb2.ListCredUsersResponse.FromString, + ) + self.CreateRole = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CreateRole', + request_serializer=milvus__pb2.CreateRoleRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DropRole = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DropRole', + request_serializer=milvus__pb2.DropRoleRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.OperateUserRole = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/OperateUserRole', + request_serializer=milvus__pb2.OperateUserRoleRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.SelectRole = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/SelectRole', + request_serializer=milvus__pb2.SelectRoleRequest.SerializeToString, + response_deserializer=milvus__pb2.SelectRoleResponse.FromString, + ) + self.SelectUser = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/SelectUser', + request_serializer=milvus__pb2.SelectUserRequest.SerializeToString, + response_deserializer=milvus__pb2.SelectUserResponse.FromString, + ) + self.OperatePrivilege = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/OperatePrivilege', + request_serializer=milvus__pb2.OperatePrivilegeRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.OperatePrivilegeV2 = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/OperatePrivilegeV2', + request_serializer=milvus__pb2.OperatePrivilegeV2Request.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.SelectGrant = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/SelectGrant', + request_serializer=milvus__pb2.SelectGrantRequest.SerializeToString, + response_deserializer=milvus__pb2.SelectGrantResponse.FromString, + ) + self.GetVersion = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetVersion', + request_serializer=milvus__pb2.GetVersionRequest.SerializeToString, + response_deserializer=milvus__pb2.GetVersionResponse.FromString, + ) + self.CheckHealth = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CheckHealth', + request_serializer=milvus__pb2.CheckHealthRequest.SerializeToString, + response_deserializer=milvus__pb2.CheckHealthResponse.FromString, + ) + self.CreateResourceGroup = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CreateResourceGroup', + request_serializer=milvus__pb2.CreateResourceGroupRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DropResourceGroup = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DropResourceGroup', + request_serializer=milvus__pb2.DropResourceGroupRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.UpdateResourceGroups = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/UpdateResourceGroups', + request_serializer=milvus__pb2.UpdateResourceGroupsRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.TransferNode = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/TransferNode', + request_serializer=milvus__pb2.TransferNodeRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.TransferReplica = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/TransferReplica', + request_serializer=milvus__pb2.TransferReplicaRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListResourceGroups = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListResourceGroups', + request_serializer=milvus__pb2.ListResourceGroupsRequest.SerializeToString, + response_deserializer=milvus__pb2.ListResourceGroupsResponse.FromString, + ) + self.DescribeResourceGroup = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DescribeResourceGroup', + request_serializer=milvus__pb2.DescribeResourceGroupRequest.SerializeToString, + response_deserializer=milvus__pb2.DescribeResourceGroupResponse.FromString, + ) + self.RenameCollection = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/RenameCollection', + request_serializer=milvus__pb2.RenameCollectionRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListIndexedSegment = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListIndexedSegment', + request_serializer=feder__pb2.ListIndexedSegmentRequest.SerializeToString, + response_deserializer=feder__pb2.ListIndexedSegmentResponse.FromString, + ) + self.DescribeSegmentIndexData = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DescribeSegmentIndexData', + request_serializer=feder__pb2.DescribeSegmentIndexDataRequest.SerializeToString, + response_deserializer=feder__pb2.DescribeSegmentIndexDataResponse.FromString, + ) + self.Connect = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/Connect', + request_serializer=milvus__pb2.ConnectRequest.SerializeToString, + response_deserializer=milvus__pb2.ConnectResponse.FromString, + ) + self.AllocTimestamp = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AllocTimestamp', + request_serializer=milvus__pb2.AllocTimestampRequest.SerializeToString, + response_deserializer=milvus__pb2.AllocTimestampResponse.FromString, + ) + self.CreateDatabase = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CreateDatabase', + request_serializer=milvus__pb2.CreateDatabaseRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DropDatabase = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DropDatabase', + request_serializer=milvus__pb2.DropDatabaseRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListDatabases = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListDatabases', + request_serializer=milvus__pb2.ListDatabasesRequest.SerializeToString, + response_deserializer=milvus__pb2.ListDatabasesResponse.FromString, + ) + self.AlterDatabase = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AlterDatabase', + request_serializer=milvus__pb2.AlterDatabaseRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DescribeDatabase = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DescribeDatabase', + request_serializer=milvus__pb2.DescribeDatabaseRequest.SerializeToString, + response_deserializer=milvus__pb2.DescribeDatabaseResponse.FromString, + ) + self.ReplicateMessage = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ReplicateMessage', + request_serializer=milvus__pb2.ReplicateMessageRequest.SerializeToString, + response_deserializer=milvus__pb2.ReplicateMessageResponse.FromString, + ) + self.BackupRBAC = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/BackupRBAC', + request_serializer=milvus__pb2.BackupRBACMetaRequest.SerializeToString, + response_deserializer=milvus__pb2.BackupRBACMetaResponse.FromString, + ) + self.RestoreRBAC = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/RestoreRBAC', + request_serializer=milvus__pb2.RestoreRBACMetaRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.CreatePrivilegeGroup = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CreatePrivilegeGroup', + request_serializer=milvus__pb2.CreatePrivilegeGroupRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DropPrivilegeGroup = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DropPrivilegeGroup', + request_serializer=milvus__pb2.DropPrivilegeGroupRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListPrivilegeGroups = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListPrivilegeGroups', + request_serializer=milvus__pb2.ListPrivilegeGroupsRequest.SerializeToString, + response_deserializer=milvus__pb2.ListPrivilegeGroupsResponse.FromString, + ) + self.OperatePrivilegeGroup = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/OperatePrivilegeGroup', + request_serializer=milvus__pb2.OperatePrivilegeGroupRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.RunAnalyzer = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/RunAnalyzer', + request_serializer=milvus__pb2.RunAnalyzerRequest.SerializeToString, + response_deserializer=milvus__pb2.RunAnalyzerResponse.FromString, + ) + self.AddFileResource = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AddFileResource', + request_serializer=milvus__pb2.AddFileResourceRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.RemoveFileResource = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/RemoveFileResource', + request_serializer=milvus__pb2.RemoveFileResourceRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListFileResources = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListFileResources', + request_serializer=milvus__pb2.ListFileResourcesRequest.SerializeToString, + response_deserializer=milvus__pb2.ListFileResourcesResponse.FromString, + ) + self.AddUserTags = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/AddUserTags', + request_serializer=milvus__pb2.AddUserTagsRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DeleteUserTags = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DeleteUserTags', + request_serializer=milvus__pb2.DeleteUserTagsRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.GetUserTags = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetUserTags', + request_serializer=milvus__pb2.GetUserTagsRequest.SerializeToString, + response_deserializer=milvus__pb2.GetUserTagsResponse.FromString, + ) + self.ListUsersWithTag = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListUsersWithTag', + request_serializer=milvus__pb2.ListUsersWithTagRequest.SerializeToString, + response_deserializer=milvus__pb2.ListUsersWithTagResponse.FromString, + ) + self.CreateRowPolicy = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/CreateRowPolicy', + request_serializer=milvus__pb2.CreateRowPolicyRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.DropRowPolicy = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/DropRowPolicy', + request_serializer=milvus__pb2.DropRowPolicyRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.ListRowPolicies = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/ListRowPolicies', + request_serializer=milvus__pb2.ListRowPoliciesRequest.SerializeToString, + response_deserializer=milvus__pb2.ListRowPoliciesResponse.FromString, + ) + self.UpdateReplicateConfiguration = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/UpdateReplicateConfiguration', + request_serializer=milvus__pb2.UpdateReplicateConfigurationRequest.SerializeToString, + response_deserializer=common__pb2.Status.FromString, + ) + self.GetReplicateInfo = channel.unary_unary( + '/milvus.proto.milvus.MilvusService/GetReplicateInfo', + request_serializer=milvus__pb2.GetReplicateInfoRequest.SerializeToString, + response_deserializer=milvus__pb2.GetReplicateInfoResponse.FromString, + ) + self.CreateReplicateStream = channel.stream_stream( + '/milvus.proto.milvus.MilvusService/CreateReplicateStream', + request_serializer=milvus__pb2.ReplicateRequest.SerializeToString, + response_deserializer=milvus__pb2.ReplicateResponse.FromString, + ) class MilvusServiceServicer(object): @@ -251,6 +642,12 @@ def DescribeCollection(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def BatchDescribeCollection(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetCollectionStatistics(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -263,6 +660,36 @@ def ShowCollections(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def AlterCollection(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AlterCollectionField(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddCollectionFunction(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AlterCollectionFunction(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DropCollectionFunction(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def CreatePartition(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -305,6 +732,18 @@ def ShowPartitions(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetLoadingProgress(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetLoadState(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def CreateAlias(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -323,26 +762,52 @@ def AlterAlias(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def DescribeAlias(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListAliases(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def CreateIndex(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def AlterIndex(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def DescribeIndex(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') - def GetIndexState(self, request, context): + def GetIndexStatistics(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetIndexState(self, request, context): + """Deprecated: use DescribeIndex instead + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetIndexBuildProgress(self, request, context): - """Missing associated documentation comment in .proto file.""" + """Deprecated: use DescribeIndex instead + """ context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') @@ -365,12 +830,24 @@ def Delete(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def Upsert(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def Search(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def HybridSearch(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def Flush(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -389,12 +866,30 @@ def CalcDistance(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def FlushAll(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddCollectionField(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetFlushState(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetFlushAllState(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def GetPersistentSegmentInfo(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -407,6 +902,12 @@ def GetQuerySegmentInfo(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetReplicas(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def Dummy(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -427,6 +928,12 @@ def GetMetrics(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def GetComponentStates(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def LoadBalance(self, request, context): """Missing associated documentation comment in .proto file.""" context.set_code(grpc.StatusCode.UNIMPLEMENTED) @@ -451,49 +958,435 @@ def GetCompactionStateWithPlans(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def Import(self, request, context): + """https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') -def add_MilvusServiceServicer_to_server(servicer, server): - rpc_method_handlers = { - 'CreateCollection': grpc.unary_unary_rpc_method_handler( - servicer.CreateCollection, - request_deserializer=milvus__pb2.CreateCollectionRequest.FromString, - response_serializer=common__pb2.Status.SerializeToString, - ), - 'DropCollection': grpc.unary_unary_rpc_method_handler( - servicer.DropCollection, - request_deserializer=milvus__pb2.DropCollectionRequest.FromString, - response_serializer=common__pb2.Status.SerializeToString, - ), - 'HasCollection': grpc.unary_unary_rpc_method_handler( - servicer.HasCollection, - request_deserializer=milvus__pb2.HasCollectionRequest.FromString, - response_serializer=milvus__pb2.BoolResponse.SerializeToString, - ), - 'LoadCollection': grpc.unary_unary_rpc_method_handler( - servicer.LoadCollection, - request_deserializer=milvus__pb2.LoadCollectionRequest.FromString, - response_serializer=common__pb2.Status.SerializeToString, - ), - 'ReleaseCollection': grpc.unary_unary_rpc_method_handler( - servicer.ReleaseCollection, - request_deserializer=milvus__pb2.ReleaseCollectionRequest.FromString, - response_serializer=common__pb2.Status.SerializeToString, - ), - 'DescribeCollection': grpc.unary_unary_rpc_method_handler( - servicer.DescribeCollection, - request_deserializer=milvus__pb2.DescribeCollectionRequest.FromString, - response_serializer=milvus__pb2.DescribeCollectionResponse.SerializeToString, - ), - 'GetCollectionStatistics': grpc.unary_unary_rpc_method_handler( - servicer.GetCollectionStatistics, - request_deserializer=milvus__pb2.GetCollectionStatisticsRequest.FromString, - response_serializer=milvus__pb2.GetCollectionStatisticsResponse.SerializeToString, - ), - 'ShowCollections': grpc.unary_unary_rpc_method_handler( - servicer.ShowCollections, + def GetImportState(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListImportTasks(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateCredential(self, request, context): + """https://wiki.lfaidata.foundation/display/MIL/MEP+27+--+Support+Basic+Authentication + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateCredential(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteCredential(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListCredUsers(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateRole(self, request, context): + """https://wiki.lfaidata.foundation/display/MIL/MEP+29+--+Support+Role-Based+Access+Control + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DropRole(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def OperateUserRole(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SelectRole(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SelectUser(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def OperatePrivilege(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def OperatePrivilegeV2(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def SelectGrant(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetVersion(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CheckHealth(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateResourceGroup(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DropResourceGroup(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateResourceGroups(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TransferNode(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TransferReplica(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListResourceGroups(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DescribeResourceGroup(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RenameCollection(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListIndexedSegment(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DescribeSegmentIndexData(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Connect(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AllocTimestamp(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateDatabase(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DropDatabase(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListDatabases(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AlterDatabase(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DescribeDatabase(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ReplicateMessage(self, request, context): + """Deprecated CDC API + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def BackupRBAC(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RestoreRBAC(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreatePrivilegeGroup(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DropPrivilegeGroup(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListPrivilegeGroups(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def OperatePrivilegeGroup(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RunAnalyzer(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddFileResource(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def RemoveFileResource(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListFileResources(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def AddUserTags(self, request, context): + """Row Level Security (RLS) APIs + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DeleteUserTags(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetUserTags(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListUsersWithTag(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateRowPolicy(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def DropRowPolicy(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def ListRowPolicies(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdateReplicateConfiguration(self, request, context): + """CDC v2 APIs + UpdateReplicateConfiguration applies a full replacement of the current + replication configuration across Milvus clusters. + + Semantics: + - The provided ReplicateConfiguration completely replaces any existing + configuration persisted in the metadata store. + - Passing an empty ReplicateConfiguration is treated as a "clear" + operation, effectively removing all replication configuration. + - The RPC is expected to be idempotent: submitting the same configuration + multiple times must not cause side effects. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetReplicateInfo(self, request, context): + """ + GetReplicateInfo retrieves replication-related metadata of specified channel from a target Milvus cluster. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def CreateReplicateStream(self, request_iterator, context): + """ + CreateReplicateStream establishes a replication stream on the target Milvus cluster. + + Semantics: + - Sets up a continuous data stream that receives replicated messages + (DDL, insert, delete, etc.) from the source cluster via CDC. + - Once established, the target cluster persists incoming messages into + its WAL (Write-Ahead Log) ensuring durability and consistency. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_MilvusServiceServicer_to_server(servicer, server): + rpc_method_handlers = { + 'CreateCollection': grpc.unary_unary_rpc_method_handler( + servicer.CreateCollection, + request_deserializer=milvus__pb2.CreateCollectionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropCollection': grpc.unary_unary_rpc_method_handler( + servicer.DropCollection, + request_deserializer=milvus__pb2.DropCollectionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'HasCollection': grpc.unary_unary_rpc_method_handler( + servicer.HasCollection, + request_deserializer=milvus__pb2.HasCollectionRequest.FromString, + response_serializer=milvus__pb2.BoolResponse.SerializeToString, + ), + 'LoadCollection': grpc.unary_unary_rpc_method_handler( + servicer.LoadCollection, + request_deserializer=milvus__pb2.LoadCollectionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ReleaseCollection': grpc.unary_unary_rpc_method_handler( + servicer.ReleaseCollection, + request_deserializer=milvus__pb2.ReleaseCollectionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DescribeCollection': grpc.unary_unary_rpc_method_handler( + servicer.DescribeCollection, + request_deserializer=milvus__pb2.DescribeCollectionRequest.FromString, + response_serializer=milvus__pb2.DescribeCollectionResponse.SerializeToString, + ), + 'BatchDescribeCollection': grpc.unary_unary_rpc_method_handler( + servicer.BatchDescribeCollection, + request_deserializer=milvus__pb2.BatchDescribeCollectionRequest.FromString, + response_serializer=milvus__pb2.BatchDescribeCollectionResponse.SerializeToString, + ), + 'GetCollectionStatistics': grpc.unary_unary_rpc_method_handler( + servicer.GetCollectionStatistics, + request_deserializer=milvus__pb2.GetCollectionStatisticsRequest.FromString, + response_serializer=milvus__pb2.GetCollectionStatisticsResponse.SerializeToString, + ), + 'ShowCollections': grpc.unary_unary_rpc_method_handler( + servicer.ShowCollections, request_deserializer=milvus__pb2.ShowCollectionsRequest.FromString, response_serializer=milvus__pb2.ShowCollectionsResponse.SerializeToString, ), + 'AlterCollection': grpc.unary_unary_rpc_method_handler( + servicer.AlterCollection, + request_deserializer=milvus__pb2.AlterCollectionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'AlterCollectionField': grpc.unary_unary_rpc_method_handler( + servicer.AlterCollectionField, + request_deserializer=milvus__pb2.AlterCollectionFieldRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'AddCollectionFunction': grpc.unary_unary_rpc_method_handler( + servicer.AddCollectionFunction, + request_deserializer=milvus__pb2.AddCollectionFunctionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'AlterCollectionFunction': grpc.unary_unary_rpc_method_handler( + servicer.AlterCollectionFunction, + request_deserializer=milvus__pb2.AlterCollectionFunctionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropCollectionFunction': grpc.unary_unary_rpc_method_handler( + servicer.DropCollectionFunction, + request_deserializer=milvus__pb2.DropCollectionFunctionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), 'CreatePartition': grpc.unary_unary_rpc_method_handler( servicer.CreatePartition, request_deserializer=milvus__pb2.CreatePartitionRequest.FromString, @@ -529,6 +1422,16 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.ShowPartitionsRequest.FromString, response_serializer=milvus__pb2.ShowPartitionsResponse.SerializeToString, ), + 'GetLoadingProgress': grpc.unary_unary_rpc_method_handler( + servicer.GetLoadingProgress, + request_deserializer=milvus__pb2.GetLoadingProgressRequest.FromString, + response_serializer=milvus__pb2.GetLoadingProgressResponse.SerializeToString, + ), + 'GetLoadState': grpc.unary_unary_rpc_method_handler( + servicer.GetLoadState, + request_deserializer=milvus__pb2.GetLoadStateRequest.FromString, + response_serializer=milvus__pb2.GetLoadStateResponse.SerializeToString, + ), 'CreateAlias': grpc.unary_unary_rpc_method_handler( servicer.CreateAlias, request_deserializer=milvus__pb2.CreateAliasRequest.FromString, @@ -544,16 +1447,36 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.AlterAliasRequest.FromString, response_serializer=common__pb2.Status.SerializeToString, ), + 'DescribeAlias': grpc.unary_unary_rpc_method_handler( + servicer.DescribeAlias, + request_deserializer=milvus__pb2.DescribeAliasRequest.FromString, + response_serializer=milvus__pb2.DescribeAliasResponse.SerializeToString, + ), + 'ListAliases': grpc.unary_unary_rpc_method_handler( + servicer.ListAliases, + request_deserializer=milvus__pb2.ListAliasesRequest.FromString, + response_serializer=milvus__pb2.ListAliasesResponse.SerializeToString, + ), 'CreateIndex': grpc.unary_unary_rpc_method_handler( servicer.CreateIndex, request_deserializer=milvus__pb2.CreateIndexRequest.FromString, response_serializer=common__pb2.Status.SerializeToString, ), + 'AlterIndex': grpc.unary_unary_rpc_method_handler( + servicer.AlterIndex, + request_deserializer=milvus__pb2.AlterIndexRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), 'DescribeIndex': grpc.unary_unary_rpc_method_handler( servicer.DescribeIndex, request_deserializer=milvus__pb2.DescribeIndexRequest.FromString, response_serializer=milvus__pb2.DescribeIndexResponse.SerializeToString, ), + 'GetIndexStatistics': grpc.unary_unary_rpc_method_handler( + servicer.GetIndexStatistics, + request_deserializer=milvus__pb2.GetIndexStatisticsRequest.FromString, + response_serializer=milvus__pb2.GetIndexStatisticsResponse.SerializeToString, + ), 'GetIndexState': grpc.unary_unary_rpc_method_handler( servicer.GetIndexState, request_deserializer=milvus__pb2.GetIndexStateRequest.FromString, @@ -579,11 +1502,21 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.DeleteRequest.FromString, response_serializer=milvus__pb2.MutationResult.SerializeToString, ), + 'Upsert': grpc.unary_unary_rpc_method_handler( + servicer.Upsert, + request_deserializer=milvus__pb2.UpsertRequest.FromString, + response_serializer=milvus__pb2.MutationResult.SerializeToString, + ), 'Search': grpc.unary_unary_rpc_method_handler( servicer.Search, request_deserializer=milvus__pb2.SearchRequest.FromString, response_serializer=milvus__pb2.SearchResults.SerializeToString, ), + 'HybridSearch': grpc.unary_unary_rpc_method_handler( + servicer.HybridSearch, + request_deserializer=milvus__pb2.HybridSearchRequest.FromString, + response_serializer=milvus__pb2.SearchResults.SerializeToString, + ), 'Flush': grpc.unary_unary_rpc_method_handler( servicer.Flush, request_deserializer=milvus__pb2.FlushRequest.FromString, @@ -599,11 +1532,26 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.CalcDistanceRequest.FromString, response_serializer=milvus__pb2.CalcDistanceResults.SerializeToString, ), + 'FlushAll': grpc.unary_unary_rpc_method_handler( + servicer.FlushAll, + request_deserializer=milvus__pb2.FlushAllRequest.FromString, + response_serializer=milvus__pb2.FlushAllResponse.SerializeToString, + ), + 'AddCollectionField': grpc.unary_unary_rpc_method_handler( + servicer.AddCollectionField, + request_deserializer=milvus__pb2.AddCollectionFieldRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), 'GetFlushState': grpc.unary_unary_rpc_method_handler( servicer.GetFlushState, request_deserializer=milvus__pb2.GetFlushStateRequest.FromString, response_serializer=milvus__pb2.GetFlushStateResponse.SerializeToString, ), + 'GetFlushAllState': grpc.unary_unary_rpc_method_handler( + servicer.GetFlushAllState, + request_deserializer=milvus__pb2.GetFlushAllStateRequest.FromString, + response_serializer=milvus__pb2.GetFlushAllStateResponse.SerializeToString, + ), 'GetPersistentSegmentInfo': grpc.unary_unary_rpc_method_handler( servicer.GetPersistentSegmentInfo, request_deserializer=milvus__pb2.GetPersistentSegmentInfoRequest.FromString, @@ -614,6 +1562,11 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.GetQuerySegmentInfoRequest.FromString, response_serializer=milvus__pb2.GetQuerySegmentInfoResponse.SerializeToString, ), + 'GetReplicas': grpc.unary_unary_rpc_method_handler( + servicer.GetReplicas, + request_deserializer=milvus__pb2.GetReplicasRequest.FromString, + response_serializer=milvus__pb2.GetReplicasResponse.SerializeToString, + ), 'Dummy': grpc.unary_unary_rpc_method_handler( servicer.Dummy, request_deserializer=milvus__pb2.DummyRequest.FromString, @@ -629,6 +1582,11 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.GetMetricsRequest.FromString, response_serializer=milvus__pb2.GetMetricsResponse.SerializeToString, ), + 'GetComponentStates': grpc.unary_unary_rpc_method_handler( + servicer.GetComponentStates, + request_deserializer=milvus__pb2.GetComponentStatesRequest.FromString, + response_serializer=milvus__pb2.ComponentStates.SerializeToString, + ), 'LoadBalance': grpc.unary_unary_rpc_method_handler( servicer.LoadBalance, request_deserializer=milvus__pb2.LoadBalanceRequest.FromString, @@ -649,18 +1607,2076 @@ def add_MilvusServiceServicer_to_server(servicer, server): request_deserializer=milvus__pb2.GetCompactionPlansRequest.FromString, response_serializer=milvus__pb2.GetCompactionPlansResponse.SerializeToString, ), + 'Import': grpc.unary_unary_rpc_method_handler( + servicer.Import, + request_deserializer=milvus__pb2.ImportRequest.FromString, + response_serializer=milvus__pb2.ImportResponse.SerializeToString, + ), + 'GetImportState': grpc.unary_unary_rpc_method_handler( + servicer.GetImportState, + request_deserializer=milvus__pb2.GetImportStateRequest.FromString, + response_serializer=milvus__pb2.GetImportStateResponse.SerializeToString, + ), + 'ListImportTasks': grpc.unary_unary_rpc_method_handler( + servicer.ListImportTasks, + request_deserializer=milvus__pb2.ListImportTasksRequest.FromString, + response_serializer=milvus__pb2.ListImportTasksResponse.SerializeToString, + ), + 'CreateCredential': grpc.unary_unary_rpc_method_handler( + servicer.CreateCredential, + request_deserializer=milvus__pb2.CreateCredentialRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'UpdateCredential': grpc.unary_unary_rpc_method_handler( + servicer.UpdateCredential, + request_deserializer=milvus__pb2.UpdateCredentialRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DeleteCredential': grpc.unary_unary_rpc_method_handler( + servicer.DeleteCredential, + request_deserializer=milvus__pb2.DeleteCredentialRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListCredUsers': grpc.unary_unary_rpc_method_handler( + servicer.ListCredUsers, + request_deserializer=milvus__pb2.ListCredUsersRequest.FromString, + response_serializer=milvus__pb2.ListCredUsersResponse.SerializeToString, + ), + 'CreateRole': grpc.unary_unary_rpc_method_handler( + servicer.CreateRole, + request_deserializer=milvus__pb2.CreateRoleRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropRole': grpc.unary_unary_rpc_method_handler( + servicer.DropRole, + request_deserializer=milvus__pb2.DropRoleRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'OperateUserRole': grpc.unary_unary_rpc_method_handler( + servicer.OperateUserRole, + request_deserializer=milvus__pb2.OperateUserRoleRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'SelectRole': grpc.unary_unary_rpc_method_handler( + servicer.SelectRole, + request_deserializer=milvus__pb2.SelectRoleRequest.FromString, + response_serializer=milvus__pb2.SelectRoleResponse.SerializeToString, + ), + 'SelectUser': grpc.unary_unary_rpc_method_handler( + servicer.SelectUser, + request_deserializer=milvus__pb2.SelectUserRequest.FromString, + response_serializer=milvus__pb2.SelectUserResponse.SerializeToString, + ), + 'OperatePrivilege': grpc.unary_unary_rpc_method_handler( + servicer.OperatePrivilege, + request_deserializer=milvus__pb2.OperatePrivilegeRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'OperatePrivilegeV2': grpc.unary_unary_rpc_method_handler( + servicer.OperatePrivilegeV2, + request_deserializer=milvus__pb2.OperatePrivilegeV2Request.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'SelectGrant': grpc.unary_unary_rpc_method_handler( + servicer.SelectGrant, + request_deserializer=milvus__pb2.SelectGrantRequest.FromString, + response_serializer=milvus__pb2.SelectGrantResponse.SerializeToString, + ), + 'GetVersion': grpc.unary_unary_rpc_method_handler( + servicer.GetVersion, + request_deserializer=milvus__pb2.GetVersionRequest.FromString, + response_serializer=milvus__pb2.GetVersionResponse.SerializeToString, + ), + 'CheckHealth': grpc.unary_unary_rpc_method_handler( + servicer.CheckHealth, + request_deserializer=milvus__pb2.CheckHealthRequest.FromString, + response_serializer=milvus__pb2.CheckHealthResponse.SerializeToString, + ), + 'CreateResourceGroup': grpc.unary_unary_rpc_method_handler( + servicer.CreateResourceGroup, + request_deserializer=milvus__pb2.CreateResourceGroupRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropResourceGroup': grpc.unary_unary_rpc_method_handler( + servicer.DropResourceGroup, + request_deserializer=milvus__pb2.DropResourceGroupRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'UpdateResourceGroups': grpc.unary_unary_rpc_method_handler( + servicer.UpdateResourceGroups, + request_deserializer=milvus__pb2.UpdateResourceGroupsRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'TransferNode': grpc.unary_unary_rpc_method_handler( + servicer.TransferNode, + request_deserializer=milvus__pb2.TransferNodeRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'TransferReplica': grpc.unary_unary_rpc_method_handler( + servicer.TransferReplica, + request_deserializer=milvus__pb2.TransferReplicaRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListResourceGroups': grpc.unary_unary_rpc_method_handler( + servicer.ListResourceGroups, + request_deserializer=milvus__pb2.ListResourceGroupsRequest.FromString, + response_serializer=milvus__pb2.ListResourceGroupsResponse.SerializeToString, + ), + 'DescribeResourceGroup': grpc.unary_unary_rpc_method_handler( + servicer.DescribeResourceGroup, + request_deserializer=milvus__pb2.DescribeResourceGroupRequest.FromString, + response_serializer=milvus__pb2.DescribeResourceGroupResponse.SerializeToString, + ), + 'RenameCollection': grpc.unary_unary_rpc_method_handler( + servicer.RenameCollection, + request_deserializer=milvus__pb2.RenameCollectionRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListIndexedSegment': grpc.unary_unary_rpc_method_handler( + servicer.ListIndexedSegment, + request_deserializer=feder__pb2.ListIndexedSegmentRequest.FromString, + response_serializer=feder__pb2.ListIndexedSegmentResponse.SerializeToString, + ), + 'DescribeSegmentIndexData': grpc.unary_unary_rpc_method_handler( + servicer.DescribeSegmentIndexData, + request_deserializer=feder__pb2.DescribeSegmentIndexDataRequest.FromString, + response_serializer=feder__pb2.DescribeSegmentIndexDataResponse.SerializeToString, + ), + 'Connect': grpc.unary_unary_rpc_method_handler( + servicer.Connect, + request_deserializer=milvus__pb2.ConnectRequest.FromString, + response_serializer=milvus__pb2.ConnectResponse.SerializeToString, + ), + 'AllocTimestamp': grpc.unary_unary_rpc_method_handler( + servicer.AllocTimestamp, + request_deserializer=milvus__pb2.AllocTimestampRequest.FromString, + response_serializer=milvus__pb2.AllocTimestampResponse.SerializeToString, + ), + 'CreateDatabase': grpc.unary_unary_rpc_method_handler( + servicer.CreateDatabase, + request_deserializer=milvus__pb2.CreateDatabaseRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropDatabase': grpc.unary_unary_rpc_method_handler( + servicer.DropDatabase, + request_deserializer=milvus__pb2.DropDatabaseRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListDatabases': grpc.unary_unary_rpc_method_handler( + servicer.ListDatabases, + request_deserializer=milvus__pb2.ListDatabasesRequest.FromString, + response_serializer=milvus__pb2.ListDatabasesResponse.SerializeToString, + ), + 'AlterDatabase': grpc.unary_unary_rpc_method_handler( + servicer.AlterDatabase, + request_deserializer=milvus__pb2.AlterDatabaseRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DescribeDatabase': grpc.unary_unary_rpc_method_handler( + servicer.DescribeDatabase, + request_deserializer=milvus__pb2.DescribeDatabaseRequest.FromString, + response_serializer=milvus__pb2.DescribeDatabaseResponse.SerializeToString, + ), + 'ReplicateMessage': grpc.unary_unary_rpc_method_handler( + servicer.ReplicateMessage, + request_deserializer=milvus__pb2.ReplicateMessageRequest.FromString, + response_serializer=milvus__pb2.ReplicateMessageResponse.SerializeToString, + ), + 'BackupRBAC': grpc.unary_unary_rpc_method_handler( + servicer.BackupRBAC, + request_deserializer=milvus__pb2.BackupRBACMetaRequest.FromString, + response_serializer=milvus__pb2.BackupRBACMetaResponse.SerializeToString, + ), + 'RestoreRBAC': grpc.unary_unary_rpc_method_handler( + servicer.RestoreRBAC, + request_deserializer=milvus__pb2.RestoreRBACMetaRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'CreatePrivilegeGroup': grpc.unary_unary_rpc_method_handler( + servicer.CreatePrivilegeGroup, + request_deserializer=milvus__pb2.CreatePrivilegeGroupRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropPrivilegeGroup': grpc.unary_unary_rpc_method_handler( + servicer.DropPrivilegeGroup, + request_deserializer=milvus__pb2.DropPrivilegeGroupRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListPrivilegeGroups': grpc.unary_unary_rpc_method_handler( + servicer.ListPrivilegeGroups, + request_deserializer=milvus__pb2.ListPrivilegeGroupsRequest.FromString, + response_serializer=milvus__pb2.ListPrivilegeGroupsResponse.SerializeToString, + ), + 'OperatePrivilegeGroup': grpc.unary_unary_rpc_method_handler( + servicer.OperatePrivilegeGroup, + request_deserializer=milvus__pb2.OperatePrivilegeGroupRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'RunAnalyzer': grpc.unary_unary_rpc_method_handler( + servicer.RunAnalyzer, + request_deserializer=milvus__pb2.RunAnalyzerRequest.FromString, + response_serializer=milvus__pb2.RunAnalyzerResponse.SerializeToString, + ), + 'AddFileResource': grpc.unary_unary_rpc_method_handler( + servicer.AddFileResource, + request_deserializer=milvus__pb2.AddFileResourceRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'RemoveFileResource': grpc.unary_unary_rpc_method_handler( + servicer.RemoveFileResource, + request_deserializer=milvus__pb2.RemoveFileResourceRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListFileResources': grpc.unary_unary_rpc_method_handler( + servicer.ListFileResources, + request_deserializer=milvus__pb2.ListFileResourcesRequest.FromString, + response_serializer=milvus__pb2.ListFileResourcesResponse.SerializeToString, + ), + 'AddUserTags': grpc.unary_unary_rpc_method_handler( + servicer.AddUserTags, + request_deserializer=milvus__pb2.AddUserTagsRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DeleteUserTags': grpc.unary_unary_rpc_method_handler( + servicer.DeleteUserTags, + request_deserializer=milvus__pb2.DeleteUserTagsRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'GetUserTags': grpc.unary_unary_rpc_method_handler( + servicer.GetUserTags, + request_deserializer=milvus__pb2.GetUserTagsRequest.FromString, + response_serializer=milvus__pb2.GetUserTagsResponse.SerializeToString, + ), + 'ListUsersWithTag': grpc.unary_unary_rpc_method_handler( + servicer.ListUsersWithTag, + request_deserializer=milvus__pb2.ListUsersWithTagRequest.FromString, + response_serializer=milvus__pb2.ListUsersWithTagResponse.SerializeToString, + ), + 'CreateRowPolicy': grpc.unary_unary_rpc_method_handler( + servicer.CreateRowPolicy, + request_deserializer=milvus__pb2.CreateRowPolicyRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'DropRowPolicy': grpc.unary_unary_rpc_method_handler( + servicer.DropRowPolicy, + request_deserializer=milvus__pb2.DropRowPolicyRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'ListRowPolicies': grpc.unary_unary_rpc_method_handler( + servicer.ListRowPolicies, + request_deserializer=milvus__pb2.ListRowPoliciesRequest.FromString, + response_serializer=milvus__pb2.ListRowPoliciesResponse.SerializeToString, + ), + 'UpdateReplicateConfiguration': grpc.unary_unary_rpc_method_handler( + servicer.UpdateReplicateConfiguration, + request_deserializer=milvus__pb2.UpdateReplicateConfigurationRequest.FromString, + response_serializer=common__pb2.Status.SerializeToString, + ), + 'GetReplicateInfo': grpc.unary_unary_rpc_method_handler( + servicer.GetReplicateInfo, + request_deserializer=milvus__pb2.GetReplicateInfoRequest.FromString, + response_serializer=milvus__pb2.GetReplicateInfoResponse.SerializeToString, + ), + 'CreateReplicateStream': grpc.stream_stream_rpc_method_handler( + servicer.CreateReplicateStream, + request_deserializer=milvus__pb2.ReplicateRequest.FromString, + response_serializer=milvus__pb2.ReplicateResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'milvus.proto.milvus.MilvusService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('milvus.proto.milvus.MilvusService', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class MilvusService(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def CreateCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateCollection', + milvus__pb2.CreateCollectionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DropCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropCollection', + milvus__pb2.DropCollectionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def HasCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/HasCollection', + milvus__pb2.HasCollectionRequest.SerializeToString, + milvus__pb2.BoolResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def LoadCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/LoadCollection', + milvus__pb2.LoadCollectionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ReleaseCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ReleaseCollection', + milvus__pb2.ReleaseCollectionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DescribeCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DescribeCollection', + milvus__pb2.DescribeCollectionRequest.SerializeToString, + milvus__pb2.DescribeCollectionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def BatchDescribeCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/BatchDescribeCollection', + milvus__pb2.BatchDescribeCollectionRequest.SerializeToString, + milvus__pb2.BatchDescribeCollectionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetCollectionStatistics(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetCollectionStatistics', + milvus__pb2.GetCollectionStatisticsRequest.SerializeToString, + milvus__pb2.GetCollectionStatisticsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ShowCollections(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ShowCollections', + milvus__pb2.ShowCollectionsRequest.SerializeToString, + milvus__pb2.ShowCollectionsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AlterCollection(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AlterCollection', + milvus__pb2.AlterCollectionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AlterCollectionField(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AlterCollectionField', + milvus__pb2.AlterCollectionFieldRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AddCollectionFunction(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AddCollectionFunction', + milvus__pb2.AddCollectionFunctionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AlterCollectionFunction(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AlterCollectionFunction', + milvus__pb2.AlterCollectionFunctionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DropCollectionFunction(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropCollectionFunction', + milvus__pb2.DropCollectionFunctionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreatePartition(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreatePartition', + milvus__pb2.CreatePartitionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DropPartition(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropPartition', + milvus__pb2.DropPartitionRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def HasPartition(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/HasPartition', + milvus__pb2.HasPartitionRequest.SerializeToString, + milvus__pb2.BoolResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def LoadPartitions(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/LoadPartitions', + milvus__pb2.LoadPartitionsRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ReleasePartitions(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ReleasePartitions', + milvus__pb2.ReleasePartitionsRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetPartitionStatistics(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetPartitionStatistics', + milvus__pb2.GetPartitionStatisticsRequest.SerializeToString, + milvus__pb2.GetPartitionStatisticsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ShowPartitions(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ShowPartitions', + milvus__pb2.ShowPartitionsRequest.SerializeToString, + milvus__pb2.ShowPartitionsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetLoadingProgress(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetLoadingProgress', + milvus__pb2.GetLoadingProgressRequest.SerializeToString, + milvus__pb2.GetLoadingProgressResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetLoadState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetLoadState', + milvus__pb2.GetLoadStateRequest.SerializeToString, + milvus__pb2.GetLoadStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreateAlias(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateAlias', + milvus__pb2.CreateAliasRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DropAlias(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropAlias', + milvus__pb2.DropAliasRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AlterAlias(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AlterAlias', + milvus__pb2.AlterAliasRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DescribeAlias(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DescribeAlias', + milvus__pb2.DescribeAliasRequest.SerializeToString, + milvus__pb2.DescribeAliasResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ListAliases(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListAliases', + milvus__pb2.ListAliasesRequest.SerializeToString, + milvus__pb2.ListAliasesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreateIndex(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateIndex', + milvus__pb2.CreateIndexRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AlterIndex(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AlterIndex', + milvus__pb2.AlterIndexRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DescribeIndex(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DescribeIndex', + milvus__pb2.DescribeIndexRequest.SerializeToString, + milvus__pb2.DescribeIndexResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetIndexStatistics(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetIndexStatistics', + milvus__pb2.GetIndexStatisticsRequest.SerializeToString, + milvus__pb2.GetIndexStatisticsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetIndexState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetIndexState', + milvus__pb2.GetIndexStateRequest.SerializeToString, + milvus__pb2.GetIndexStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetIndexBuildProgress(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetIndexBuildProgress', + milvus__pb2.GetIndexBuildProgressRequest.SerializeToString, + milvus__pb2.GetIndexBuildProgressResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DropIndex(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropIndex', + milvus__pb2.DropIndexRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Insert(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Insert', + milvus__pb2.InsertRequest.SerializeToString, + milvus__pb2.MutationResult.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Delete(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Delete', + milvus__pb2.DeleteRequest.SerializeToString, + milvus__pb2.MutationResult.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Upsert(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Upsert', + milvus__pb2.UpsertRequest.SerializeToString, + milvus__pb2.MutationResult.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Search(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Search', + milvus__pb2.SearchRequest.SerializeToString, + milvus__pb2.SearchResults.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def HybridSearch(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/HybridSearch', + milvus__pb2.HybridSearchRequest.SerializeToString, + milvus__pb2.SearchResults.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Flush(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Flush', + milvus__pb2.FlushRequest.SerializeToString, + milvus__pb2.FlushResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Query(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Query', + milvus__pb2.QueryRequest.SerializeToString, + milvus__pb2.QueryResults.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CalcDistance(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CalcDistance', + milvus__pb2.CalcDistanceRequest.SerializeToString, + milvus__pb2.CalcDistanceResults.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def FlushAll(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/FlushAll', + milvus__pb2.FlushAllRequest.SerializeToString, + milvus__pb2.FlushAllResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AddCollectionField(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AddCollectionField', + milvus__pb2.AddCollectionFieldRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetFlushState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetFlushState', + milvus__pb2.GetFlushStateRequest.SerializeToString, + milvus__pb2.GetFlushStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetFlushAllState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetFlushAllState', + milvus__pb2.GetFlushAllStateRequest.SerializeToString, + milvus__pb2.GetFlushAllStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + @staticmethod + def GetPersistentSegmentInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetPersistentSegmentInfo', + milvus__pb2.GetPersistentSegmentInfoRequest.SerializeToString, + milvus__pb2.GetPersistentSegmentInfoResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) - # This class is part of an EXPERIMENTAL API. -class MilvusService(object): - """Missing associated documentation comment in .proto file.""" + @staticmethod + def GetQuerySegmentInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetQuerySegmentInfo', + milvus__pb2.GetQuerySegmentInfoRequest.SerializeToString, + milvus__pb2.GetQuerySegmentInfoResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetReplicas(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetReplicas', + milvus__pb2.GetReplicasRequest.SerializeToString, + milvus__pb2.GetReplicasResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Dummy(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Dummy', + milvus__pb2.DummyRequest.SerializeToString, + milvus__pb2.DummyResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def RegisterLink(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/RegisterLink', + milvus__pb2.RegisterLinkRequest.SerializeToString, + milvus__pb2.RegisterLinkResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetMetrics(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetMetrics', + milvus__pb2.GetMetricsRequest.SerializeToString, + milvus__pb2.GetMetricsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetComponentStates(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetComponentStates', + milvus__pb2.GetComponentStatesRequest.SerializeToString, + milvus__pb2.ComponentStates.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def LoadBalance(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/LoadBalance', + milvus__pb2.LoadBalanceRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetCompactionState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetCompactionState', + milvus__pb2.GetCompactionStateRequest.SerializeToString, + milvus__pb2.GetCompactionStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ManualCompaction(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ManualCompaction', + milvus__pb2.ManualCompactionRequest.SerializeToString, + milvus__pb2.ManualCompactionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetCompactionStateWithPlans(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetCompactionStateWithPlans', + milvus__pb2.GetCompactionPlansRequest.SerializeToString, + milvus__pb2.GetCompactionPlansResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Import(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Import', + milvus__pb2.ImportRequest.SerializeToString, + milvus__pb2.ImportResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetImportState(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetImportState', + milvus__pb2.GetImportStateRequest.SerializeToString, + milvus__pb2.GetImportStateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ListImportTasks(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListImportTasks', + milvus__pb2.ListImportTasksRequest.SerializeToString, + milvus__pb2.ListImportTasksResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreateCredential(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateCredential', + milvus__pb2.CreateCredentialRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def UpdateCredential(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/UpdateCredential', + milvus__pb2.UpdateCredentialRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DeleteCredential(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DeleteCredential', + milvus__pb2.DeleteCredentialRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def ListCredUsers(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListCredUsers', + milvus__pb2.ListCredUsersRequest.SerializeToString, + milvus__pb2.ListCredUsersResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreateRole(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateRole', + milvus__pb2.CreateRoleRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def CreateCollection(request, + def DropRole(request, target, options=(), channel_credentials=None, @@ -670,14 +3686,24 @@ def CreateCollection(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/CreateCollection', - milvus__pb2.CreateCollectionRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropRole', + milvus__pb2.DropRoleRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def DropCollection(request, + def OperateUserRole(request, target, options=(), channel_credentials=None, @@ -687,14 +3713,24 @@ def DropCollection(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/DropCollection', - milvus__pb2.DropCollectionRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/OperateUserRole', + milvus__pb2.OperateUserRoleRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def HasCollection(request, + def SelectRole(request, target, options=(), channel_credentials=None, @@ -704,14 +3740,24 @@ def HasCollection(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/HasCollection', - milvus__pb2.HasCollectionRequest.SerializeToString, - milvus__pb2.BoolResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/SelectRole', + milvus__pb2.SelectRoleRequest.SerializeToString, + milvus__pb2.SelectRoleResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def LoadCollection(request, + def SelectUser(request, target, options=(), channel_credentials=None, @@ -721,14 +3767,51 @@ def LoadCollection(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/LoadCollection', - milvus__pb2.LoadCollectionRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/SelectUser', + milvus__pb2.SelectUserRequest.SerializeToString, + milvus__pb2.SelectUserResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def OperatePrivilege(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/OperatePrivilege', + milvus__pb2.OperatePrivilegeRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def ReleaseCollection(request, + def OperatePrivilegeV2(request, target, options=(), channel_credentials=None, @@ -738,14 +3821,24 @@ def ReleaseCollection(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/ReleaseCollection', - milvus__pb2.ReleaseCollectionRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/OperatePrivilegeV2', + milvus__pb2.OperatePrivilegeV2Request.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def DescribeCollection(request, + def SelectGrant(request, target, options=(), channel_credentials=None, @@ -755,14 +3848,24 @@ def DescribeCollection(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/DescribeCollection', - milvus__pb2.DescribeCollectionRequest.SerializeToString, - milvus__pb2.DescribeCollectionResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/SelectGrant', + milvus__pb2.SelectGrantRequest.SerializeToString, + milvus__pb2.SelectGrantResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetCollectionStatistics(request, + def GetVersion(request, target, options=(), channel_credentials=None, @@ -772,14 +3875,24 @@ def GetCollectionStatistics(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetCollectionStatistics', - milvus__pb2.GetCollectionStatisticsRequest.SerializeToString, - milvus__pb2.GetCollectionStatisticsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetVersion', + milvus__pb2.GetVersionRequest.SerializeToString, + milvus__pb2.GetVersionResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def ShowCollections(request, + def CheckHealth(request, target, options=(), channel_credentials=None, @@ -789,14 +3902,24 @@ def ShowCollections(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/ShowCollections', - milvus__pb2.ShowCollectionsRequest.SerializeToString, - milvus__pb2.ShowCollectionsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CheckHealth', + milvus__pb2.CheckHealthRequest.SerializeToString, + milvus__pb2.CheckHealthResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def CreatePartition(request, + def CreateResourceGroup(request, target, options=(), channel_credentials=None, @@ -806,14 +3929,24 @@ def CreatePartition(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/CreatePartition', - milvus__pb2.CreatePartitionRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateResourceGroup', + milvus__pb2.CreateResourceGroupRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def DropPartition(request, + def DropResourceGroup(request, target, options=(), channel_credentials=None, @@ -823,14 +3956,24 @@ def DropPartition(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/DropPartition', - milvus__pb2.DropPartitionRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropResourceGroup', + milvus__pb2.DropResourceGroupRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def HasPartition(request, + def UpdateResourceGroups(request, target, options=(), channel_credentials=None, @@ -840,14 +3983,24 @@ def HasPartition(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/HasPartition', - milvus__pb2.HasPartitionRequest.SerializeToString, - milvus__pb2.BoolResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/UpdateResourceGroups', + milvus__pb2.UpdateResourceGroupsRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def LoadPartitions(request, + def TransferNode(request, target, options=(), channel_credentials=None, @@ -857,14 +4010,24 @@ def LoadPartitions(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/LoadPartitions', - milvus__pb2.LoadPartitionsRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/TransferNode', + milvus__pb2.TransferNodeRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def ReleasePartitions(request, + def TransferReplica(request, target, options=(), channel_credentials=None, @@ -874,14 +4037,24 @@ def ReleasePartitions(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/ReleasePartitions', - milvus__pb2.ReleasePartitionsRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/TransferReplica', + milvus__pb2.TransferReplicaRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetPartitionStatistics(request, + def ListResourceGroups(request, target, options=(), channel_credentials=None, @@ -891,14 +4064,24 @@ def GetPartitionStatistics(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetPartitionStatistics', - milvus__pb2.GetPartitionStatisticsRequest.SerializeToString, - milvus__pb2.GetPartitionStatisticsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListResourceGroups', + milvus__pb2.ListResourceGroupsRequest.SerializeToString, + milvus__pb2.ListResourceGroupsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def ShowPartitions(request, + def DescribeResourceGroup(request, target, options=(), channel_credentials=None, @@ -908,14 +4091,24 @@ def ShowPartitions(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/ShowPartitions', - milvus__pb2.ShowPartitionsRequest.SerializeToString, - milvus__pb2.ShowPartitionsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DescribeResourceGroup', + milvus__pb2.DescribeResourceGroupRequest.SerializeToString, + milvus__pb2.DescribeResourceGroupResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def CreateAlias(request, + def RenameCollection(request, target, options=(), channel_credentials=None, @@ -925,14 +4118,24 @@ def CreateAlias(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/CreateAlias', - milvus__pb2.CreateAliasRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/RenameCollection', + milvus__pb2.RenameCollectionRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def DropAlias(request, + def ListIndexedSegment(request, target, options=(), channel_credentials=None, @@ -942,14 +4145,132 @@ def DropAlias(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/DropAlias', - milvus__pb2.DropAliasRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListIndexedSegment', + feder__pb2.ListIndexedSegmentRequest.SerializeToString, + feder__pb2.ListIndexedSegmentResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def DescribeSegmentIndexData(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DescribeSegmentIndexData', + feder__pb2.DescribeSegmentIndexDataRequest.SerializeToString, + feder__pb2.DescribeSegmentIndexDataResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def Connect(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/Connect', + milvus__pb2.ConnectRequest.SerializeToString, + milvus__pb2.ConnectResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AllocTimestamp(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AllocTimestamp', + milvus__pb2.AllocTimestampRequest.SerializeToString, + milvus__pb2.AllocTimestampResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreateDatabase(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateDatabase', + milvus__pb2.CreateDatabaseRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def AlterAlias(request, + def DropDatabase(request, target, options=(), channel_credentials=None, @@ -959,14 +4280,24 @@ def AlterAlias(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/AlterAlias', - milvus__pb2.AlterAliasRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropDatabase', + milvus__pb2.DropDatabaseRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def CreateIndex(request, + def ListDatabases(request, target, options=(), channel_credentials=None, @@ -976,14 +4307,51 @@ def CreateIndex(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/CreateIndex', - milvus__pb2.CreateIndexRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListDatabases', + milvus__pb2.ListDatabasesRequest.SerializeToString, + milvus__pb2.ListDatabasesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def AlterDatabase(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AlterDatabase', + milvus__pb2.AlterDatabaseRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def DescribeIndex(request, + def DescribeDatabase(request, target, options=(), channel_credentials=None, @@ -993,14 +4361,24 @@ def DescribeIndex(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/DescribeIndex', - milvus__pb2.DescribeIndexRequest.SerializeToString, - milvus__pb2.DescribeIndexResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DescribeDatabase', + milvus__pb2.DescribeDatabaseRequest.SerializeToString, + milvus__pb2.DescribeDatabaseResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetIndexState(request, + def ReplicateMessage(request, target, options=(), channel_credentials=None, @@ -1010,14 +4388,24 @@ def GetIndexState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetIndexState', - milvus__pb2.GetIndexStateRequest.SerializeToString, - milvus__pb2.GetIndexStateResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ReplicateMessage', + milvus__pb2.ReplicateMessageRequest.SerializeToString, + milvus__pb2.ReplicateMessageResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetIndexBuildProgress(request, + def BackupRBAC(request, target, options=(), channel_credentials=None, @@ -1027,14 +4415,24 @@ def GetIndexBuildProgress(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetIndexBuildProgress', - milvus__pb2.GetIndexBuildProgressRequest.SerializeToString, - milvus__pb2.GetIndexBuildProgressResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/BackupRBAC', + milvus__pb2.BackupRBACMetaRequest.SerializeToString, + milvus__pb2.BackupRBACMetaResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def DropIndex(request, + def RestoreRBAC(request, target, options=(), channel_credentials=None, @@ -1044,14 +4442,24 @@ def DropIndex(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/DropIndex', - milvus__pb2.DropIndexRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/RestoreRBAC', + milvus__pb2.RestoreRBACMetaRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def Insert(request, + def CreatePrivilegeGroup(request, target, options=(), channel_credentials=None, @@ -1061,14 +4469,24 @@ def Insert(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/Insert', - milvus__pb2.InsertRequest.SerializeToString, - milvus__pb2.MutationResult.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreatePrivilegeGroup', + milvus__pb2.CreatePrivilegeGroupRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def Delete(request, + def DropPrivilegeGroup(request, target, options=(), channel_credentials=None, @@ -1078,14 +4496,24 @@ def Delete(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/Delete', - milvus__pb2.DeleteRequest.SerializeToString, - milvus__pb2.MutationResult.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropPrivilegeGroup', + milvus__pb2.DropPrivilegeGroupRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def Search(request, + def ListPrivilegeGroups(request, target, options=(), channel_credentials=None, @@ -1095,14 +4523,24 @@ def Search(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/Search', - milvus__pb2.SearchRequest.SerializeToString, - milvus__pb2.SearchResults.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListPrivilegeGroups', + milvus__pb2.ListPrivilegeGroupsRequest.SerializeToString, + milvus__pb2.ListPrivilegeGroupsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def Flush(request, + def OperatePrivilegeGroup(request, target, options=(), channel_credentials=None, @@ -1112,14 +4550,24 @@ def Flush(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/Flush', - milvus__pb2.FlushRequest.SerializeToString, - milvus__pb2.FlushResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/OperatePrivilegeGroup', + milvus__pb2.OperatePrivilegeGroupRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def Query(request, + def RunAnalyzer(request, target, options=(), channel_credentials=None, @@ -1129,14 +4577,24 @@ def Query(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/Query', - milvus__pb2.QueryRequest.SerializeToString, - milvus__pb2.QueryResults.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/RunAnalyzer', + milvus__pb2.RunAnalyzerRequest.SerializeToString, + milvus__pb2.RunAnalyzerResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def CalcDistance(request, + def AddFileResource(request, target, options=(), channel_credentials=None, @@ -1146,14 +4604,24 @@ def CalcDistance(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/CalcDistance', - milvus__pb2.CalcDistanceRequest.SerializeToString, - milvus__pb2.CalcDistanceResults.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AddFileResource', + milvus__pb2.AddFileResourceRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetFlushState(request, + def RemoveFileResource(request, target, options=(), channel_credentials=None, @@ -1163,14 +4631,24 @@ def GetFlushState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetFlushState', - milvus__pb2.GetFlushStateRequest.SerializeToString, - milvus__pb2.GetFlushStateResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/RemoveFileResource', + milvus__pb2.RemoveFileResourceRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetPersistentSegmentInfo(request, + def ListFileResources(request, target, options=(), channel_credentials=None, @@ -1180,14 +4658,24 @@ def GetPersistentSegmentInfo(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetPersistentSegmentInfo', - milvus__pb2.GetPersistentSegmentInfoRequest.SerializeToString, - milvus__pb2.GetPersistentSegmentInfoResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListFileResources', + milvus__pb2.ListFileResourcesRequest.SerializeToString, + milvus__pb2.ListFileResourcesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetQuerySegmentInfo(request, + def AddUserTags(request, target, options=(), channel_credentials=None, @@ -1197,14 +4685,24 @@ def GetQuerySegmentInfo(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetQuerySegmentInfo', - milvus__pb2.GetQuerySegmentInfoRequest.SerializeToString, - milvus__pb2.GetQuerySegmentInfoResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/AddUserTags', + milvus__pb2.AddUserTagsRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def Dummy(request, + def DeleteUserTags(request, target, options=(), channel_credentials=None, @@ -1214,14 +4712,24 @@ def Dummy(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/Dummy', - milvus__pb2.DummyRequest.SerializeToString, - milvus__pb2.DummyResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DeleteUserTags', + milvus__pb2.DeleteUserTagsRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def RegisterLink(request, + def GetUserTags(request, target, options=(), channel_credentials=None, @@ -1231,14 +4739,24 @@ def RegisterLink(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/RegisterLink', - milvus__pb2.RegisterLinkRequest.SerializeToString, - milvus__pb2.RegisterLinkResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetUserTags', + milvus__pb2.GetUserTagsRequest.SerializeToString, + milvus__pb2.GetUserTagsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetMetrics(request, + def ListUsersWithTag(request, target, options=(), channel_credentials=None, @@ -1248,14 +4766,24 @@ def GetMetrics(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetMetrics', - milvus__pb2.GetMetricsRequest.SerializeToString, - milvus__pb2.GetMetricsResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListUsersWithTag', + milvus__pb2.ListUsersWithTagRequest.SerializeToString, + milvus__pb2.ListUsersWithTagResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def LoadBalance(request, + def CreateRowPolicy(request, target, options=(), channel_credentials=None, @@ -1265,14 +4793,24 @@ def LoadBalance(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/LoadBalance', - milvus__pb2.LoadBalanceRequest.SerializeToString, + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/CreateRowPolicy', + milvus__pb2.CreateRowPolicyRequest.SerializeToString, common__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetCompactionState(request, + def DropRowPolicy(request, target, options=(), channel_credentials=None, @@ -1282,14 +4820,24 @@ def GetCompactionState(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetCompactionState', - milvus__pb2.GetCompactionStateRequest.SerializeToString, - milvus__pb2.GetCompactionStateResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/DropRowPolicy', + milvus__pb2.DropRowPolicyRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def ManualCompaction(request, + def ListRowPolicies(request, target, options=(), channel_credentials=None, @@ -1299,14 +4847,24 @@ def ManualCompaction(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/ManualCompaction', - milvus__pb2.ManualCompactionRequest.SerializeToString, - milvus__pb2.ManualCompactionResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/ListRowPolicies', + milvus__pb2.ListRowPoliciesRequest.SerializeToString, + milvus__pb2.ListRowPoliciesResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) @staticmethod - def GetCompactionStateWithPlans(request, + def UpdateReplicateConfiguration(request, target, options=(), channel_credentials=None, @@ -1316,11 +4874,75 @@ def GetCompactionStateWithPlans(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.MilvusService/GetCompactionStateWithPlans', - milvus__pb2.GetCompactionPlansRequest.SerializeToString, - milvus__pb2.GetCompactionPlansResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/UpdateReplicateConfiguration', + milvus__pb2.UpdateReplicateConfigurationRequest.SerializeToString, + common__pb2.Status.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def GetReplicateInfo(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.MilvusService/GetReplicateInfo', + milvus__pb2.GetReplicateInfoRequest.SerializeToString, + milvus__pb2.GetReplicateInfoResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) + + @staticmethod + def CreateReplicateStream(request_iterator, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.stream_stream( + request_iterator, + target, + '/milvus.proto.milvus.MilvusService/CreateReplicateStream', + milvus__pb2.ReplicateRequest.SerializeToString, + milvus__pb2.ReplicateResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) class ProxyServiceStub(object): @@ -1360,6 +4982,7 @@ def add_ProxyServiceServicer_to_server(servicer, server): generic_handler = grpc.method_handlers_generic_handler( 'milvus.proto.milvus.ProxyService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('milvus.proto.milvus.ProxyService', rpc_method_handlers) # This class is part of an EXPERIMENTAL API. @@ -1377,8 +5000,18 @@ def RegisterLink(request, wait_for_ready=None, timeout=None, metadata=None): - return grpc.experimental.unary_unary(request, target, '/milvus.proto.milvus.ProxyService/RegisterLink', + return grpc.experimental.unary_unary( + request, + target, + '/milvus.proto.milvus.ProxyService/RegisterLink', milvus__pb2.RegisterLinkRequest.SerializeToString, milvus__pb2.RegisterLinkResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + ) diff --git a/pymilvus/grpc_gen/msg_pb2.py b/pymilvus/grpc_gen/msg_pb2.py new file mode 100644 index 000000000..50bf1edfa --- /dev/null +++ b/pymilvus/grpc_gen/msg_pb2.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: msg.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'msg.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import common_pb2 as common__pb2 +from . import schema_pb2 as schema__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tmsg.proto\x12\x10milvus.proto.msg\x1a\x0c\x63ommon.proto\x1a\x0cschema.proto\"\xd0\x03\n\rInsertRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tshardName\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x62_name\x18\x03 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t\x12\x16\n\x0epartition_name\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x06 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x07 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x08 \x01(\x03\x12\x11\n\tsegmentID\x18\t \x01(\x03\x12\x12\n\ntimestamps\x18\n \x03(\x04\x12\x0e\n\x06rowIDs\x18\x0b \x03(\x03\x12+\n\x08row_data\x18\x0c \x03(\x0b\x32\x19.milvus.proto.common.Blob\x12\x33\n\x0b\x66ields_data\x18\r \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x10\n\x08num_rows\x18\x0e \x01(\x04\x12\x34\n\x07version\x18\x0f \x01(\x0e\x32#.milvus.proto.msg.InsertDataVersion\x12\x16\n\tnamespace\x18\x10 \x01(\tH\x00\x88\x01\x01\x42\x0c\n\n_namespace\"\xcf\x02\n\rDeleteRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x11\n\tshardName\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x62_name\x18\x03 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x04 \x01(\t\x12\x16\n\x0epartition_name\x18\x05 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x06 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x07 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x08 \x01(\x03\x12\x1a\n\x12int64_primary_keys\x18\t \x03(\x03\x12\x12\n\ntimestamps\x18\n \x03(\x04\x12\x10\n\x08num_rows\x18\x0b \x01(\x03\x12.\n\x0cprimary_keys\x18\x0c \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\x12\n\nsegment_id\x18\r \x01(\x03\"W\n\x0bMsgPosition\x12\x14\n\x0c\x63hannel_name\x18\x01 \x01(\t\x12\r\n\x05msgID\x18\x02 \x01(\x0c\x12\x10\n\x08msgGroup\x18\x03 \x01(\t\x12\x11\n\ttimestamp\x18\x04 \x01(\x04\"\x81\x03\n\x17\x43reateCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x16\n\x0e\x63ollectionName\x18\x03 \x01(\t\x12\x15\n\rpartitionName\x18\x04 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x05 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x06 \x01(\x03\x12\x17\n\x0bpartitionID\x18\x07 \x01(\x03\x42\x02\x18\x01\x12\x12\n\x06schema\x18\x08 \x01(\x0c\x42\x02\x18\x01\x12\x1b\n\x13virtualChannelNames\x18\t \x03(\t\x12\x1c\n\x14physicalChannelNames\x18\n \x03(\t\x12\x14\n\x0cpartitionIDs\x18\x0b \x03(\x03\x12\x16\n\x0epartitionNames\x18\x0c \x03(\t\x12@\n\x11\x63ollection_schema\x18\r \x01(\x0b\x32%.milvus.proto.schema.CollectionSchema\"\x90\x01\n\x15\x44ropCollectionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x16\n\x0e\x63ollectionName\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x04 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x05 \x01(\x03\"\xbf\x01\n\x16\x43reatePartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x05 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x06 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x07 \x01(\x03\"\xbd\x01\n\x14\x44ropPartitionRequest\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x16\n\x0epartition_name\x18\x04 \x01(\t\x12\x0c\n\x04\x64\x62ID\x18\x05 \x01(\x03\x12\x14\n\x0c\x63ollectionID\x18\x06 \x01(\x03\x12\x13\n\x0bpartitionID\x18\x07 \x01(\x03\"9\n\x0bTimeTickMsg\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\"\x9f\x01\n\rDataNodeTtMsg\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x14\n\x0c\x63hannel_name\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\x04\x12\x39\n\x0esegments_stats\x18\x04 \x03(\x0b\x32!.milvus.proto.common.SegmentStats\"\x84\x01\n\x0cReplicateMsg\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0e\n\x06is_end\x18\x02 \x01(\x08\x12\x12\n\nis_cluster\x18\x03 \x01(\x08\x12\x10\n\x08\x64\x61tabase\x18\x04 \x01(\t\x12\x12\n\ncollection\x18\x05 \x01(\t\"\'\n\nImportFile\x12\n\n\x02id\x18\x01 \x01(\x03\x12\r\n\x05paths\x18\x02 \x03(\t\"\xeb\x02\n\tImportMsg\x12*\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x1c.milvus.proto.common.MsgBase\x12\x0f\n\x07\x64\x62_name\x18\x02 \x01(\t\x12\x17\n\x0f\x63ollection_name\x18\x03 \x01(\t\x12\x14\n\x0c\x63ollectionID\x18\x04 \x01(\x03\x12\x14\n\x0cpartitionIDs\x18\x05 \x03(\x03\x12\x39\n\x07options\x18\x06 \x03(\x0b\x32(.milvus.proto.msg.ImportMsg.OptionsEntry\x12+\n\x05\x66iles\x18\x07 \x03(\x0b\x32\x1c.milvus.proto.msg.ImportFile\x12\x35\n\x06schema\x18\x08 \x01(\x0b\x32%.milvus.proto.schema.CollectionSchema\x12\r\n\x05jobID\x18\t \x01(\x03\x1a.\n\x0cOptionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01*2\n\x11InsertDataVersion\x12\x0c\n\x08RowBased\x10\x00\x12\x0f\n\x0b\x43olumnBased\x10\x01\x42\x33Z1github.com/milvus-io/milvus-proto/go-api/v2/msgpbb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'msg_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'Z1github.com/milvus-io/milvus-proto/go-api/v2/msgpb' + _globals['_CREATECOLLECTIONREQUEST'].fields_by_name['partitionID']._loaded_options = None + _globals['_CREATECOLLECTIONREQUEST'].fields_by_name['partitionID']._serialized_options = b'\030\001' + _globals['_CREATECOLLECTIONREQUEST'].fields_by_name['schema']._loaded_options = None + _globals['_CREATECOLLECTIONREQUEST'].fields_by_name['schema']._serialized_options = b'\030\001' + _globals['_IMPORTMSG_OPTIONSENTRY']._loaded_options = None + _globals['_IMPORTMSG_OPTIONSENTRY']._serialized_options = b'8\001' + _globals['_INSERTDATAVERSION']._serialized_start=2637 + _globals['_INSERTDATAVERSION']._serialized_end=2687 + _globals['_INSERTREQUEST']._serialized_start=60 + _globals['_INSERTREQUEST']._serialized_end=524 + _globals['_DELETEREQUEST']._serialized_start=527 + _globals['_DELETEREQUEST']._serialized_end=862 + _globals['_MSGPOSITION']._serialized_start=864 + _globals['_MSGPOSITION']._serialized_end=951 + _globals['_CREATECOLLECTIONREQUEST']._serialized_start=954 + _globals['_CREATECOLLECTIONREQUEST']._serialized_end=1339 + _globals['_DROPCOLLECTIONREQUEST']._serialized_start=1342 + _globals['_DROPCOLLECTIONREQUEST']._serialized_end=1486 + _globals['_CREATEPARTITIONREQUEST']._serialized_start=1489 + _globals['_CREATEPARTITIONREQUEST']._serialized_end=1680 + _globals['_DROPPARTITIONREQUEST']._serialized_start=1683 + _globals['_DROPPARTITIONREQUEST']._serialized_end=1872 + _globals['_TIMETICKMSG']._serialized_start=1874 + _globals['_TIMETICKMSG']._serialized_end=1931 + _globals['_DATANODETTMSG']._serialized_start=1934 + _globals['_DATANODETTMSG']._serialized_end=2093 + _globals['_REPLICATEMSG']._serialized_start=2096 + _globals['_REPLICATEMSG']._serialized_end=2228 + _globals['_IMPORTFILE']._serialized_start=2230 + _globals['_IMPORTFILE']._serialized_end=2269 + _globals['_IMPORTMSG']._serialized_start=2272 + _globals['_IMPORTMSG']._serialized_end=2635 + _globals['_IMPORTMSG_OPTIONSENTRY']._serialized_start=2589 + _globals['_IMPORTMSG_OPTIONSENTRY']._serialized_end=2635 +# @@protoc_insertion_point(module_scope) diff --git a/pymilvus/grpc_gen/msg_pb2.pyi b/pymilvus/grpc_gen/msg_pb2.pyi new file mode 100644 index 000000000..f88c61336 --- /dev/null +++ b/pymilvus/grpc_gen/msg_pb2.pyi @@ -0,0 +1,243 @@ +from . import common_pb2 as _common_pb2 +from . import schema_pb2 as _schema_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class InsertDataVersion(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + RowBased: _ClassVar[InsertDataVersion] + ColumnBased: _ClassVar[InsertDataVersion] +RowBased: InsertDataVersion +ColumnBased: InsertDataVersion + +class InsertRequest(_message.Message): + __slots__ = ("base", "shardName", "db_name", "collection_name", "partition_name", "dbID", "collectionID", "partitionID", "segmentID", "timestamps", "rowIDs", "row_data", "fields_data", "num_rows", "version", "namespace") + BASE_FIELD_NUMBER: _ClassVar[int] + SHARDNAME_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + SEGMENTID_FIELD_NUMBER: _ClassVar[int] + TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + ROWIDS_FIELD_NUMBER: _ClassVar[int] + ROW_DATA_FIELD_NUMBER: _ClassVar[int] + FIELDS_DATA_FIELD_NUMBER: _ClassVar[int] + NUM_ROWS_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + NAMESPACE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + shardName: str + db_name: str + collection_name: str + partition_name: str + dbID: int + collectionID: int + partitionID: int + segmentID: int + timestamps: _containers.RepeatedScalarFieldContainer[int] + rowIDs: _containers.RepeatedScalarFieldContainer[int] + row_data: _containers.RepeatedCompositeFieldContainer[_common_pb2.Blob] + fields_data: _containers.RepeatedCompositeFieldContainer[_schema_pb2.FieldData] + num_rows: int + version: InsertDataVersion + namespace: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., shardName: _Optional[str] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., dbID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ..., segmentID: _Optional[int] = ..., timestamps: _Optional[_Iterable[int]] = ..., rowIDs: _Optional[_Iterable[int]] = ..., row_data: _Optional[_Iterable[_Union[_common_pb2.Blob, _Mapping]]] = ..., fields_data: _Optional[_Iterable[_Union[_schema_pb2.FieldData, _Mapping]]] = ..., num_rows: _Optional[int] = ..., version: _Optional[_Union[InsertDataVersion, str]] = ..., namespace: _Optional[str] = ...) -> None: ... + +class DeleteRequest(_message.Message): + __slots__ = ("base", "shardName", "db_name", "collection_name", "partition_name", "dbID", "collectionID", "partitionID", "int64_primary_keys", "timestamps", "num_rows", "primary_keys", "segment_id") + BASE_FIELD_NUMBER: _ClassVar[int] + SHARDNAME_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + INT64_PRIMARY_KEYS_FIELD_NUMBER: _ClassVar[int] + TIMESTAMPS_FIELD_NUMBER: _ClassVar[int] + NUM_ROWS_FIELD_NUMBER: _ClassVar[int] + PRIMARY_KEYS_FIELD_NUMBER: _ClassVar[int] + SEGMENT_ID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + shardName: str + db_name: str + collection_name: str + partition_name: str + dbID: int + collectionID: int + partitionID: int + int64_primary_keys: _containers.RepeatedScalarFieldContainer[int] + timestamps: _containers.RepeatedScalarFieldContainer[int] + num_rows: int + primary_keys: _schema_pb2.IDs + segment_id: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., shardName: _Optional[str] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., dbID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ..., int64_primary_keys: _Optional[_Iterable[int]] = ..., timestamps: _Optional[_Iterable[int]] = ..., num_rows: _Optional[int] = ..., primary_keys: _Optional[_Union[_schema_pb2.IDs, _Mapping]] = ..., segment_id: _Optional[int] = ...) -> None: ... + +class MsgPosition(_message.Message): + __slots__ = ("channel_name", "msgID", "msgGroup", "timestamp") + CHANNEL_NAME_FIELD_NUMBER: _ClassVar[int] + MSGID_FIELD_NUMBER: _ClassVar[int] + MSGGROUP_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + channel_name: str + msgID: bytes + msgGroup: str + timestamp: int + def __init__(self, channel_name: _Optional[str] = ..., msgID: _Optional[bytes] = ..., msgGroup: _Optional[str] = ..., timestamp: _Optional[int] = ...) -> None: ... + +class CreateCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collectionName", "partitionName", "dbID", "collectionID", "partitionID", "schema", "virtualChannelNames", "physicalChannelNames", "partitionIDs", "partitionNames", "collection_schema") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONNAME_FIELD_NUMBER: _ClassVar[int] + PARTITIONNAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + VIRTUALCHANNELNAMES_FIELD_NUMBER: _ClassVar[int] + PHYSICALCHANNELNAMES_FIELD_NUMBER: _ClassVar[int] + PARTITIONIDS_FIELD_NUMBER: _ClassVar[int] + PARTITIONNAMES_FIELD_NUMBER: _ClassVar[int] + COLLECTION_SCHEMA_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collectionName: str + partitionName: str + dbID: int + collectionID: int + partitionID: int + schema: bytes + virtualChannelNames: _containers.RepeatedScalarFieldContainer[str] + physicalChannelNames: _containers.RepeatedScalarFieldContainer[str] + partitionIDs: _containers.RepeatedScalarFieldContainer[int] + partitionNames: _containers.RepeatedScalarFieldContainer[str] + collection_schema: _schema_pb2.CollectionSchema + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collectionName: _Optional[str] = ..., partitionName: _Optional[str] = ..., dbID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ..., schema: _Optional[bytes] = ..., virtualChannelNames: _Optional[_Iterable[str]] = ..., physicalChannelNames: _Optional[_Iterable[str]] = ..., partitionIDs: _Optional[_Iterable[int]] = ..., partitionNames: _Optional[_Iterable[str]] = ..., collection_schema: _Optional[_Union[_schema_pb2.CollectionSchema, _Mapping]] = ...) -> None: ... + +class DropCollectionRequest(_message.Message): + __slots__ = ("base", "db_name", "collectionName", "dbID", "collectionID") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONNAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collectionName: str + dbID: int + collectionID: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collectionName: _Optional[str] = ..., dbID: _Optional[int] = ..., collectionID: _Optional[int] = ...) -> None: ... + +class CreatePartitionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name", "dbID", "collectionID", "partitionID") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + dbID: int + collectionID: int + partitionID: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., dbID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ...) -> None: ... + +class DropPartitionRequest(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "partition_name", "dbID", "collectionID", "partitionID") + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + PARTITION_NAME_FIELD_NUMBER: _ClassVar[int] + DBID_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + partition_name: str + dbID: int + collectionID: int + partitionID: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., partition_name: _Optional[str] = ..., dbID: _Optional[int] = ..., collectionID: _Optional[int] = ..., partitionID: _Optional[int] = ...) -> None: ... + +class TimeTickMsg(_message.Message): + __slots__ = ("base",) + BASE_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ...) -> None: ... + +class DataNodeTtMsg(_message.Message): + __slots__ = ("base", "channel_name", "timestamp", "segments_stats") + BASE_FIELD_NUMBER: _ClassVar[int] + CHANNEL_NAME_FIELD_NUMBER: _ClassVar[int] + TIMESTAMP_FIELD_NUMBER: _ClassVar[int] + SEGMENTS_STATS_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + channel_name: str + timestamp: int + segments_stats: _containers.RepeatedCompositeFieldContainer[_common_pb2.SegmentStats] + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., channel_name: _Optional[str] = ..., timestamp: _Optional[int] = ..., segments_stats: _Optional[_Iterable[_Union[_common_pb2.SegmentStats, _Mapping]]] = ...) -> None: ... + +class ReplicateMsg(_message.Message): + __slots__ = ("base", "is_end", "is_cluster", "database", "collection") + BASE_FIELD_NUMBER: _ClassVar[int] + IS_END_FIELD_NUMBER: _ClassVar[int] + IS_CLUSTER_FIELD_NUMBER: _ClassVar[int] + DATABASE_FIELD_NUMBER: _ClassVar[int] + COLLECTION_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + is_end: bool + is_cluster: bool + database: str + collection: str + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., is_end: bool = ..., is_cluster: bool = ..., database: _Optional[str] = ..., collection: _Optional[str] = ...) -> None: ... + +class ImportFile(_message.Message): + __slots__ = ("id", "paths") + ID_FIELD_NUMBER: _ClassVar[int] + PATHS_FIELD_NUMBER: _ClassVar[int] + id: int + paths: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, id: _Optional[int] = ..., paths: _Optional[_Iterable[str]] = ...) -> None: ... + +class ImportMsg(_message.Message): + __slots__ = ("base", "db_name", "collection_name", "collectionID", "partitionIDs", "options", "files", "schema", "jobID") + class OptionsEntry(_message.Message): + __slots__ = ("key", "value") + KEY_FIELD_NUMBER: _ClassVar[int] + VALUE_FIELD_NUMBER: _ClassVar[int] + key: str + value: str + def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ... + BASE_FIELD_NUMBER: _ClassVar[int] + DB_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTION_NAME_FIELD_NUMBER: _ClassVar[int] + COLLECTIONID_FIELD_NUMBER: _ClassVar[int] + PARTITIONIDS_FIELD_NUMBER: _ClassVar[int] + OPTIONS_FIELD_NUMBER: _ClassVar[int] + FILES_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + JOBID_FIELD_NUMBER: _ClassVar[int] + base: _common_pb2.MsgBase + db_name: str + collection_name: str + collectionID: int + partitionIDs: _containers.RepeatedScalarFieldContainer[int] + options: _containers.ScalarMap[str, str] + files: _containers.RepeatedCompositeFieldContainer[ImportFile] + schema: _schema_pb2.CollectionSchema + jobID: int + def __init__(self, base: _Optional[_Union[_common_pb2.MsgBase, _Mapping]] = ..., db_name: _Optional[str] = ..., collection_name: _Optional[str] = ..., collectionID: _Optional[int] = ..., partitionIDs: _Optional[_Iterable[int]] = ..., options: _Optional[_Mapping[str, str]] = ..., files: _Optional[_Iterable[_Union[ImportFile, _Mapping]]] = ..., schema: _Optional[_Union[_schema_pb2.CollectionSchema, _Mapping]] = ..., jobID: _Optional[int] = ...) -> None: ... diff --git a/pymilvus/grpc_gen/proto/common.proto b/pymilvus/grpc_gen/proto/common.proto deleted file mode 100644 index 7b30ddc9d..000000000 --- a/pymilvus/grpc_gen/proto/common.proto +++ /dev/null @@ -1,193 +0,0 @@ -syntax = "proto3"; - -package milvus.proto.common; -option go_package="github.com/milvus-io/milvus/internal/proto/commonpb"; - - -enum ErrorCode { - Success = 0; - UnexpectedError = 1; - ConnectFailed = 2; - PermissionDenied = 3; - CollectionNotExists = 4; - IllegalArgument = 5; - IllegalDimension = 7; - IllegalIndexType = 8; - IllegalCollectionName = 9; - IllegalTOPK = 10; - IllegalRowRecord = 11; - IllegalVectorID = 12; - IllegalSearchResult = 13; - FileNotFound = 14; - MetaFailed = 15; - CacheFailed = 16; - CannotCreateFolder = 17; - CannotCreateFile = 18; - CannotDeleteFolder = 19; - CannotDeleteFile = 20; - BuildIndexError = 21; - IllegalNLIST = 22; - IllegalMetricType = 23; - OutOfMemory = 24; - IndexNotExist = 25; - EmptyCollection = 26; - - // internal error code. - DDRequestRace = 1000; -} - -enum IndexState { - IndexStateNone = 0; - Unissued = 1; - InProgress = 2; - Finished = 3; - Failed = 4; -} - -enum SegmentState { - SegmentStateNone = 0; - NotExist = 1; - Growing = 2; - Sealed = 3; - Flushed = 4; - Flushing = 5; - Dropped = 6; -} - -message Status { - ErrorCode error_code = 1; - string reason = 2; -} - -message KeyValuePair { - string key = 1; - string value = 2; -} - -message KeyDataPair { - string key = 1; - bytes data = 2; -} - -message Blob { - bytes value = 1; -} - -message Address { - string ip = 1; - int64 port = 2; -} - -enum MsgType { - Undefined = 0; - /* DEFINITION REQUESTS: COLLECTION */ - CreateCollection = 100; - DropCollection = 101; - HasCollection = 102; - DescribeCollection = 103; - ShowCollections = 104; - GetSystemConfigs = 105; - LoadCollection = 106; - ReleaseCollection = 107; - CreateAlias = 108; - DropAlias = 109; - AlterAlias = 110; - - - /* DEFINITION REQUESTS: PARTITION */ - CreatePartition = 200; - DropPartition = 201; - HasPartition = 202; - DescribePartition = 203; - ShowPartitions = 204; - LoadPartitions = 205; - ReleasePartitions = 206; - - /* DEFINE REQUESTS: SEGMENT */ - ShowSegments = 250; - DescribeSegment = 251; - LoadSegments = 252; - ReleaseSegments = 253; - HandoffSegments = 254; - LoadBalanceSegments = 255; - - /* DEFINITION REQUESTS: INDEX */ - CreateIndex = 300; - DescribeIndex = 301; - DropIndex = 302; - - /* MANIPULATION REQUESTS */ - Insert = 400; - Delete = 401; - Flush = 402; - - /* QUERY */ - Search = 500; - SearchResult = 501; - GetIndexState = 502; - GetIndexBuildProgress = 503; - GetCollectionStatistics = 504; - GetPartitionStatistics = 505; - Retrieve = 506; - RetrieveResult = 507; - WatchDmChannels = 508; - RemoveDmChannels = 509; - WatchQueryChannels = 510; - RemoveQueryChannels = 511; - SealedSegmentsChangeInfo = 512; - WatchDeltaChannels = 513; - - /* DATA SERVICE */ - SegmentInfo = 600; - SystemInfo = 601; - GetRecoveryInfo = 602; - - /* SYSTEM CONTROL */ - TimeTick = 1200; - QueryNodeStats = 1201; // GOOSE TODO: Remove kQueryNodeStats - LoadIndex = 1202; - RequestID = 1203; - RequestTSO = 1204; - AllocateSegment = 1205; - SegmentStatistics = 1206; - SegmentFlushDone = 1207; - - DataNodeTt = 1208; -} - -message MsgBase { - MsgType msg_type = 1; - int64 msgID = 2; - uint64 timestamp = 3; - int64 sourceID = 4; -} - -enum DslType { - Dsl = 0; - BoolExprV1 = 1; -} - -// Don't Modify This. @czs -message MsgHeader { - common.MsgBase base = 1; -} - -// Don't Modify This. @czs -message DMLMsgHeader { - common.MsgBase base = 1; - string shardName = 2; -} - -enum CompactionState { - UndefiedState = 0; - Executing = 1; - Completed = 2; -} - -enum ConsistencyLevel { - Strong = 0; - Session = 1; // default in PyMilvus - Bounded = 2; - Eventually = 3; - Customized = 4; // Users pass their own `guarantee_timestamp`. -} diff --git a/pymilvus/grpc_gen/proto/milvus.proto b/pymilvus/grpc_gen/proto/milvus.proto deleted file mode 100644 index 2218089b1..000000000 --- a/pymilvus/grpc_gen/proto/milvus.proto +++ /dev/null @@ -1,784 +0,0 @@ -syntax = "proto3"; -package milvus.proto.milvus; - -option go_package = "github.com/milvus-io/milvus/internal/proto/milvuspb"; - -import "common.proto"; -import "schema.proto"; - -service MilvusService { - rpc CreateCollection(CreateCollectionRequest) returns (common.Status) {} - rpc DropCollection(DropCollectionRequest) returns (common.Status) {} - rpc HasCollection(HasCollectionRequest) returns (BoolResponse) {} - rpc LoadCollection(LoadCollectionRequest) returns (common.Status) {} - rpc ReleaseCollection(ReleaseCollectionRequest) returns (common.Status) {} - rpc DescribeCollection(DescribeCollectionRequest) returns (DescribeCollectionResponse) {} - rpc GetCollectionStatistics(GetCollectionStatisticsRequest) returns (GetCollectionStatisticsResponse) {} - rpc ShowCollections(ShowCollectionsRequest) returns (ShowCollectionsResponse) {} - - rpc CreatePartition(CreatePartitionRequest) returns (common.Status) {} - rpc DropPartition(DropPartitionRequest) returns (common.Status) {} - rpc HasPartition(HasPartitionRequest) returns (BoolResponse) {} - rpc LoadPartitions(LoadPartitionsRequest) returns (common.Status) {} - rpc ReleasePartitions(ReleasePartitionsRequest) returns (common.Status) {} - rpc GetPartitionStatistics(GetPartitionStatisticsRequest) returns (GetPartitionStatisticsResponse) {} - rpc ShowPartitions(ShowPartitionsRequest) returns (ShowPartitionsResponse) {} - - rpc CreateAlias(CreateAliasRequest) returns (common.Status) {} - rpc DropAlias(DropAliasRequest) returns (common.Status) {} - rpc AlterAlias(AlterAliasRequest) returns (common.Status) {} - - rpc CreateIndex(CreateIndexRequest) returns (common.Status) {} - rpc DescribeIndex(DescribeIndexRequest) returns (DescribeIndexResponse) {} - rpc GetIndexState(GetIndexStateRequest) returns (GetIndexStateResponse) {} - rpc GetIndexBuildProgress(GetIndexBuildProgressRequest) returns (GetIndexBuildProgressResponse) {} - rpc DropIndex(DropIndexRequest) returns (common.Status) {} - - rpc Insert(InsertRequest) returns (MutationResult) {} - rpc Delete(DeleteRequest) returns (MutationResult) {} - rpc Search(SearchRequest) returns (SearchResults) {} - rpc Flush(FlushRequest) returns (FlushResponse) {} - rpc Query(QueryRequest) returns (QueryResults) {} - rpc CalcDistance(CalcDistanceRequest) returns (CalcDistanceResults) {} - - rpc GetFlushState(GetFlushStateRequest) returns (GetFlushStateResponse) {} - rpc GetPersistentSegmentInfo(GetPersistentSegmentInfoRequest) returns (GetPersistentSegmentInfoResponse) {} - rpc GetQuerySegmentInfo(GetQuerySegmentInfoRequest) returns (GetQuerySegmentInfoResponse) {} - - rpc Dummy(DummyRequest) returns (DummyResponse) {} - - // TODO: remove - rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {} - - // https://wiki.lfaidata.foundation/display/MIL/MEP+8+--+Add+metrics+for+proxy - rpc GetMetrics(GetMetricsRequest) returns (GetMetricsResponse) {} - rpc LoadBalance(LoadBalanceRequest) returns (common.Status) {} - rpc GetCompactionState(GetCompactionStateRequest) returns (GetCompactionStateResponse) {} - rpc ManualCompaction(ManualCompactionRequest) returns (ManualCompactionResponse) {} - rpc GetCompactionStateWithPlans(GetCompactionPlansRequest) returns (GetCompactionPlansResponse) {} -} - -message CreateAliasRequest { - common.MsgBase base = 1; - string db_name = 2; - string collection_name = 3; - string alias = 4; -} - -message DropAliasRequest { - common.MsgBase base = 1; - string db_name = 2; - string alias = 3; -} - -message AlterAliasRequest{ - common.MsgBase base = 1; - string db_name = 2; - string collection_name = 3; - string alias = 4; -} - -/** -* Create collection in milvus -*/ -message CreateCollectionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The unique collection name in milvus.(Required) - string collection_name = 3; - // The serialized `schema.CollectionSchema`(Required) - bytes schema = 4; - // Once set, no modification is allowed (Optional) - // https://github.com/milvus-io/milvus/issues/6690 - int32 shards_num = 5; - // The consistency level that the collection used, modification is not supported now. - common.ConsistencyLevel consistency_level = 6; -} - -/** -* Drop collection in milvus, also will drop data in collection. -*/ -message DropCollectionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The unique collection name in milvus.(Required) - string collection_name = 3; -} - -/** -* Check collection exist in milvus or not. -*/ -message HasCollectionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name you want to check. - string collection_name = 3; - // If time_stamp is not zero, will return true when time_stamp >= created collection timestamp, otherwise will return false. - uint64 time_stamp = 4; -} - - -message BoolResponse { - common.Status status = 1; - bool value = 2; -} - -message StringResponse { - common.Status status = 1; - string value = 2; -} - -/** -* Get collection meta datas like: schema, collectionID, shards number ... -*/ -message DescribeCollectionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name you want to describe, you can pass collection_name or collectionID - string collection_name = 3; - // The collection ID you want to describe - int64 collectionID = 4; - // If time_stamp is not zero, will describe collection success when time_stamp >= created collection timestamp, otherwise will throw error. - uint64 time_stamp = 5; -} - -/** -* DescribeCollection Response -*/ -message DescribeCollectionResponse { - // Contain error_code and reason - common.Status status = 1; - // The schema param when you created collection. - schema.CollectionSchema schema = 2; - // The collection id - int64 collectionID = 3; - // System design related, users should not perceive - repeated string virtual_channel_names = 4; - // System design related, users should not perceive - repeated string physical_channel_names = 5; - // Hybrid timestamp in milvus - uint64 created_timestamp = 6; - // The utc timestamp calculated by created_timestamp - uint64 created_utc_timestamp = 7; - // The shards number you set. - int32 shards_num = 8; - // The aliases of this collection - repeated string aliases = 9; - // The message ID/posititon when collection is created - repeated common.KeyDataPair start_positions = 10; - // The consistency level that the collection used, modification is not supported now. - common.ConsistencyLevel consistency_level = 11; -} - -/** -* Load collection data into query nodes, then you can do vector search on this collection. -*/ -message LoadCollectionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name you want to load - string collection_name = 3; -} - -/** -* Release collection data from query nodes, then you can't do vector search on this collection. -*/ -message ReleaseCollectionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name you want to release - string collection_name = 3; -} - -/** -* Get collection statistics like row_count. -*/ -message GetCollectionStatisticsRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name you want get statistics - string collection_name = 3; -} - -/** -* Will return collection statistics in stats field like [{key:"row_count",value:"1"}] -*/ -message GetCollectionStatisticsResponse { - // Contain error_code and reason - common.Status status = 1; - // Collection statistics data - repeated common.KeyValuePair stats = 2; -} - -/* -* This is for ShowCollectionsRequest type field. -*/ -enum ShowType { - // Will return all colloections - All = 0; - // Will return loaded collections with their inMemory_percentages - InMemory = 1; -} - -/* -* List collections -*/ -message ShowCollectionsRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // Not useful for now - uint64 time_stamp = 3; - // Decide return Loaded collections or All collections(Optional) - ShowType type = 4; - // When type is InMemory, will return these collection's inMemory_percentages.(Optional) - repeated string collection_names = 5; -} - -/* -* Return basic collection infos. -*/ -message ShowCollectionsResponse { - // Contain error_code and reason - common.Status status = 1; - // Collection name array - repeated string collection_names = 2; - // Collection Id array - repeated int64 collection_ids = 3; - // Hybrid timestamps in milvus - repeated uint64 created_timestamps = 4; - // The utc timestamp calculated by created_timestamp - repeated uint64 created_utc_timestamps = 5; - // Load percentage on querynode when type is InMemory - repeated int64 inMemory_percentages = 6; -} - -/* -* Create partition in created collection. -*/ -message CreatePartitionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name in milvus - string collection_name = 3; - // The partition name you want to create. - string partition_name = 4; -} - -/* -* Drop partition in created collection. -*/ -message DropPartitionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name in milvus - string collection_name = 3; - // The partition name you want to drop - string partition_name = 4; -} - -/* -* Check if partition exist in collection or not. -*/ -message HasPartitionRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name in milvus - string collection_name = 3; - // The partition name you want to check - string partition_name = 4; -} - -/* -* Load specific partitions data of one collection into query nodes -* Then you can get these data as result when you do vector search on this collection. -*/ -message LoadPartitionsRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name in milvus - string collection_name = 3; - // The partition names you want to load - repeated string partition_names = 4; -} - -/* -* Release specific partitions data of one collection from query nodes. -* Then you can not get these data as result when you do vector search on this collection. -*/ -message ReleasePartitionsRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name in milvus - string collection_name = 3; - // The partition names you want to release - repeated string partition_names = 4; -} - -/* -* Get partition statistics like row_count. -*/ -message GetPartitionStatisticsRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name in milvus - string collection_name = 3; - // The partition name you want to collect statistics - string partition_name = 4; -} - -message GetPartitionStatisticsResponse { - common.Status status = 1; - repeated common.KeyValuePair stats = 2; -} - -/* -* List all partitions for particular collection -*/ -message ShowPartitionsRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The collection name you want to describe, you can pass collection_name or collectionID - string collection_name = 3; - // The collection id in milvus - int64 collectionID = 4; - // When type is InMemory, will return these patitions's inMemory_percentages.(Optional) - repeated string partition_names = 5; - // Decide return Loaded partitions or All partitions(Optional) - ShowType type = 6; -} - -/* -* List all partitions for particular collection response. -* The returned datas are all rows, we can format to columns by therir index. -*/ -message ShowPartitionsResponse { - // Contain error_code and reason - common.Status status = 1; - // All partition names for this collection - repeated string partition_names = 2; - // All partition ids for this collection - repeated int64 partitionIDs = 3; - // All hybrid timestamps - repeated uint64 created_timestamps = 4; - // All utc timestamps calculated by created_timestamps - repeated uint64 created_utc_timestamps = 5; - // Load percentage on querynode - repeated int64 inMemory_percentages = 6; -} - -message DescribeSegmentRequest { - common.MsgBase base = 1; - int64 collectionID = 2; - int64 segmentID = 3; -} - -message DescribeSegmentResponse { - common.Status status = 1; - int64 indexID = 2; - int64 buildID = 3; - bool enable_index = 4; - int64 fieldID = 5; -} - -message ShowSegmentsRequest { - common.MsgBase base = 1; - int64 collectionID = 2; - int64 partitionID = 3; -} - -message ShowSegmentsResponse { - common.Status status = 1; - repeated int64 segmentIDs = 2; -} - -/* -* Create index for vector datas -*/ -message CreateIndexRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The particular collection name you want to create index. - string collection_name = 3; - // The vector field name in this particular collection - string field_name = 4; - // Support keys: index_type,metric_type, params. Different index_type may has different params. - repeated common.KeyValuePair extra_params = 5; -} - -/* -* Get created index information. -* Current release of Milvus only supports showing latest built index. -*/ -message DescribeIndexRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2; - // The particular collection name in Milvus - string collection_name = 3; - // The vector field name in this particular collection - string field_name = 4; - // No need to set up for now @2021.06.30 - string index_name = 5; -} - -/* -* Index informations -*/ -message IndexDescription { - // Index name - string index_name = 1; - // Index id - int64 indexID = 2; - // Will return index_type, metric_type, params(like nlist). - repeated common.KeyValuePair params = 3; - // The vector field name - string field_name = 4; -} - -/* -* Describe index response -*/ -message DescribeIndexResponse { - // Response status - common.Status status = 1; - // All index informations, for now only return tha latest index you created for the collection. - repeated IndexDescription index_descriptions = 2; -} - -/* -* Get index building progress -*/ -message GetIndexBuildProgressRequest { - // Not useful for now - common.MsgBase base = 1; - // Not useful for now - string db_name = 2 ; - // The collection name in milvus - string collection_name = 3; - // The vector field name in this collection - string field_name = 4; - // Not useful for now - string index_name = 5; -} - -message GetIndexBuildProgressResponse { - common.Status status = 1; - int64 indexed_rows = 2; - int64 total_rows = 3; -} - -message GetIndexStateRequest { - common.MsgBase base = 1; // must - string db_name = 2 ; - string collection_name = 3; // must - string field_name = 4; - string index_name = 5; // No need to set up for now @2021.06.30 -} - -message GetIndexStateResponse { - common.Status status = 1; - common.IndexState state = 2; - string fail_reason = 3; -} - -message DropIndexRequest { - common.MsgBase base = 1; // must - string db_name = 2; - string collection_name = 3; // must - string field_name = 4; - string index_name = 5; // No need to set up for now @2021.06.30 -} - -message InsertRequest { - common.MsgBase base = 1; - string db_name = 2; - string collection_name = 3; - string partition_name = 4; - repeated schema.FieldData fields_data = 5; - repeated uint32 hash_keys = 6; - uint32 num_rows = 7; -} - -message MutationResult { - common.Status status = 1; - schema.IDs IDs = 2; // required for insert, delete - repeated uint32 succ_index = 3; // error indexes indicate - repeated uint32 err_index = 4; // error indexes indicate - bool acknowledged = 5; - int64 insert_cnt = 6; - int64 delete_cnt = 7; - int64 upsert_cnt = 8; - uint64 timestamp = 9; -} - -message DeleteRequest { - common.MsgBase base = 1; - string db_name = 2; - string collection_name = 3; - string partition_name = 4; - string expr = 5; - repeated uint32 hash_keys = 6; -} - -enum PlaceholderType { - None = 0; - BinaryVector = 100; - FloatVector = 101; -} - -message PlaceholderValue { - string tag = 1; - PlaceholderType type = 2; - // values is a 2d-array, every array contains a vector - repeated bytes values = 3; -} - -message PlaceholderGroup { - repeated PlaceholderValue placeholders = 1; -} - -message SearchRequest { - common.MsgBase base = 1; // must - string db_name = 2; - string collection_name = 3; // must - repeated string partition_names = 4; // must - string dsl = 5; // must - // serialized `PlaceholderGroup` - bytes placeholder_group = 6; // must - common.DslType dsl_type = 7; // must - repeated string output_fields = 8; - repeated common.KeyValuePair search_params = 9; // must - uint64 travel_timestamp = 10; - uint64 guarantee_timestamp = 11; // guarantee_timestamp -} - -message Hits { - repeated int64 IDs = 1; - repeated bytes row_data = 2; - repeated float scores = 3; -} - -message SearchResults { - common.Status status = 1; - schema.SearchResultData results = 2; -} - -message FlushRequest { - common.MsgBase base = 1; - string db_name = 2; - repeated string collection_names = 3; -} - -message FlushResponse{ - common.Status status = 1; - string db_name = 2; - map coll_segIDs = 3; -} - -message QueryRequest { - common.MsgBase base = 1; - string db_name = 2; - string collection_name = 3; - string expr = 4; - repeated string output_fields = 5; - repeated string partition_names = 6; - uint64 travel_timestamp = 7; - uint64 guarantee_timestamp = 8; // guarantee_timestamp -} - -message QueryResults { - common.Status status = 1; - repeated schema.FieldData fields_data = 2; -} - -message VectorIDs { - string collection_name = 1; - string field_name = 2; - schema.IDs id_array = 3; - repeated string partition_names = 4; -} - -message VectorsArray { - oneof array { - VectorIDs id_array = 1; // vector ids - schema.VectorField data_array = 2; // vectors data - } -} - -message CalcDistanceRequest { - common.MsgBase base = 1; - VectorsArray op_left = 2; // vectors on the left of operator - VectorsArray op_right = 3; // vectors on the right of operator - repeated common.KeyValuePair params = 4; // "metric":"L2"/"IP"/"HAMMIN"/"TANIMOTO" -} - -message CalcDistanceResults { - common.Status status = 1; - // num(op_left)*num(op_right) distance values, "HAMMIN" return integer distance - oneof array { - schema.IntArray int_dist = 2; - schema.FloatArray float_dist = 3; - } -} - -message PersistentSegmentInfo { - int64 segmentID = 1; - int64 collectionID = 2; - int64 partitionID = 3; - int64 num_rows = 4; - common.SegmentState state = 5; -} - -message GetPersistentSegmentInfoRequest { - common.MsgBase base = 1; // must - string dbName = 2; - string collectionName = 3; // must -} - -message GetPersistentSegmentInfoResponse { - common.Status status = 1; - repeated PersistentSegmentInfo infos = 2; -} - -message QuerySegmentInfo { - int64 segmentID = 1; - int64 collectionID = 2; - int64 partitionID = 3; - int64 mem_size = 4; - int64 num_rows = 5; - string index_name = 6; - int64 indexID = 7; - int64 nodeID = 8; - common.SegmentState state = 9; -} - -message GetQuerySegmentInfoRequest { - common.MsgBase base = 1; // must - string dbName = 2; - string collectionName = 3; // must -} - -message GetQuerySegmentInfoResponse { - common.Status status = 1; - repeated QuerySegmentInfo infos = 2; -} - -message DummyRequest { - string request_type = 1; -} - -message DummyResponse { - string response = 1; -} - -message RegisterLinkRequest { -} - -message RegisterLinkResponse { - common.Address address = 1; - common.Status status = 2; -} - -message GetMetricsRequest { - common.MsgBase base = 1; - string request = 2; // request is of jsonic format -} - -message GetMetricsResponse { - common.Status status = 1; - string response = 2; // response is of jsonic format - string component_name = 3; // metrics from which component -} - -/* -* Do load balancing operation from src_nodeID to dst_nodeID. -*/ -message LoadBalanceRequest { - common.MsgBase base = 1; - int64 src_nodeID = 2; - repeated int64 dst_nodeIDs = 3; - repeated int64 sealed_segmentIDs = 4; -} - -message ManualCompactionRequest { - int64 collectionID = 1; - uint64 timetravel = 2; -} - -message ManualCompactionResponse { - common.Status status = 1; - int64 compactionID = 2; -} - -message GetCompactionStateRequest { - int64 compactionID = 1; -} - -message GetCompactionStateResponse { - common.Status status = 1; - common.CompactionState state = 2; - int64 executingPlanNo = 3; - int64 timeoutPlanNo = 4; - int64 completedPlanNo = 5; -} - -message GetCompactionPlansRequest { - int64 compactionID = 1; -} - -message GetCompactionPlansResponse { - common.Status status = 1; - common.CompactionState state = 2; - repeated CompactionMergeInfo mergeInfos = 3; -} - -message CompactionMergeInfo { - repeated int64 sources = 1; - int64 target = 2; -} - -message GetFlushStateRequest { - repeated int64 segmentIDs = 1; -} - -message GetFlushStateResponse { - common.Status status = 1; - bool flushed = 2; -} - -service ProxyService { - rpc RegisterLink(RegisterLinkRequest) returns (RegisterLinkResponse) {} -} diff --git a/pymilvus/grpc_gen/proto/python_gen.sh b/pymilvus/grpc_gen/proto/python_gen.sh deleted file mode 100755 index a8cadb7ed..000000000 --- a/pymilvus/grpc_gen/proto/python_gen.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -OUTDIR=../ - -python -m grpc_tools.protoc -I . --python_out=${OUTDIR} common.proto -python -m grpc_tools.protoc -I . --python_out=${OUTDIR} schema.proto -python -m grpc_tools.protoc -I . --python_out=${OUTDIR} --grpc_python_out=${OUTDIR} milvus.proto - -sed -i 's/import common_pb2 as common__pb2/from . import common_pb2 as common__pb2/' $OUTDIR/*py -sed -i 's/import schema_pb2 as schema__pb2/from . import schema_pb2 as schema__pb2/' $OUTDIR/*py -sed -i 's/import milvus_pb2 as milvus__pb2/from . import milvus_pb2 as milvus__pb2/' $OUTDIR/*py diff --git a/pymilvus/grpc_gen/proto/schema.proto b/pymilvus/grpc_gen/proto/schema.proto deleted file mode 100644 index c72d64d6a..000000000 --- a/pymilvus/grpc_gen/proto/schema.proto +++ /dev/null @@ -1,125 +0,0 @@ -syntax = "proto3"; - -package milvus.proto.schema; -option go_package = "github.com/milvus-io/milvus/internal/proto/schemapb"; - -import "common.proto"; - -/** - * @brief Field data type - */ -enum DataType { - None = 0; - Bool = 1; - Int8 = 2; - Int16 = 3; - Int32 = 4; - Int64 = 5; - - Float = 10; - Double = 11; - - String = 20; - - BinaryVector = 100; - FloatVector = 101; -} - -/** - * @brief Field schema - */ -message FieldSchema { - int64 fieldID = 1; - string name = 2; - bool is_primary_key = 3; - string description = 4; - DataType data_type = 5; - repeated common.KeyValuePair type_params = 6; - repeated common.KeyValuePair index_params = 7; - bool autoID = 8; -} - -/** - * @brief Collection schema - */ -message CollectionSchema { - string name = 1; - string description = 2; - bool autoID = 3; // deprecated later, keep compatible with c++ part now - repeated FieldSchema fields = 4; -} - -message BoolArray { - repeated bool data = 1; -} - -message IntArray { - repeated int32 data = 1; -} - -message LongArray { - repeated int64 data = 1; -} - -message FloatArray { - repeated float data = 1; -} - -message DoubleArray { - repeated double data = 1; -} - -// For special fields such as bigdecimal, array... -message BytesArray { - repeated bytes data = 1; -} - -message StringArray { - repeated string data = 1; -} - -message ScalarField { - oneof data { - BoolArray bool_data = 1; - IntArray int_data = 2; - LongArray long_data = 3; - FloatArray float_data = 4; - DoubleArray double_data = 5; - StringArray string_data = 6; - BytesArray bytes_data = 7; - } -} - -message VectorField { - int64 dim = 1; - oneof data { - FloatArray float_vector = 2; - bytes binary_vector = 3; - } -} - -message FieldData { - DataType type = 1; - string field_name = 2; - oneof field { - ScalarField scalars = 3; - VectorField vectors = 4; - } - int64 field_id = 5; -} - -message IDs { - oneof id_field { - LongArray int_id = 1; - StringArray str_id = 2; - } -} - -message SearchResultData { - int64 num_queries = 1; - int64 top_k = 2; - repeated FieldData fields_data = 3; - repeated float scores = 4; - IDs ids = 5; - repeated int64 topks = 6; -} diff --git a/pymilvus/grpc_gen/python_gen.sh b/pymilvus/grpc_gen/python_gen.sh new file mode 100755 index 000000000..dcaef35ba --- /dev/null +++ b/pymilvus/grpc_gen/python_gen.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +OUTDIR=. +PROTO_DIR="milvus-proto/proto" + +python3 -m grpc_tools.protoc -I ${PROTO_DIR} --python_out=${OUTDIR} --pyi_out=${OUTDIR} ${PROTO_DIR}/common.proto +python3 -m grpc_tools.protoc -I ${PROTO_DIR} --python_out=${OUTDIR} --pyi_out=${OUTDIR} ${PROTO_DIR}/schema.proto +python3 -m grpc_tools.protoc -I ${PROTO_DIR} --python_out=${OUTDIR} --pyi_out=${OUTDIR} ${PROTO_DIR}/feder.proto +python3 -m grpc_tools.protoc -I ${PROTO_DIR} --python_out=${OUTDIR} --pyi_out=${OUTDIR} ${PROTO_DIR}/msg.proto +python3 -m grpc_tools.protoc -I ${PROTO_DIR} --python_out=${OUTDIR} --pyi_out=${OUTDIR} ${PROTO_DIR}/rg.proto +python3 -m grpc_tools.protoc -I ${PROTO_DIR} --python_out=${OUTDIR} --pyi_out=${OUTDIR} --grpc_python_out=${OUTDIR} ${PROTO_DIR}/milvus.proto + +if [[ $(uname -s) == "Darwin" ]]; then + if ! brew --prefix --installed gnu-sed >/dev/null 2>&1; then + brew install gnu-sed + fi + export PATH="/usr/local/opt/gsed/libexec/gnubin:$PATH" +fi + +sed -i 's/import common_pb2 as common__pb2/from . import common_pb2 as common__pb2/' $OUTDIR/*py +sed -i 's/import schema_pb2 as schema__pb2/from . import schema_pb2 as schema__pb2/' $OUTDIR/*py +sed -i 's/import milvus_pb2 as milvus__pb2/from . import milvus_pb2 as milvus__pb2/' $OUTDIR/*py +sed -i 's/import feder_pb2 as feder__pb2/from . import feder_pb2 as feder__pb2/' $OUTDIR/*py +sed -i 's/import msg_pb2 as msg__pb2/from . import msg_pb2 as msg__pb2/' $OUTDIR/*py +sed -i 's/import rg_pb2 as rg__pb2/from . import rg_pb2 as rg__pb2/' $OUTDIR/*py + +sed -i 's/import common_pb2 as _common_pb2/from . import common_pb2 as _common_pb2/' $OUTDIR/*pyi +sed -i 's/import schema_pb2 as _schema_pb2/from . import schema_pb2 as _schema_pb2/' $OUTDIR/*pyi +sed -i 's/import milvus_pb2 as _milvus_pb2/from . import milvus_pb2 as _milvus_pb2/' $OUTDIR/*pyi +sed -i 's/import feder_pb2 as _feder_pb2/from . import feder_pb2 as _feder_pb2/' $OUTDIR/*pyi +sed -i 's/import msg_pb2 as _msg_pb2/from . import msg_pb2 as _msg_pb2/' $OUTDIR/*pyi +sed -i 's/import rg_pb2 as _rg_pb2/from . import rg_pb2 as _rg_pb2/' $OUTDIR/*pyi + +# WORKAROUND: Remove _registered_method parameter for compatibility with grpcio-testing +# This is a known issue where grpcio-testing's TestingChannel doesn't support the +# _registered_method parameter that was added in grpcio 1.65.0+ +# The grpcio-testing package's TestingChannel.unary_unary() method signature hasn't been +# updated to accept this parameter, even though the main grpcio package generates it. +# TODO: Remove this workaround when grpcio-testing is updated to support this parameter +sed -i 's/, _registered_method=True)/)/g' $OUTDIR/milvus_pb2_grpc.py +sed -i 's/_registered_method=True)/)/g' $OUTDIR/milvus_pb2_grpc.py + +echo "Success to generate the python proto files." diff --git a/pymilvus/grpc_gen/rg_pb2.py b/pymilvus/grpc_gen/rg_pb2.py new file mode 100644 index 000000000..94ea9c91b --- /dev/null +++ b/pymilvus/grpc_gen/rg_pb2.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: rg.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'rg.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import common_pb2 as common__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x08rg.proto\x12\x0fmilvus.proto.rg\x1a\x0c\x63ommon.proto\"&\n\x12ResourceGroupLimit\x12\x10\n\x08node_num\x18\x01 \x01(\x05\"/\n\x15ResourceGroupTransfer\x12\x16\n\x0eresource_group\x18\x01 \x01(\t\"Q\n\x17ResourceGroupNodeFilter\x12\x36\n\x0bnode_labels\x18\x01 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xbc\x02\n\x13ResourceGroupConfig\x12\x35\n\x08requests\x18\x01 \x01(\x0b\x32#.milvus.proto.rg.ResourceGroupLimit\x12\x33\n\x06limits\x18\x02 \x01(\x0b\x32#.milvus.proto.rg.ResourceGroupLimit\x12=\n\rtransfer_from\x18\x03 \x03(\x0b\x32&.milvus.proto.rg.ResourceGroupTransfer\x12;\n\x0btransfer_to\x18\x04 \x03(\x0b\x32&.milvus.proto.rg.ResourceGroupTransfer\x12=\n\x0bnode_filter\x18\x05 \x01(\x0b\x32(.milvus.proto.rg.ResourceGroupNodeFilterBp\n\x0eio.milvus.grpcB\x12ResourceGroupProtoP\x01Z0github.com/milvus-io/milvus-proto/go-api/v2/rgpb\xa0\x01\x01\xaa\x02\x12Milvus.Client.Grpcb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'rg_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\016io.milvus.grpcB\022ResourceGroupProtoP\001Z0github.com/milvus-io/milvus-proto/go-api/v2/rgpb\240\001\001\252\002\022Milvus.Client.Grpc' + _globals['_RESOURCEGROUPLIMIT']._serialized_start=43 + _globals['_RESOURCEGROUPLIMIT']._serialized_end=81 + _globals['_RESOURCEGROUPTRANSFER']._serialized_start=83 + _globals['_RESOURCEGROUPTRANSFER']._serialized_end=130 + _globals['_RESOURCEGROUPNODEFILTER']._serialized_start=132 + _globals['_RESOURCEGROUPNODEFILTER']._serialized_end=213 + _globals['_RESOURCEGROUPCONFIG']._serialized_start=216 + _globals['_RESOURCEGROUPCONFIG']._serialized_end=532 +# @@protoc_insertion_point(module_scope) diff --git a/pymilvus/grpc_gen/rg_pb2.pyi b/pymilvus/grpc_gen/rg_pb2.pyi new file mode 100644 index 000000000..57620897f --- /dev/null +++ b/pymilvus/grpc_gen/rg_pb2.pyi @@ -0,0 +1,39 @@ +from . import common_pb2 as _common_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class ResourceGroupLimit(_message.Message): + __slots__ = ("node_num",) + NODE_NUM_FIELD_NUMBER: _ClassVar[int] + node_num: int + def __init__(self, node_num: _Optional[int] = ...) -> None: ... + +class ResourceGroupTransfer(_message.Message): + __slots__ = ("resource_group",) + RESOURCE_GROUP_FIELD_NUMBER: _ClassVar[int] + resource_group: str + def __init__(self, resource_group: _Optional[str] = ...) -> None: ... + +class ResourceGroupNodeFilter(_message.Message): + __slots__ = ("node_labels",) + NODE_LABELS_FIELD_NUMBER: _ClassVar[int] + node_labels: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, node_labels: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class ResourceGroupConfig(_message.Message): + __slots__ = ("requests", "limits", "transfer_from", "transfer_to", "node_filter") + REQUESTS_FIELD_NUMBER: _ClassVar[int] + LIMITS_FIELD_NUMBER: _ClassVar[int] + TRANSFER_FROM_FIELD_NUMBER: _ClassVar[int] + TRANSFER_TO_FIELD_NUMBER: _ClassVar[int] + NODE_FILTER_FIELD_NUMBER: _ClassVar[int] + requests: ResourceGroupLimit + limits: ResourceGroupLimit + transfer_from: _containers.RepeatedCompositeFieldContainer[ResourceGroupTransfer] + transfer_to: _containers.RepeatedCompositeFieldContainer[ResourceGroupTransfer] + node_filter: ResourceGroupNodeFilter + def __init__(self, requests: _Optional[_Union[ResourceGroupLimit, _Mapping]] = ..., limits: _Optional[_Union[ResourceGroupLimit, _Mapping]] = ..., transfer_from: _Optional[_Iterable[_Union[ResourceGroupTransfer, _Mapping]]] = ..., transfer_to: _Optional[_Iterable[_Union[ResourceGroupTransfer, _Mapping]]] = ..., node_filter: _Optional[_Union[ResourceGroupNodeFilter, _Mapping]] = ...) -> None: ... diff --git a/pymilvus/grpc_gen/schema_pb2.py b/pymilvus/grpc_gen/schema_pb2.py index bd4cef012..66793c48b 100644 --- a/pymilvus/grpc_gen/schema_pb2.py +++ b/pymilvus/grpc_gen/schema_pb2.py @@ -1,951 +1,111 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE # source: schema.proto +# Protobuf Python Version: 5.27.2 """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'schema.proto' +) # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() from . import common_pb2 as common__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='schema.proto', - package='milvus.proto.schema', - syntax='proto3', - serialized_options=b'Z3github.com/milvus-io/milvus/internal/proto/schemapb', - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x0cschema.proto\x12\x13milvus.proto.schema\x1a\x0c\x63ommon.proto\"\x8c\x02\n\x0b\x46ieldSchema\x12\x0f\n\x07\x66ieldID\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0eis_primary_key\x18\x03 \x01(\x08\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x30\n\tdata_type\x18\x05 \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\x12\x36\n\x0btype_params\x18\x06 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x37\n\x0cindex_params\x18\x07 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x0e\n\x06\x61utoID\x18\x08 \x01(\x08\"w\n\x10\x43ollectionSchema\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0e\n\x06\x61utoID\x18\x03 \x01(\x08\x12\x30\n\x06\x66ields\x18\x04 \x03(\x0b\x32 .milvus.proto.schema.FieldSchema\"\x19\n\tBoolArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x08\"\x18\n\x08IntArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x05\"\x19\n\tLongArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x03\"\x1a\n\nFloatArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\"\x1b\n\x0b\x44oubleArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x01\"\x1a\n\nBytesArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x0c\"\x1b\n\x0bStringArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\t\"\x92\x03\n\x0bScalarField\x12\x33\n\tbool_data\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.schema.BoolArrayH\x00\x12\x31\n\x08int_data\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.schema.IntArrayH\x00\x12\x33\n\tlong_data\x18\x03 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArrayH\x00\x12\x35\n\nfloat_data\x18\x04 \x01(\x0b\x32\x1f.milvus.proto.schema.FloatArrayH\x00\x12\x37\n\x0b\x64ouble_data\x18\x05 \x01(\x0b\x32 .milvus.proto.schema.DoubleArrayH\x00\x12\x37\n\x0bstring_data\x18\x06 \x01(\x0b\x32 .milvus.proto.schema.StringArrayH\x00\x12\x35\n\nbytes_data\x18\x07 \x01(\x0b\x32\x1f.milvus.proto.schema.BytesArrayH\x00\x42\x06\n\x04\x64\x61ta\"t\n\x0bVectorField\x12\x0b\n\x03\x64im\x18\x01 \x01(\x03\x12\x37\n\x0c\x66loat_vector\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.schema.FloatArrayH\x00\x12\x17\n\rbinary_vector\x18\x03 \x01(\x0cH\x00\x42\x06\n\x04\x64\x61ta\"\xd1\x01\n\tFieldData\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12\x33\n\x07scalars\x18\x03 \x01(\x0b\x32 .milvus.proto.schema.ScalarFieldH\x00\x12\x33\n\x07vectors\x18\x04 \x01(\x0b\x32 .milvus.proto.schema.VectorFieldH\x00\x12\x10\n\x08\x66ield_id\x18\x05 \x01(\x03\x42\x07\n\x05\x66ield\"w\n\x03IDs\x12\x30\n\x06int_id\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArrayH\x00\x12\x32\n\x06str_id\x18\x02 \x01(\x0b\x32 .milvus.proto.schema.StringArrayH\x00\x42\n\n\x08id_field\"\xb1\x01\n\x10SearchResultData\x12\x13\n\x0bnum_queries\x18\x01 \x01(\x03\x12\r\n\x05top_k\x18\x02 \x01(\x03\x12\x33\n\x0b\x66ields_data\x18\x03 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x0e\n\x06scores\x18\x04 \x03(\x02\x12%\n\x03ids\x18\x05 \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\r\n\x05topks\x18\x06 \x03(\x03*\x8f\x01\n\x08\x44\x61taType\x12\x08\n\x04None\x10\x00\x12\x08\n\x04\x42ool\x10\x01\x12\x08\n\x04Int8\x10\x02\x12\t\n\x05Int16\x10\x03\x12\t\n\x05Int32\x10\x04\x12\t\n\x05Int64\x10\x05\x12\t\n\x05\x46loat\x10\n\x12\n\n\x06\x44ouble\x10\x0b\x12\n\n\x06String\x10\x14\x12\x10\n\x0c\x42inaryVector\x10\x64\x12\x0f\n\x0b\x46loatVector\x10\x65\x42\x35Z3github.com/milvus-io/milvus/internal/proto/schemapbb\x06proto3' - , - dependencies=[common__pb2.DESCRIPTOR,]) - -_DATATYPE = _descriptor.EnumDescriptor( - name='DataType', - full_name='milvus.proto.schema.DataType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='None', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Bool', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Int8', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Int16', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Int32', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Int64', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Float', index=6, number=10, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='Double', index=7, number=11, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='String', index=8, number=20, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='BinaryVector', index=9, number=100, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FloatVector', index=10, number=101, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=1674, - serialized_end=1817, -) -_sym_db.RegisterEnumDescriptor(_DATATYPE) - -DataType = enum_type_wrapper.EnumTypeWrapper(_DATATYPE) -globals()['None'] = 0 -Bool = 1 -Int8 = 2 -Int16 = 3 -Int32 = 4 -Int64 = 5 -Float = 10 -Double = 11 -String = 20 -BinaryVector = 100 -FloatVector = 101 - - - -_FIELDSCHEMA = _descriptor.Descriptor( - name='FieldSchema', - full_name='milvus.proto.schema.FieldSchema', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='fieldID', full_name='milvus.proto.schema.FieldSchema.fieldID', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='name', full_name='milvus.proto.schema.FieldSchema.name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_primary_key', full_name='milvus.proto.schema.FieldSchema.is_primary_key', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='description', full_name='milvus.proto.schema.FieldSchema.description', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data_type', full_name='milvus.proto.schema.FieldSchema.data_type', index=4, - number=5, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type_params', full_name='milvus.proto.schema.FieldSchema.type_params', index=5, - number=6, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='index_params', full_name='milvus.proto.schema.FieldSchema.index_params', index=6, - number=7, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='autoID', full_name='milvus.proto.schema.FieldSchema.autoID', index=7, - number=8, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=52, - serialized_end=320, -) - - -_COLLECTIONSCHEMA = _descriptor.Descriptor( - name='CollectionSchema', - full_name='milvus.proto.schema.CollectionSchema', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='name', full_name='milvus.proto.schema.CollectionSchema.name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='description', full_name='milvus.proto.schema.CollectionSchema.description', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='autoID', full_name='milvus.proto.schema.CollectionSchema.autoID', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fields', full_name='milvus.proto.schema.CollectionSchema.fields', index=3, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=322, - serialized_end=441, -) - - -_BOOLARRAY = _descriptor.Descriptor( - name='BoolArray', - full_name='milvus.proto.schema.BoolArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.BoolArray.data', index=0, - number=1, type=8, cpp_type=7, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=443, - serialized_end=468, -) - - -_INTARRAY = _descriptor.Descriptor( - name='IntArray', - full_name='milvus.proto.schema.IntArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.IntArray.data', index=0, - number=1, type=5, cpp_type=1, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=470, - serialized_end=494, -) - - -_LONGARRAY = _descriptor.Descriptor( - name='LongArray', - full_name='milvus.proto.schema.LongArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.LongArray.data', index=0, - number=1, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=496, - serialized_end=521, -) - - -_FLOATARRAY = _descriptor.Descriptor( - name='FloatArray', - full_name='milvus.proto.schema.FloatArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.FloatArray.data', index=0, - number=1, type=2, cpp_type=6, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=523, - serialized_end=549, -) - - -_DOUBLEARRAY = _descriptor.Descriptor( - name='DoubleArray', - full_name='milvus.proto.schema.DoubleArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.DoubleArray.data', index=0, - number=1, type=1, cpp_type=5, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=551, - serialized_end=578, -) - - -_BYTESARRAY = _descriptor.Descriptor( - name='BytesArray', - full_name='milvus.proto.schema.BytesArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.BytesArray.data', index=0, - number=1, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=580, - serialized_end=606, -) - - -_STRINGARRAY = _descriptor.Descriptor( - name='StringArray', - full_name='milvus.proto.schema.StringArray', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='milvus.proto.schema.StringArray.data', index=0, - number=1, type=9, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=608, - serialized_end=635, -) - - -_SCALARFIELD = _descriptor.Descriptor( - name='ScalarField', - full_name='milvus.proto.schema.ScalarField', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='bool_data', full_name='milvus.proto.schema.ScalarField.bool_data', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='int_data', full_name='milvus.proto.schema.ScalarField.int_data', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='long_data', full_name='milvus.proto.schema.ScalarField.long_data', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='float_data', full_name='milvus.proto.schema.ScalarField.float_data', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='double_data', full_name='milvus.proto.schema.ScalarField.double_data', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='string_data', full_name='milvus.proto.schema.ScalarField.string_data', index=5, - number=6, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='bytes_data', full_name='milvus.proto.schema.ScalarField.bytes_data', index=6, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='data', full_name='milvus.proto.schema.ScalarField.data', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=638, - serialized_end=1040, -) - - -_VECTORFIELD = _descriptor.Descriptor( - name='VectorField', - full_name='milvus.proto.schema.VectorField', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='dim', full_name='milvus.proto.schema.VectorField.dim', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='float_vector', full_name='milvus.proto.schema.VectorField.float_vector', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='binary_vector', full_name='milvus.proto.schema.VectorField.binary_vector', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='data', full_name='milvus.proto.schema.VectorField.data', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=1042, - serialized_end=1158, -) - - -_FIELDDATA = _descriptor.Descriptor( - name='FieldData', - full_name='milvus.proto.schema.FieldData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='type', full_name='milvus.proto.schema.FieldData.type', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_name', full_name='milvus.proto.schema.FieldData.field_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='scalars', full_name='milvus.proto.schema.FieldData.scalars', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='vectors', full_name='milvus.proto.schema.FieldData.vectors', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='field_id', full_name='milvus.proto.schema.FieldData.field_id', index=4, - number=5, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='field', full_name='milvus.proto.schema.FieldData.field', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=1161, - serialized_end=1370, -) - - -_IDS = _descriptor.Descriptor( - name='IDs', - full_name='milvus.proto.schema.IDs', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='int_id', full_name='milvus.proto.schema.IDs.int_id', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='str_id', full_name='milvus.proto.schema.IDs.str_id', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='id_field', full_name='milvus.proto.schema.IDs.id_field', - index=0, containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[]), - ], - serialized_start=1372, - serialized_end=1491, -) - - -_SEARCHRESULTDATA = _descriptor.Descriptor( - name='SearchResultData', - full_name='milvus.proto.schema.SearchResultData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='num_queries', full_name='milvus.proto.schema.SearchResultData.num_queries', index=0, - number=1, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='top_k', full_name='milvus.proto.schema.SearchResultData.top_k', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='fields_data', full_name='milvus.proto.schema.SearchResultData.fields_data', index=2, - number=3, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='scores', full_name='milvus.proto.schema.SearchResultData.scores', index=3, - number=4, type=2, cpp_type=6, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='ids', full_name='milvus.proto.schema.SearchResultData.ids', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='topks', full_name='milvus.proto.schema.SearchResultData.topks', index=5, - number=6, type=3, cpp_type=2, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1494, - serialized_end=1671, -) - -_FIELDSCHEMA.fields_by_name['data_type'].enum_type = _DATATYPE -_FIELDSCHEMA.fields_by_name['type_params'].message_type = common__pb2._KEYVALUEPAIR -_FIELDSCHEMA.fields_by_name['index_params'].message_type = common__pb2._KEYVALUEPAIR -_COLLECTIONSCHEMA.fields_by_name['fields'].message_type = _FIELDSCHEMA -_SCALARFIELD.fields_by_name['bool_data'].message_type = _BOOLARRAY -_SCALARFIELD.fields_by_name['int_data'].message_type = _INTARRAY -_SCALARFIELD.fields_by_name['long_data'].message_type = _LONGARRAY -_SCALARFIELD.fields_by_name['float_data'].message_type = _FLOATARRAY -_SCALARFIELD.fields_by_name['double_data'].message_type = _DOUBLEARRAY -_SCALARFIELD.fields_by_name['string_data'].message_type = _STRINGARRAY -_SCALARFIELD.fields_by_name['bytes_data'].message_type = _BYTESARRAY -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['bool_data']) -_SCALARFIELD.fields_by_name['bool_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['int_data']) -_SCALARFIELD.fields_by_name['int_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['long_data']) -_SCALARFIELD.fields_by_name['long_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['float_data']) -_SCALARFIELD.fields_by_name['float_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['double_data']) -_SCALARFIELD.fields_by_name['double_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['string_data']) -_SCALARFIELD.fields_by_name['string_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_SCALARFIELD.oneofs_by_name['data'].fields.append( - _SCALARFIELD.fields_by_name['bytes_data']) -_SCALARFIELD.fields_by_name['bytes_data'].containing_oneof = _SCALARFIELD.oneofs_by_name['data'] -_VECTORFIELD.fields_by_name['float_vector'].message_type = _FLOATARRAY -_VECTORFIELD.oneofs_by_name['data'].fields.append( - _VECTORFIELD.fields_by_name['float_vector']) -_VECTORFIELD.fields_by_name['float_vector'].containing_oneof = _VECTORFIELD.oneofs_by_name['data'] -_VECTORFIELD.oneofs_by_name['data'].fields.append( - _VECTORFIELD.fields_by_name['binary_vector']) -_VECTORFIELD.fields_by_name['binary_vector'].containing_oneof = _VECTORFIELD.oneofs_by_name['data'] -_FIELDDATA.fields_by_name['type'].enum_type = _DATATYPE -_FIELDDATA.fields_by_name['scalars'].message_type = _SCALARFIELD -_FIELDDATA.fields_by_name['vectors'].message_type = _VECTORFIELD -_FIELDDATA.oneofs_by_name['field'].fields.append( - _FIELDDATA.fields_by_name['scalars']) -_FIELDDATA.fields_by_name['scalars'].containing_oneof = _FIELDDATA.oneofs_by_name['field'] -_FIELDDATA.oneofs_by_name['field'].fields.append( - _FIELDDATA.fields_by_name['vectors']) -_FIELDDATA.fields_by_name['vectors'].containing_oneof = _FIELDDATA.oneofs_by_name['field'] -_IDS.fields_by_name['int_id'].message_type = _LONGARRAY -_IDS.fields_by_name['str_id'].message_type = _STRINGARRAY -_IDS.oneofs_by_name['id_field'].fields.append( - _IDS.fields_by_name['int_id']) -_IDS.fields_by_name['int_id'].containing_oneof = _IDS.oneofs_by_name['id_field'] -_IDS.oneofs_by_name['id_field'].fields.append( - _IDS.fields_by_name['str_id']) -_IDS.fields_by_name['str_id'].containing_oneof = _IDS.oneofs_by_name['id_field'] -_SEARCHRESULTDATA.fields_by_name['fields_data'].message_type = _FIELDDATA -_SEARCHRESULTDATA.fields_by_name['ids'].message_type = _IDS -DESCRIPTOR.message_types_by_name['FieldSchema'] = _FIELDSCHEMA -DESCRIPTOR.message_types_by_name['CollectionSchema'] = _COLLECTIONSCHEMA -DESCRIPTOR.message_types_by_name['BoolArray'] = _BOOLARRAY -DESCRIPTOR.message_types_by_name['IntArray'] = _INTARRAY -DESCRIPTOR.message_types_by_name['LongArray'] = _LONGARRAY -DESCRIPTOR.message_types_by_name['FloatArray'] = _FLOATARRAY -DESCRIPTOR.message_types_by_name['DoubleArray'] = _DOUBLEARRAY -DESCRIPTOR.message_types_by_name['BytesArray'] = _BYTESARRAY -DESCRIPTOR.message_types_by_name['StringArray'] = _STRINGARRAY -DESCRIPTOR.message_types_by_name['ScalarField'] = _SCALARFIELD -DESCRIPTOR.message_types_by_name['VectorField'] = _VECTORFIELD -DESCRIPTOR.message_types_by_name['FieldData'] = _FIELDDATA -DESCRIPTOR.message_types_by_name['IDs'] = _IDS -DESCRIPTOR.message_types_by_name['SearchResultData'] = _SEARCHRESULTDATA -DESCRIPTOR.enum_types_by_name['DataType'] = _DATATYPE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -FieldSchema = _reflection.GeneratedProtocolMessageType('FieldSchema', (_message.Message,), { - 'DESCRIPTOR' : _FIELDSCHEMA, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.FieldSchema) - }) -_sym_db.RegisterMessage(FieldSchema) - -CollectionSchema = _reflection.GeneratedProtocolMessageType('CollectionSchema', (_message.Message,), { - 'DESCRIPTOR' : _COLLECTIONSCHEMA, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.CollectionSchema) - }) -_sym_db.RegisterMessage(CollectionSchema) - -BoolArray = _reflection.GeneratedProtocolMessageType('BoolArray', (_message.Message,), { - 'DESCRIPTOR' : _BOOLARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.BoolArray) - }) -_sym_db.RegisterMessage(BoolArray) - -IntArray = _reflection.GeneratedProtocolMessageType('IntArray', (_message.Message,), { - 'DESCRIPTOR' : _INTARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.IntArray) - }) -_sym_db.RegisterMessage(IntArray) - -LongArray = _reflection.GeneratedProtocolMessageType('LongArray', (_message.Message,), { - 'DESCRIPTOR' : _LONGARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.LongArray) - }) -_sym_db.RegisterMessage(LongArray) - -FloatArray = _reflection.GeneratedProtocolMessageType('FloatArray', (_message.Message,), { - 'DESCRIPTOR' : _FLOATARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.FloatArray) - }) -_sym_db.RegisterMessage(FloatArray) - -DoubleArray = _reflection.GeneratedProtocolMessageType('DoubleArray', (_message.Message,), { - 'DESCRIPTOR' : _DOUBLEARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.DoubleArray) - }) -_sym_db.RegisterMessage(DoubleArray) - -BytesArray = _reflection.GeneratedProtocolMessageType('BytesArray', (_message.Message,), { - 'DESCRIPTOR' : _BYTESARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.BytesArray) - }) -_sym_db.RegisterMessage(BytesArray) - -StringArray = _reflection.GeneratedProtocolMessageType('StringArray', (_message.Message,), { - 'DESCRIPTOR' : _STRINGARRAY, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.StringArray) - }) -_sym_db.RegisterMessage(StringArray) - -ScalarField = _reflection.GeneratedProtocolMessageType('ScalarField', (_message.Message,), { - 'DESCRIPTOR' : _SCALARFIELD, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.ScalarField) - }) -_sym_db.RegisterMessage(ScalarField) - -VectorField = _reflection.GeneratedProtocolMessageType('VectorField', (_message.Message,), { - 'DESCRIPTOR' : _VECTORFIELD, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.VectorField) - }) -_sym_db.RegisterMessage(VectorField) - -FieldData = _reflection.GeneratedProtocolMessageType('FieldData', (_message.Message,), { - 'DESCRIPTOR' : _FIELDDATA, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.FieldData) - }) -_sym_db.RegisterMessage(FieldData) - -IDs = _reflection.GeneratedProtocolMessageType('IDs', (_message.Message,), { - 'DESCRIPTOR' : _IDS, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.IDs) - }) -_sym_db.RegisterMessage(IDs) - -SearchResultData = _reflection.GeneratedProtocolMessageType('SearchResultData', (_message.Message,), { - 'DESCRIPTOR' : _SEARCHRESULTDATA, - '__module__' : 'schema_pb2' - # @@protoc_insertion_point(class_scope:milvus.proto.schema.SearchResultData) - }) -_sym_db.RegisterMessage(SearchResultData) - - -DESCRIPTOR._options = None +from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cschema.proto\x12\x13milvus.proto.schema\x1a\x0c\x63ommon.proto\x1a google/protobuf/descriptor.proto\"\xa0\x04\n\x0b\x46ieldSchema\x12\x0f\n\x07\x66ieldID\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x16\n\x0eis_primary_key\x18\x03 \x01(\x08\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\x12\x30\n\tdata_type\x18\x05 \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\x12\x36\n\x0btype_params\x18\x06 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x37\n\x0cindex_params\x18\x07 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x0e\n\x06\x61utoID\x18\x08 \x01(\x08\x12.\n\x05state\x18\t \x01(\x0e\x32\x1f.milvus.proto.schema.FieldState\x12\x33\n\x0c\x65lement_type\x18\n \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\x12\x36\n\rdefault_value\x18\x0b \x01(\x0b\x32\x1f.milvus.proto.schema.ValueField\x12\x12\n\nis_dynamic\x18\x0c \x01(\x08\x12\x18\n\x10is_partition_key\x18\r \x01(\x08\x12\x19\n\x11is_clustering_key\x18\x0e \x01(\x08\x12\x10\n\x08nullable\x18\x0f \x01(\x08\x12\x1a\n\x12is_function_output\x18\x10 \x01(\x08\"\x8d\x02\n\x0e\x46unctionSchema\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x03\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12/\n\x04type\x18\x04 \x01(\x0e\x32!.milvus.proto.schema.FunctionType\x12\x19\n\x11input_field_names\x18\x05 \x03(\t\x12\x17\n\x0finput_field_ids\x18\x06 \x03(\x03\x12\x1a\n\x12output_field_names\x18\x07 \x03(\t\x12\x18\n\x10output_field_ids\x18\x08 \x03(\x03\x12\x31\n\x06params\x18\t \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"z\n\rFunctionScore\x12\x36\n\tfunctions\x18\x01 \x03(\x0b\x32#.milvus.proto.schema.FunctionSchema\x12\x31\n\x06params\x18\x02 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\xf3\x02\n\x10\x43ollectionSchema\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x12\n\x06\x61utoID\x18\x03 \x01(\x08\x42\x02\x18\x01\x12\x30\n\x06\x66ields\x18\x04 \x03(\x0b\x32 .milvus.proto.schema.FieldSchema\x12\x1c\n\x14\x65nable_dynamic_field\x18\x05 \x01(\x08\x12\x35\n\nproperties\x18\x06 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\x12\x36\n\tfunctions\x18\x07 \x03(\x0b\x32#.milvus.proto.schema.FunctionSchema\x12\x0e\n\x06\x64\x62Name\x18\x08 \x01(\t\x12H\n\x13struct_array_fields\x18\t \x03(\x0b\x32+.milvus.proto.schema.StructArrayFieldSchema\x12\x0f\n\x07version\x18\n \x01(\x05\"\xb6\x01\n\x16StructArrayFieldSchema\x12\x0f\n\x07\x66ieldID\x18\x01 \x01(\x03\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x30\n\x06\x66ields\x18\x04 \x03(\x0b\x32 .milvus.proto.schema.FieldSchema\x12\x36\n\x0btype_params\x18\x05 \x03(\x0b\x32!.milvus.proto.common.KeyValuePair\"\x19\n\tBoolArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x08\"\x18\n\x08IntArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x05\"\x19\n\tLongArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x03\"\x1a\n\nFloatArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x02\"\x1b\n\x0b\x44oubleArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x01\"\x1a\n\nBytesArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x0c\"\x1b\n\x0bStringArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\t\"q\n\nArrayArray\x12.\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32 .milvus.proto.schema.ScalarField\x12\x33\n\x0c\x65lement_type\x18\x02 \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\"\x19\n\tJSONArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x0c\"\x1d\n\rGeometryArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x0c\" \n\x10TimestamptzArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x03\" \n\x10GeometryWktArray\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\t\"\xc8\x01\n\nValueField\x12\x13\n\tbool_data\x18\x01 \x01(\x08H\x00\x12\x12\n\x08int_data\x18\x02 \x01(\x05H\x00\x12\x13\n\tlong_data\x18\x03 \x01(\x03H\x00\x12\x14\n\nfloat_data\x18\x04 \x01(\x02H\x00\x12\x15\n\x0b\x64ouble_data\x18\x05 \x01(\x01H\x00\x12\x15\n\x0bstring_data\x18\x06 \x01(\tH\x00\x12\x14\n\nbytes_data\x18\x07 \x01(\x0cH\x00\x12\x1a\n\x10timestamptz_data\x18\x08 \x01(\x03H\x00\x42\x06\n\x04\x64\x61ta\"\xc2\x05\n\x0bScalarField\x12\x33\n\tbool_data\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.schema.BoolArrayH\x00\x12\x31\n\x08int_data\x18\x02 \x01(\x0b\x32\x1d.milvus.proto.schema.IntArrayH\x00\x12\x33\n\tlong_data\x18\x03 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArrayH\x00\x12\x35\n\nfloat_data\x18\x04 \x01(\x0b\x32\x1f.milvus.proto.schema.FloatArrayH\x00\x12\x37\n\x0b\x64ouble_data\x18\x05 \x01(\x0b\x32 .milvus.proto.schema.DoubleArrayH\x00\x12\x37\n\x0bstring_data\x18\x06 \x01(\x0b\x32 .milvus.proto.schema.StringArrayH\x00\x12\x35\n\nbytes_data\x18\x07 \x01(\x0b\x32\x1f.milvus.proto.schema.BytesArrayH\x00\x12\x35\n\narray_data\x18\x08 \x01(\x0b\x32\x1f.milvus.proto.schema.ArrayArrayH\x00\x12\x33\n\tjson_data\x18\t \x01(\x0b\x32\x1e.milvus.proto.schema.JSONArrayH\x00\x12;\n\rgeometry_data\x18\n \x01(\x0b\x32\".milvus.proto.schema.GeometryArrayH\x00\x12\x41\n\x10timestamptz_data\x18\x0b \x01(\x0b\x32%.milvus.proto.schema.TimestamptzArrayH\x00\x12\x42\n\x11geometry_wkt_data\x18\x0c \x01(\x0b\x32%.milvus.proto.schema.GeometryWktArrayH\x00\x42\x06\n\x04\x64\x61ta\"1\n\x10SparseFloatArray\x12\x10\n\x08\x63ontents\x18\x01 \x03(\x0c\x12\x0b\n\x03\x64im\x18\x02 \x01(\x03\"\xc0\x02\n\x0bVectorField\x12\x0b\n\x03\x64im\x18\x01 \x01(\x03\x12\x37\n\x0c\x66loat_vector\x18\x02 \x01(\x0b\x32\x1f.milvus.proto.schema.FloatArrayH\x00\x12\x17\n\rbinary_vector\x18\x03 \x01(\x0cH\x00\x12\x18\n\x0e\x66loat16_vector\x18\x04 \x01(\x0cH\x00\x12\x19\n\x0f\x62\x66loat16_vector\x18\x05 \x01(\x0cH\x00\x12\x44\n\x13sparse_float_vector\x18\x06 \x01(\x0b\x32%.milvus.proto.schema.SparseFloatArrayH\x00\x12\x15\n\x0bint8_vector\x18\x07 \x01(\x0cH\x00\x12\x38\n\x0cvector_array\x18\x08 \x01(\x0b\x32 .milvus.proto.schema.VectorArrayH\x00\x42\x06\n\x04\x64\x61ta\"\x7f\n\x0bVectorArray\x12\x0b\n\x03\x64im\x18\x01 \x01(\x03\x12.\n\x04\x64\x61ta\x18\x02 \x03(\x0b\x32 .milvus.proto.schema.VectorField\x12\x33\n\x0c\x65lement_type\x18\x03 \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\"B\n\x10StructArrayField\x12.\n\x06\x66ields\x18\x01 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\"\xb9\x02\n\tFieldData\x12+\n\x04type\x18\x01 \x01(\x0e\x32\x1d.milvus.proto.schema.DataType\x12\x12\n\nfield_name\x18\x02 \x01(\t\x12\x33\n\x07scalars\x18\x03 \x01(\x0b\x32 .milvus.proto.schema.ScalarFieldH\x00\x12\x33\n\x07vectors\x18\x04 \x01(\x0b\x32 .milvus.proto.schema.VectorFieldH\x00\x12>\n\rstruct_arrays\x18\x08 \x01(\x0b\x32%.milvus.proto.schema.StructArrayFieldH\x00\x12\x10\n\x08\x66ield_id\x18\x05 \x01(\x03\x12\x12\n\nis_dynamic\x18\x06 \x01(\x08\x12\x12\n\nvalid_data\x18\x07 \x03(\x08\x42\x07\n\x05\x66ield\"w\n\x03IDs\x12\x30\n\x06int_id\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArrayH\x00\x12\x32\n\x06str_id\x18\x02 \x01(\x0b\x32 .milvus.proto.schema.StringArrayH\x00\x42\n\n\x08id_field\"<\n\x17SearchIteratorV2Results\x12\r\n\x05token\x18\x01 \x01(\t\x12\x12\n\nlast_bound\x18\x02 \x01(\x02\"\x97\x04\n\x10SearchResultData\x12\x13\n\x0bnum_queries\x18\x01 \x01(\x03\x12\r\n\x05top_k\x18\x02 \x01(\x03\x12\x33\n\x0b\x66ields_data\x18\x03 \x03(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x0e\n\x06scores\x18\x04 \x03(\x02\x12%\n\x03ids\x18\x05 \x01(\x0b\x32\x18.milvus.proto.schema.IDs\x12\r\n\x05topks\x18\x06 \x03(\x03\x12\x15\n\routput_fields\x18\x07 \x03(\t\x12<\n\x14group_by_field_value\x18\x08 \x01(\x0b\x32\x1e.milvus.proto.schema.FieldData\x12\x18\n\x10\x61ll_search_count\x18\t \x01(\x03\x12\x11\n\tdistances\x18\n \x03(\x02\x12U\n\x1asearch_iterator_v2_results\x18\x0b \x01(\x0b\x32,.milvus.proto.schema.SearchIteratorV2ResultsH\x00\x88\x01\x01\x12\x0f\n\x07recalls\x18\x0c \x03(\x02\x12\x1a\n\x12primary_field_name\x18\r \x01(\t\x12?\n\x11highlight_results\x18\x0e \x03(\x0b\x32$.milvus.proto.common.HighlightResultB\x1d\n\x1b_search_iterator_v2_results\"Y\n\x14VectorClusteringInfo\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\x32\n\x08\x63\x65ntroid\x18\x02 \x01(\x0b\x32 .milvus.proto.schema.VectorField\"%\n\x14ScalarClusteringInfo\x12\r\n\x05\x66ield\x18\x01 \x01(\t\"\xa8\x01\n\x0e\x43lusteringInfo\x12J\n\x17vector_clustering_infos\x18\x01 \x03(\x0b\x32).milvus.proto.schema.VectorClusteringInfo\x12J\n\x17scalar_clustering_infos\x18\x02 \x03(\x0b\x32).milvus.proto.schema.ScalarClusteringInfo\"\xa8\x01\n\rTemplateValue\x12\x12\n\x08\x62ool_val\x18\x01 \x01(\x08H\x00\x12\x13\n\tint64_val\x18\x02 \x01(\x03H\x00\x12\x13\n\tfloat_val\x18\x03 \x01(\x01H\x00\x12\x14\n\nstring_val\x18\x04 \x01(\tH\x00\x12<\n\tarray_val\x18\x05 \x01(\x0b\x32\'.milvus.proto.schema.TemplateArrayValueH\x00\x42\x05\n\x03val\"\xf1\x02\n\x12TemplateArrayValue\x12\x33\n\tbool_data\x18\x01 \x01(\x0b\x32\x1e.milvus.proto.schema.BoolArrayH\x00\x12\x33\n\tlong_data\x18\x02 \x01(\x0b\x32\x1e.milvus.proto.schema.LongArrayH\x00\x12\x37\n\x0b\x64ouble_data\x18\x03 \x01(\x0b\x32 .milvus.proto.schema.DoubleArrayH\x00\x12\x37\n\x0bstring_data\x18\x04 \x01(\x0b\x32 .milvus.proto.schema.StringArrayH\x00\x12\x42\n\narray_data\x18\x05 \x01(\x0b\x32,.milvus.proto.schema.TemplateArrayValueArrayH\x00\x12\x33\n\tjson_data\x18\x06 \x01(\x0b\x32\x1e.milvus.proto.schema.JSONArrayH\x00\x42\x06\n\x04\x64\x61ta\"P\n\x17TemplateArrayValueArray\x12\x35\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\'.milvus.proto.schema.TemplateArrayValue*\xdc\x02\n\x08\x44\x61taType\x12\x08\n\x04None\x10\x00\x12\x08\n\x04\x42ool\x10\x01\x12\x08\n\x04Int8\x10\x02\x12\t\n\x05Int16\x10\x03\x12\t\n\x05Int32\x10\x04\x12\t\n\x05Int64\x10\x05\x12\t\n\x05\x46loat\x10\n\x12\n\n\x06\x44ouble\x10\x0b\x12\n\n\x06String\x10\x14\x12\x0b\n\x07VarChar\x10\x15\x12\t\n\x05\x41rray\x10\x16\x12\x08\n\x04JSON\x10\x17\x12\x0c\n\x08Geometry\x10\x18\x12\x08\n\x04Text\x10\x19\x12\x0f\n\x0bTimestamptz\x10\x1a\x12\x10\n\x0c\x42inaryVector\x10\x64\x12\x0f\n\x0b\x46loatVector\x10\x65\x12\x11\n\rFloat16Vector\x10\x66\x12\x12\n\x0e\x42\x46loat16Vector\x10g\x12\x15\n\x11SparseFloatVector\x10h\x12\x0e\n\nInt8Vector\x10i\x12\x11\n\rArrayOfVector\x10j\x12\x12\n\rArrayOfStruct\x10\xc8\x01\x12\x0b\n\x06Struct\x10\xc9\x01*D\n\x0c\x46unctionType\x12\x0b\n\x07Unknown\x10\x00\x12\x08\n\x04\x42M25\x10\x01\x12\x11\n\rTextEmbedding\x10\x02\x12\n\n\x06Rerank\x10\x03*V\n\nFieldState\x12\x10\n\x0c\x46ieldCreated\x10\x00\x12\x11\n\rFieldCreating\x10\x01\x12\x11\n\rFieldDropping\x10\x02\x12\x10\n\x0c\x46ieldDropped\x10\x03\x42m\n\x0eio.milvus.grpcB\x0bSchemaProtoP\x01Z4github.com/milvus-io/milvus-proto/go-api/v2/schemapb\xa0\x01\x01\xaa\x02\x12Milvus.Client.Grpcb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'schema_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + _globals['DESCRIPTOR']._loaded_options = None + _globals['DESCRIPTOR']._serialized_options = b'\n\016io.milvus.grpcB\013SchemaProtoP\001Z4github.com/milvus-io/milvus-proto/go-api/v2/schemapb\240\001\001\252\002\022Milvus.Client.Grpc' + _globals['_COLLECTIONSCHEMA'].fields_by_name['autoID']._loaded_options = None + _globals['_COLLECTIONSCHEMA'].fields_by_name['autoID']._serialized_options = b'\030\001' + _globals['_DATATYPE']._serialized_start=5469 + _globals['_DATATYPE']._serialized_end=5817 + _globals['_FUNCTIONTYPE']._serialized_start=5819 + _globals['_FUNCTIONTYPE']._serialized_end=5887 + _globals['_FIELDSTATE']._serialized_start=5889 + _globals['_FIELDSTATE']._serialized_end=5975 + _globals['_FIELDSCHEMA']._serialized_start=86 + _globals['_FIELDSCHEMA']._serialized_end=630 + _globals['_FUNCTIONSCHEMA']._serialized_start=633 + _globals['_FUNCTIONSCHEMA']._serialized_end=902 + _globals['_FUNCTIONSCORE']._serialized_start=904 + _globals['_FUNCTIONSCORE']._serialized_end=1026 + _globals['_COLLECTIONSCHEMA']._serialized_start=1029 + _globals['_COLLECTIONSCHEMA']._serialized_end=1400 + _globals['_STRUCTARRAYFIELDSCHEMA']._serialized_start=1403 + _globals['_STRUCTARRAYFIELDSCHEMA']._serialized_end=1585 + _globals['_BOOLARRAY']._serialized_start=1587 + _globals['_BOOLARRAY']._serialized_end=1612 + _globals['_INTARRAY']._serialized_start=1614 + _globals['_INTARRAY']._serialized_end=1638 + _globals['_LONGARRAY']._serialized_start=1640 + _globals['_LONGARRAY']._serialized_end=1665 + _globals['_FLOATARRAY']._serialized_start=1667 + _globals['_FLOATARRAY']._serialized_end=1693 + _globals['_DOUBLEARRAY']._serialized_start=1695 + _globals['_DOUBLEARRAY']._serialized_end=1722 + _globals['_BYTESARRAY']._serialized_start=1724 + _globals['_BYTESARRAY']._serialized_end=1750 + _globals['_STRINGARRAY']._serialized_start=1752 + _globals['_STRINGARRAY']._serialized_end=1779 + _globals['_ARRAYARRAY']._serialized_start=1781 + _globals['_ARRAYARRAY']._serialized_end=1894 + _globals['_JSONARRAY']._serialized_start=1896 + _globals['_JSONARRAY']._serialized_end=1921 + _globals['_GEOMETRYARRAY']._serialized_start=1923 + _globals['_GEOMETRYARRAY']._serialized_end=1952 + _globals['_TIMESTAMPTZARRAY']._serialized_start=1954 + _globals['_TIMESTAMPTZARRAY']._serialized_end=1986 + _globals['_GEOMETRYWKTARRAY']._serialized_start=1988 + _globals['_GEOMETRYWKTARRAY']._serialized_end=2020 + _globals['_VALUEFIELD']._serialized_start=2023 + _globals['_VALUEFIELD']._serialized_end=2223 + _globals['_SCALARFIELD']._serialized_start=2226 + _globals['_SCALARFIELD']._serialized_end=2932 + _globals['_SPARSEFLOATARRAY']._serialized_start=2934 + _globals['_SPARSEFLOATARRAY']._serialized_end=2983 + _globals['_VECTORFIELD']._serialized_start=2986 + _globals['_VECTORFIELD']._serialized_end=3306 + _globals['_VECTORARRAY']._serialized_start=3308 + _globals['_VECTORARRAY']._serialized_end=3435 + _globals['_STRUCTARRAYFIELD']._serialized_start=3437 + _globals['_STRUCTARRAYFIELD']._serialized_end=3503 + _globals['_FIELDDATA']._serialized_start=3506 + _globals['_FIELDDATA']._serialized_end=3819 + _globals['_IDS']._serialized_start=3821 + _globals['_IDS']._serialized_end=3940 + _globals['_SEARCHITERATORV2RESULTS']._serialized_start=3942 + _globals['_SEARCHITERATORV2RESULTS']._serialized_end=4002 + _globals['_SEARCHRESULTDATA']._serialized_start=4005 + _globals['_SEARCHRESULTDATA']._serialized_end=4540 + _globals['_VECTORCLUSTERINGINFO']._serialized_start=4542 + _globals['_VECTORCLUSTERINGINFO']._serialized_end=4631 + _globals['_SCALARCLUSTERINGINFO']._serialized_start=4633 + _globals['_SCALARCLUSTERINGINFO']._serialized_end=4670 + _globals['_CLUSTERINGINFO']._serialized_start=4673 + _globals['_CLUSTERINGINFO']._serialized_end=4841 + _globals['_TEMPLATEVALUE']._serialized_start=4844 + _globals['_TEMPLATEVALUE']._serialized_end=5012 + _globals['_TEMPLATEARRAYVALUE']._serialized_start=5015 + _globals['_TEMPLATEARRAYVALUE']._serialized_end=5384 + _globals['_TEMPLATEARRAYVALUEARRAY']._serialized_start=5386 + _globals['_TEMPLATEARRAYVALUEARRAY']._serialized_end=5466 # @@protoc_insertion_point(module_scope) diff --git a/pymilvus/grpc_gen/schema_pb2.pyi b/pymilvus/grpc_gen/schema_pb2.pyi new file mode 100644 index 000000000..ea4a90937 --- /dev/null +++ b/pymilvus/grpc_gen/schema_pb2.pyi @@ -0,0 +1,478 @@ +from . import common_pb2 as _common_pb2 +from google.protobuf import descriptor_pb2 as _descriptor_pb2 +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union + +DESCRIPTOR: _descriptor.FileDescriptor + +class DataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + None: _ClassVar[DataType] + Bool: _ClassVar[DataType] + Int8: _ClassVar[DataType] + Int16: _ClassVar[DataType] + Int32: _ClassVar[DataType] + Int64: _ClassVar[DataType] + Float: _ClassVar[DataType] + Double: _ClassVar[DataType] + String: _ClassVar[DataType] + VarChar: _ClassVar[DataType] + Array: _ClassVar[DataType] + JSON: _ClassVar[DataType] + Geometry: _ClassVar[DataType] + Text: _ClassVar[DataType] + Timestamptz: _ClassVar[DataType] + BinaryVector: _ClassVar[DataType] + FloatVector: _ClassVar[DataType] + Float16Vector: _ClassVar[DataType] + BFloat16Vector: _ClassVar[DataType] + SparseFloatVector: _ClassVar[DataType] + Int8Vector: _ClassVar[DataType] + ArrayOfVector: _ClassVar[DataType] + ArrayOfStruct: _ClassVar[DataType] + Struct: _ClassVar[DataType] + +class FunctionType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + Unknown: _ClassVar[FunctionType] + BM25: _ClassVar[FunctionType] + TextEmbedding: _ClassVar[FunctionType] + Rerank: _ClassVar[FunctionType] + +class FieldState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + FieldCreated: _ClassVar[FieldState] + FieldCreating: _ClassVar[FieldState] + FieldDropping: _ClassVar[FieldState] + FieldDropped: _ClassVar[FieldState] +None: DataType +Bool: DataType +Int8: DataType +Int16: DataType +Int32: DataType +Int64: DataType +Float: DataType +Double: DataType +String: DataType +VarChar: DataType +Array: DataType +JSON: DataType +Geometry: DataType +Text: DataType +Timestamptz: DataType +BinaryVector: DataType +FloatVector: DataType +Float16Vector: DataType +BFloat16Vector: DataType +SparseFloatVector: DataType +Int8Vector: DataType +ArrayOfVector: DataType +ArrayOfStruct: DataType +Struct: DataType +Unknown: FunctionType +BM25: FunctionType +TextEmbedding: FunctionType +Rerank: FunctionType +FieldCreated: FieldState +FieldCreating: FieldState +FieldDropping: FieldState +FieldDropped: FieldState + +class FieldSchema(_message.Message): + __slots__ = ("fieldID", "name", "is_primary_key", "description", "data_type", "type_params", "index_params", "autoID", "state", "element_type", "default_value", "is_dynamic", "is_partition_key", "is_clustering_key", "nullable", "is_function_output") + FIELDID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + IS_PRIMARY_KEY_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + DATA_TYPE_FIELD_NUMBER: _ClassVar[int] + TYPE_PARAMS_FIELD_NUMBER: _ClassVar[int] + INDEX_PARAMS_FIELD_NUMBER: _ClassVar[int] + AUTOID_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + ELEMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + DEFAULT_VALUE_FIELD_NUMBER: _ClassVar[int] + IS_DYNAMIC_FIELD_NUMBER: _ClassVar[int] + IS_PARTITION_KEY_FIELD_NUMBER: _ClassVar[int] + IS_CLUSTERING_KEY_FIELD_NUMBER: _ClassVar[int] + NULLABLE_FIELD_NUMBER: _ClassVar[int] + IS_FUNCTION_OUTPUT_FIELD_NUMBER: _ClassVar[int] + fieldID: int + name: str + is_primary_key: bool + description: str + data_type: DataType + type_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + index_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + autoID: bool + state: FieldState + element_type: DataType + default_value: ValueField + is_dynamic: bool + is_partition_key: bool + is_clustering_key: bool + nullable: bool + is_function_output: bool + def __init__(self, fieldID: _Optional[int] = ..., name: _Optional[str] = ..., is_primary_key: bool = ..., description: _Optional[str] = ..., data_type: _Optional[_Union[DataType, str]] = ..., type_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., index_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., autoID: bool = ..., state: _Optional[_Union[FieldState, str]] = ..., element_type: _Optional[_Union[DataType, str]] = ..., default_value: _Optional[_Union[ValueField, _Mapping]] = ..., is_dynamic: bool = ..., is_partition_key: bool = ..., is_clustering_key: bool = ..., nullable: bool = ..., is_function_output: bool = ...) -> None: ... + +class FunctionSchema(_message.Message): + __slots__ = ("name", "id", "description", "type", "input_field_names", "input_field_ids", "output_field_names", "output_field_ids", "params") + NAME_FIELD_NUMBER: _ClassVar[int] + ID_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + TYPE_FIELD_NUMBER: _ClassVar[int] + INPUT_FIELD_NAMES_FIELD_NUMBER: _ClassVar[int] + INPUT_FIELD_IDS_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELD_NAMES_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELD_IDS_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + name: str + id: int + description: str + type: FunctionType + input_field_names: _containers.RepeatedScalarFieldContainer[str] + input_field_ids: _containers.RepeatedScalarFieldContainer[int] + output_field_names: _containers.RepeatedScalarFieldContainer[str] + output_field_ids: _containers.RepeatedScalarFieldContainer[int] + params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, name: _Optional[str] = ..., id: _Optional[int] = ..., description: _Optional[str] = ..., type: _Optional[_Union[FunctionType, str]] = ..., input_field_names: _Optional[_Iterable[str]] = ..., input_field_ids: _Optional[_Iterable[int]] = ..., output_field_names: _Optional[_Iterable[str]] = ..., output_field_ids: _Optional[_Iterable[int]] = ..., params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class FunctionScore(_message.Message): + __slots__ = ("functions", "params") + FUNCTIONS_FIELD_NUMBER: _ClassVar[int] + PARAMS_FIELD_NUMBER: _ClassVar[int] + functions: _containers.RepeatedCompositeFieldContainer[FunctionSchema] + params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, functions: _Optional[_Iterable[_Union[FunctionSchema, _Mapping]]] = ..., params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class CollectionSchema(_message.Message): + __slots__ = ("name", "description", "autoID", "fields", "enable_dynamic_field", "properties", "functions", "dbName", "struct_array_fields", "version") + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + AUTOID_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + ENABLE_DYNAMIC_FIELD_FIELD_NUMBER: _ClassVar[int] + PROPERTIES_FIELD_NUMBER: _ClassVar[int] + FUNCTIONS_FIELD_NUMBER: _ClassVar[int] + DBNAME_FIELD_NUMBER: _ClassVar[int] + STRUCT_ARRAY_FIELDS_FIELD_NUMBER: _ClassVar[int] + VERSION_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + autoID: bool + fields: _containers.RepeatedCompositeFieldContainer[FieldSchema] + enable_dynamic_field: bool + properties: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + functions: _containers.RepeatedCompositeFieldContainer[FunctionSchema] + dbName: str + struct_array_fields: _containers.RepeatedCompositeFieldContainer[StructArrayFieldSchema] + version: int + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., autoID: bool = ..., fields: _Optional[_Iterable[_Union[FieldSchema, _Mapping]]] = ..., enable_dynamic_field: bool = ..., properties: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ..., functions: _Optional[_Iterable[_Union[FunctionSchema, _Mapping]]] = ..., dbName: _Optional[str] = ..., struct_array_fields: _Optional[_Iterable[_Union[StructArrayFieldSchema, _Mapping]]] = ..., version: _Optional[int] = ...) -> None: ... + +class StructArrayFieldSchema(_message.Message): + __slots__ = ("fieldID", "name", "description", "fields", "type_params") + FIELDID_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + FIELDS_FIELD_NUMBER: _ClassVar[int] + TYPE_PARAMS_FIELD_NUMBER: _ClassVar[int] + fieldID: int + name: str + description: str + fields: _containers.RepeatedCompositeFieldContainer[FieldSchema] + type_params: _containers.RepeatedCompositeFieldContainer[_common_pb2.KeyValuePair] + def __init__(self, fieldID: _Optional[int] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., fields: _Optional[_Iterable[_Union[FieldSchema, _Mapping]]] = ..., type_params: _Optional[_Iterable[_Union[_common_pb2.KeyValuePair, _Mapping]]] = ...) -> None: ... + +class BoolArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[bool] + def __init__(self, data: _Optional[_Iterable[bool]] = ...) -> None: ... + +class IntArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, data: _Optional[_Iterable[int]] = ...) -> None: ... + +class LongArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, data: _Optional[_Iterable[int]] = ...) -> None: ... + +class FloatArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[float] + def __init__(self, data: _Optional[_Iterable[float]] = ...) -> None: ... + +class DoubleArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[float] + def __init__(self, data: _Optional[_Iterable[float]] = ...) -> None: ... + +class BytesArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, data: _Optional[_Iterable[bytes]] = ...) -> None: ... + +class StringArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, data: _Optional[_Iterable[str]] = ...) -> None: ... + +class ArrayArray(_message.Message): + __slots__ = ("data", "element_type") + DATA_FIELD_NUMBER: _ClassVar[int] + ELEMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedCompositeFieldContainer[ScalarField] + element_type: DataType + def __init__(self, data: _Optional[_Iterable[_Union[ScalarField, _Mapping]]] = ..., element_type: _Optional[_Union[DataType, str]] = ...) -> None: ... + +class JSONArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, data: _Optional[_Iterable[bytes]] = ...) -> None: ... + +class GeometryArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[bytes] + def __init__(self, data: _Optional[_Iterable[bytes]] = ...) -> None: ... + +class TimestamptzArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[int] + def __init__(self, data: _Optional[_Iterable[int]] = ...) -> None: ... + +class GeometryWktArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, data: _Optional[_Iterable[str]] = ...) -> None: ... + +class ValueField(_message.Message): + __slots__ = ("bool_data", "int_data", "long_data", "float_data", "double_data", "string_data", "bytes_data", "timestamptz_data") + BOOL_DATA_FIELD_NUMBER: _ClassVar[int] + INT_DATA_FIELD_NUMBER: _ClassVar[int] + LONG_DATA_FIELD_NUMBER: _ClassVar[int] + FLOAT_DATA_FIELD_NUMBER: _ClassVar[int] + DOUBLE_DATA_FIELD_NUMBER: _ClassVar[int] + STRING_DATA_FIELD_NUMBER: _ClassVar[int] + BYTES_DATA_FIELD_NUMBER: _ClassVar[int] + TIMESTAMPTZ_DATA_FIELD_NUMBER: _ClassVar[int] + bool_data: bool + int_data: int + long_data: int + float_data: float + double_data: float + string_data: str + bytes_data: bytes + timestamptz_data: int + def __init__(self, bool_data: bool = ..., int_data: _Optional[int] = ..., long_data: _Optional[int] = ..., float_data: _Optional[float] = ..., double_data: _Optional[float] = ..., string_data: _Optional[str] = ..., bytes_data: _Optional[bytes] = ..., timestamptz_data: _Optional[int] = ...) -> None: ... + +class ScalarField(_message.Message): + __slots__ = ("bool_data", "int_data", "long_data", "float_data", "double_data", "string_data", "bytes_data", "array_data", "json_data", "geometry_data", "timestamptz_data", "geometry_wkt_data") + BOOL_DATA_FIELD_NUMBER: _ClassVar[int] + INT_DATA_FIELD_NUMBER: _ClassVar[int] + LONG_DATA_FIELD_NUMBER: _ClassVar[int] + FLOAT_DATA_FIELD_NUMBER: _ClassVar[int] + DOUBLE_DATA_FIELD_NUMBER: _ClassVar[int] + STRING_DATA_FIELD_NUMBER: _ClassVar[int] + BYTES_DATA_FIELD_NUMBER: _ClassVar[int] + ARRAY_DATA_FIELD_NUMBER: _ClassVar[int] + JSON_DATA_FIELD_NUMBER: _ClassVar[int] + GEOMETRY_DATA_FIELD_NUMBER: _ClassVar[int] + TIMESTAMPTZ_DATA_FIELD_NUMBER: _ClassVar[int] + GEOMETRY_WKT_DATA_FIELD_NUMBER: _ClassVar[int] + bool_data: BoolArray + int_data: IntArray + long_data: LongArray + float_data: FloatArray + double_data: DoubleArray + string_data: StringArray + bytes_data: BytesArray + array_data: ArrayArray + json_data: JSONArray + geometry_data: GeometryArray + timestamptz_data: TimestamptzArray + geometry_wkt_data: GeometryWktArray + def __init__(self, bool_data: _Optional[_Union[BoolArray, _Mapping]] = ..., int_data: _Optional[_Union[IntArray, _Mapping]] = ..., long_data: _Optional[_Union[LongArray, _Mapping]] = ..., float_data: _Optional[_Union[FloatArray, _Mapping]] = ..., double_data: _Optional[_Union[DoubleArray, _Mapping]] = ..., string_data: _Optional[_Union[StringArray, _Mapping]] = ..., bytes_data: _Optional[_Union[BytesArray, _Mapping]] = ..., array_data: _Optional[_Union[ArrayArray, _Mapping]] = ..., json_data: _Optional[_Union[JSONArray, _Mapping]] = ..., geometry_data: _Optional[_Union[GeometryArray, _Mapping]] = ..., timestamptz_data: _Optional[_Union[TimestamptzArray, _Mapping]] = ..., geometry_wkt_data: _Optional[_Union[GeometryWktArray, _Mapping]] = ...) -> None: ... + +class SparseFloatArray(_message.Message): + __slots__ = ("contents", "dim") + CONTENTS_FIELD_NUMBER: _ClassVar[int] + DIM_FIELD_NUMBER: _ClassVar[int] + contents: _containers.RepeatedScalarFieldContainer[bytes] + dim: int + def __init__(self, contents: _Optional[_Iterable[bytes]] = ..., dim: _Optional[int] = ...) -> None: ... + +class VectorField(_message.Message): + __slots__ = ("dim", "float_vector", "binary_vector", "float16_vector", "bfloat16_vector", "sparse_float_vector", "int8_vector", "vector_array") + DIM_FIELD_NUMBER: _ClassVar[int] + FLOAT_VECTOR_FIELD_NUMBER: _ClassVar[int] + BINARY_VECTOR_FIELD_NUMBER: _ClassVar[int] + FLOAT16_VECTOR_FIELD_NUMBER: _ClassVar[int] + BFLOAT16_VECTOR_FIELD_NUMBER: _ClassVar[int] + SPARSE_FLOAT_VECTOR_FIELD_NUMBER: _ClassVar[int] + INT8_VECTOR_FIELD_NUMBER: _ClassVar[int] + VECTOR_ARRAY_FIELD_NUMBER: _ClassVar[int] + dim: int + float_vector: FloatArray + binary_vector: bytes + float16_vector: bytes + bfloat16_vector: bytes + sparse_float_vector: SparseFloatArray + int8_vector: bytes + vector_array: VectorArray + def __init__(self, dim: _Optional[int] = ..., float_vector: _Optional[_Union[FloatArray, _Mapping]] = ..., binary_vector: _Optional[bytes] = ..., float16_vector: _Optional[bytes] = ..., bfloat16_vector: _Optional[bytes] = ..., sparse_float_vector: _Optional[_Union[SparseFloatArray, _Mapping]] = ..., int8_vector: _Optional[bytes] = ..., vector_array: _Optional[_Union[VectorArray, _Mapping]] = ...) -> None: ... + +class VectorArray(_message.Message): + __slots__ = ("dim", "data", "element_type") + DIM_FIELD_NUMBER: _ClassVar[int] + DATA_FIELD_NUMBER: _ClassVar[int] + ELEMENT_TYPE_FIELD_NUMBER: _ClassVar[int] + dim: int + data: _containers.RepeatedCompositeFieldContainer[VectorField] + element_type: DataType + def __init__(self, dim: _Optional[int] = ..., data: _Optional[_Iterable[_Union[VectorField, _Mapping]]] = ..., element_type: _Optional[_Union[DataType, str]] = ...) -> None: ... + +class StructArrayField(_message.Message): + __slots__ = ("fields",) + FIELDS_FIELD_NUMBER: _ClassVar[int] + fields: _containers.RepeatedCompositeFieldContainer[FieldData] + def __init__(self, fields: _Optional[_Iterable[_Union[FieldData, _Mapping]]] = ...) -> None: ... + +class FieldData(_message.Message): + __slots__ = ("type", "field_name", "scalars", "vectors", "struct_arrays", "field_id", "is_dynamic", "valid_data") + TYPE_FIELD_NUMBER: _ClassVar[int] + FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + SCALARS_FIELD_NUMBER: _ClassVar[int] + VECTORS_FIELD_NUMBER: _ClassVar[int] + STRUCT_ARRAYS_FIELD_NUMBER: _ClassVar[int] + FIELD_ID_FIELD_NUMBER: _ClassVar[int] + IS_DYNAMIC_FIELD_NUMBER: _ClassVar[int] + VALID_DATA_FIELD_NUMBER: _ClassVar[int] + type: DataType + field_name: str + scalars: ScalarField + vectors: VectorField + struct_arrays: StructArrayField + field_id: int + is_dynamic: bool + valid_data: _containers.RepeatedScalarFieldContainer[bool] + def __init__(self, type: _Optional[_Union[DataType, str]] = ..., field_name: _Optional[str] = ..., scalars: _Optional[_Union[ScalarField, _Mapping]] = ..., vectors: _Optional[_Union[VectorField, _Mapping]] = ..., struct_arrays: _Optional[_Union[StructArrayField, _Mapping]] = ..., field_id: _Optional[int] = ..., is_dynamic: bool = ..., valid_data: _Optional[_Iterable[bool]] = ...) -> None: ... + +class IDs(_message.Message): + __slots__ = ("int_id", "str_id") + INT_ID_FIELD_NUMBER: _ClassVar[int] + STR_ID_FIELD_NUMBER: _ClassVar[int] + int_id: LongArray + str_id: StringArray + def __init__(self, int_id: _Optional[_Union[LongArray, _Mapping]] = ..., str_id: _Optional[_Union[StringArray, _Mapping]] = ...) -> None: ... + +class SearchIteratorV2Results(_message.Message): + __slots__ = ("token", "last_bound") + TOKEN_FIELD_NUMBER: _ClassVar[int] + LAST_BOUND_FIELD_NUMBER: _ClassVar[int] + token: str + last_bound: float + def __init__(self, token: _Optional[str] = ..., last_bound: _Optional[float] = ...) -> None: ... + +class SearchResultData(_message.Message): + __slots__ = ("num_queries", "top_k", "fields_data", "scores", "ids", "topks", "output_fields", "group_by_field_value", "all_search_count", "distances", "search_iterator_v2_results", "recalls", "primary_field_name", "highlight_results") + NUM_QUERIES_FIELD_NUMBER: _ClassVar[int] + TOP_K_FIELD_NUMBER: _ClassVar[int] + FIELDS_DATA_FIELD_NUMBER: _ClassVar[int] + SCORES_FIELD_NUMBER: _ClassVar[int] + IDS_FIELD_NUMBER: _ClassVar[int] + TOPKS_FIELD_NUMBER: _ClassVar[int] + OUTPUT_FIELDS_FIELD_NUMBER: _ClassVar[int] + GROUP_BY_FIELD_VALUE_FIELD_NUMBER: _ClassVar[int] + ALL_SEARCH_COUNT_FIELD_NUMBER: _ClassVar[int] + DISTANCES_FIELD_NUMBER: _ClassVar[int] + SEARCH_ITERATOR_V2_RESULTS_FIELD_NUMBER: _ClassVar[int] + RECALLS_FIELD_NUMBER: _ClassVar[int] + PRIMARY_FIELD_NAME_FIELD_NUMBER: _ClassVar[int] + HIGHLIGHT_RESULTS_FIELD_NUMBER: _ClassVar[int] + num_queries: int + top_k: int + fields_data: _containers.RepeatedCompositeFieldContainer[FieldData] + scores: _containers.RepeatedScalarFieldContainer[float] + ids: IDs + topks: _containers.RepeatedScalarFieldContainer[int] + output_fields: _containers.RepeatedScalarFieldContainer[str] + group_by_field_value: FieldData + all_search_count: int + distances: _containers.RepeatedScalarFieldContainer[float] + search_iterator_v2_results: SearchIteratorV2Results + recalls: _containers.RepeatedScalarFieldContainer[float] + primary_field_name: str + highlight_results: _containers.RepeatedCompositeFieldContainer[_common_pb2.HighlightResult] + def __init__(self, num_queries: _Optional[int] = ..., top_k: _Optional[int] = ..., fields_data: _Optional[_Iterable[_Union[FieldData, _Mapping]]] = ..., scores: _Optional[_Iterable[float]] = ..., ids: _Optional[_Union[IDs, _Mapping]] = ..., topks: _Optional[_Iterable[int]] = ..., output_fields: _Optional[_Iterable[str]] = ..., group_by_field_value: _Optional[_Union[FieldData, _Mapping]] = ..., all_search_count: _Optional[int] = ..., distances: _Optional[_Iterable[float]] = ..., search_iterator_v2_results: _Optional[_Union[SearchIteratorV2Results, _Mapping]] = ..., recalls: _Optional[_Iterable[float]] = ..., primary_field_name: _Optional[str] = ..., highlight_results: _Optional[_Iterable[_Union[_common_pb2.HighlightResult, _Mapping]]] = ...) -> None: ... + +class VectorClusteringInfo(_message.Message): + __slots__ = ("field", "centroid") + FIELD_FIELD_NUMBER: _ClassVar[int] + CENTROID_FIELD_NUMBER: _ClassVar[int] + field: str + centroid: VectorField + def __init__(self, field: _Optional[str] = ..., centroid: _Optional[_Union[VectorField, _Mapping]] = ...) -> None: ... + +class ScalarClusteringInfo(_message.Message): + __slots__ = ("field",) + FIELD_FIELD_NUMBER: _ClassVar[int] + field: str + def __init__(self, field: _Optional[str] = ...) -> None: ... + +class ClusteringInfo(_message.Message): + __slots__ = ("vector_clustering_infos", "scalar_clustering_infos") + VECTOR_CLUSTERING_INFOS_FIELD_NUMBER: _ClassVar[int] + SCALAR_CLUSTERING_INFOS_FIELD_NUMBER: _ClassVar[int] + vector_clustering_infos: _containers.RepeatedCompositeFieldContainer[VectorClusteringInfo] + scalar_clustering_infos: _containers.RepeatedCompositeFieldContainer[ScalarClusteringInfo] + def __init__(self, vector_clustering_infos: _Optional[_Iterable[_Union[VectorClusteringInfo, _Mapping]]] = ..., scalar_clustering_infos: _Optional[_Iterable[_Union[ScalarClusteringInfo, _Mapping]]] = ...) -> None: ... + +class TemplateValue(_message.Message): + __slots__ = ("bool_val", "int64_val", "float_val", "string_val", "array_val") + BOOL_VAL_FIELD_NUMBER: _ClassVar[int] + INT64_VAL_FIELD_NUMBER: _ClassVar[int] + FLOAT_VAL_FIELD_NUMBER: _ClassVar[int] + STRING_VAL_FIELD_NUMBER: _ClassVar[int] + ARRAY_VAL_FIELD_NUMBER: _ClassVar[int] + bool_val: bool + int64_val: int + float_val: float + string_val: str + array_val: TemplateArrayValue + def __init__(self, bool_val: bool = ..., int64_val: _Optional[int] = ..., float_val: _Optional[float] = ..., string_val: _Optional[str] = ..., array_val: _Optional[_Union[TemplateArrayValue, _Mapping]] = ...) -> None: ... + +class TemplateArrayValue(_message.Message): + __slots__ = ("bool_data", "long_data", "double_data", "string_data", "array_data", "json_data") + BOOL_DATA_FIELD_NUMBER: _ClassVar[int] + LONG_DATA_FIELD_NUMBER: _ClassVar[int] + DOUBLE_DATA_FIELD_NUMBER: _ClassVar[int] + STRING_DATA_FIELD_NUMBER: _ClassVar[int] + ARRAY_DATA_FIELD_NUMBER: _ClassVar[int] + JSON_DATA_FIELD_NUMBER: _ClassVar[int] + bool_data: BoolArray + long_data: LongArray + double_data: DoubleArray + string_data: StringArray + array_data: TemplateArrayValueArray + json_data: JSONArray + def __init__(self, bool_data: _Optional[_Union[BoolArray, _Mapping]] = ..., long_data: _Optional[_Union[LongArray, _Mapping]] = ..., double_data: _Optional[_Union[DoubleArray, _Mapping]] = ..., string_data: _Optional[_Union[StringArray, _Mapping]] = ..., array_data: _Optional[_Union[TemplateArrayValueArray, _Mapping]] = ..., json_data: _Optional[_Union[JSONArray, _Mapping]] = ...) -> None: ... + +class TemplateArrayValueArray(_message.Message): + __slots__ = ("data",) + DATA_FIELD_NUMBER: _ClassVar[int] + data: _containers.RepeatedCompositeFieldContainer[TemplateArrayValue] + def __init__(self, data: _Optional[_Iterable[_Union[TemplateArrayValue, _Mapping]]] = ...) -> None: ... diff --git a/pymilvus/milvus_client/__init__.py b/pymilvus/milvus_client/__init__.py new file mode 100644 index 000000000..e8d26df40 --- /dev/null +++ b/pymilvus/milvus_client/__init__.py @@ -0,0 +1,5 @@ +from .async_milvus_client import AsyncMilvusClient +from .index import IndexParams +from .milvus_client import MilvusClient + +__all__ = ["AsyncMilvusClient", "IndexParams", "MilvusClient"] diff --git a/pymilvus/milvus_client/_utils.py b/pymilvus/milvus_client/_utils.py new file mode 100644 index 000000000..79618e7fa --- /dev/null +++ b/pymilvus/milvus_client/_utils.py @@ -0,0 +1,53 @@ +import asyncio +import hashlib +import logging + +from pymilvus.orm.connections import connections + +logger = logging.getLogger(__name__) + + +def create_connection( + uri: str, + token: str = "", + db_name: str = "", + use_async: bool = False, + *, + user: str = "", + password: str = "", + **kwargs, +) -> str: + """Get or create the connection to the Milvus server. + + Returns: + str: The alias of the connection + """ + using = kwargs.pop("alias", None) + if not using: + use_async_fmt = "async" if use_async else "" + + auth_fmt = "" + if user: + auth_fmt = f"{user}" + elif token: + md5 = hashlib.new("md5", usedforsecurity=False) + md5.update(token.encode()) + auth_fmt = f"{md5.hexdigest()}" + + # For async connections, include event loop ID in alias to prevent + # reusing connections from closed event loops + loop_id_fmt = "" + if use_async: + loop = asyncio.get_running_loop() + loop_id_fmt = f"loop{id(loop)}" + + # different uri, auth, db_name, and event loop (for async) cannot share the same connection + not_empty = [v for v in [use_async_fmt, uri, db_name, auth_fmt, loop_id_fmt] if v] + using = "-".join(not_empty) + + if connections.has_connection(using): + return using + + connections.connect(using, user, password, db_name, token, uri=uri, _async=use_async, **kwargs) + logger.debug("Created new connection using: %s", using) + return using diff --git a/pymilvus/milvus_client/async_milvus_client.py b/pymilvus/milvus_client/async_milvus_client.py new file mode 100644 index 000000000..21649423e --- /dev/null +++ b/pymilvus/milvus_client/async_milvus_client.py @@ -0,0 +1,1125 @@ +from typing import Dict, List, Optional, Union + +from pymilvus.client.abstract import AnnSearchRequest, BaseRanker +from pymilvus.client.constants import DEFAULT_CONSISTENCY_LEVEL +from pymilvus.client.types import ( + ExceptionsMessage, + OmitZeroDict, + ResourceGroupConfig, + RoleInfo, + UserInfo, +) +from pymilvus.exceptions import ( + DataTypeNotMatchException, + ParamError, + PrimaryKeyException, +) +from pymilvus.orm import utility +from pymilvus.orm.collection import CollectionSchema +from pymilvus.orm.connections import connections +from pymilvus.orm.schema import FieldSchema +from pymilvus.orm.types import DataType + +from ._utils import create_connection +from .check import validate_param +from .index import IndexParam, IndexParams + + +class AsyncMilvusClient: + """AsyncMilvusClient is an EXPERIMENTAL class + which only provides part of MilvusClient's methods""" + + def __init__( + self, + uri: str = "http://localhost:19530", + user: str = "", + password: str = "", + db_name: str = "", + token: str = "", + timeout: Optional[float] = None, + **kwargs, + ) -> None: + self._using = create_connection( + uri, + token, + db_name, + use_async=True, + user=user, + password=password, + timeout=timeout, + **kwargs, + ) + self.is_self_hosted = bool(utility.get_server_type(using=self._using) == "milvus") + + async def create_collection( + self, + collection_name: str, + dimension: Optional[int] = None, + primary_field_name: str = "id", # default is "id" + id_type: str = "int", # or "string", + vector_field_name: str = "vector", # default is "vector" + metric_type: str = "COSINE", + auto_id: bool = False, + timeout: Optional[float] = None, + schema: Optional[CollectionSchema] = None, + index_params: Optional[IndexParams] = None, + **kwargs, + ): + if schema is None: + return await self._fast_create_collection( + collection_name, + dimension, + primary_field_name=primary_field_name, + id_type=id_type, + vector_field_name=vector_field_name, + metric_type=metric_type, + auto_id=auto_id, + timeout=timeout, + **kwargs, + ) + + return await self._create_collection_with_schema( + collection_name, schema, index_params, timeout=timeout, **kwargs + ) + + async def _fast_create_collection( + self, + collection_name: str, + dimension: int, + primary_field_name: str = "id", # default is "id" + id_type: Union[DataType, str] = DataType.INT64, # or "string", + vector_field_name: str = "vector", # default is "vector" + metric_type: str = "COSINE", + auto_id: bool = False, + timeout: Optional[float] = None, + **kwargs, + ): + if dimension is None: + msg = "missing requried argument: 'dimension'" + raise TypeError(msg) + if "enable_dynamic_field" not in kwargs: + kwargs["enable_dynamic_field"] = True + + schema = self.create_schema(auto_id=auto_id, **kwargs) + + if id_type in ("int", DataType.INT64): + pk_data_type = DataType.INT64 + elif id_type in ("string", "str", DataType.VARCHAR): + pk_data_type = DataType.VARCHAR + else: + raise PrimaryKeyException(message=ExceptionsMessage.PrimaryFieldType) + + pk_args = {} + if "max_length" in kwargs and pk_data_type == DataType.VARCHAR: + pk_args["max_length"] = kwargs["max_length"] + + schema.add_field(primary_field_name, pk_data_type, is_primary=True, **pk_args) + vector_type = DataType.FLOAT_VECTOR + schema.add_field(vector_field_name, vector_type, dim=dimension) + schema.verify() + + conn = self._get_connection() + if "consistency_level" not in kwargs: + kwargs["consistency_level"] = DEFAULT_CONSISTENCY_LEVEL + await conn.create_collection(collection_name, schema, timeout=timeout, **kwargs) + + index_params = IndexParams() + index_params.add_index(vector_field_name, index_type="AUTOINDEX", metric_type=metric_type) + await self.create_index(collection_name, index_params, timeout=timeout) + await self.load_collection(collection_name, timeout=timeout) + + async def _create_collection_with_schema( + self, + collection_name: str, + schema: CollectionSchema, + index_params: IndexParams, + timeout: Optional[float] = None, + **kwargs, + ): + schema.verify() + + conn = self._get_connection() + if "consistency_level" not in kwargs: + kwargs["consistency_level"] = DEFAULT_CONSISTENCY_LEVEL + await conn.create_collection(collection_name, schema, timeout=timeout, **kwargs) + + if index_params: + await self.create_index(collection_name, index_params, timeout=timeout) + await self.load_collection(collection_name, timeout=timeout) + + async def drop_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.drop_collection(collection_name, timeout=timeout, **kwargs) + + async def rename_collection( + self, + old_name: str, + new_name: str, + target_db: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.rename_collection(old_name, new_name, target_db, timeout=timeout, **kwargs) + + async def load_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.load_collection(collection_name, timeout=timeout, **kwargs) + + async def release_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.release_collection(collection_name, timeout=timeout, **kwargs) + + async def create_index( + self, + collection_name: str, + index_params: IndexParams, + timeout: Optional[float] = None, + **kwargs, + ): + validate_param("collection_name", collection_name, str) + validate_param("index_params", index_params, IndexParams) + if len(index_params) == 0: + raise ParamError(message="IndexParams is empty, no index can be created") + + for index_param in index_params: + await self._create_index(collection_name, index_param, timeout=timeout, **kwargs) + + async def _create_index( + self, + collection_name: str, + index_param: IndexParam, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.create_index( + collection_name, + index_param.field_name, + index_param.get_index_configs(), + timeout=timeout, + index_name=index_param.index_name, + **kwargs, + ) + + async def drop_index( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.drop_index(collection_name, "", index_name, timeout=timeout, **kwargs) + + async def create_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.create_partition(collection_name, partition_name, timeout=timeout, **kwargs) + + async def drop_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.drop_partition(collection_name, partition_name, timeout=timeout, **kwargs) + + async def load_partitions( + self, + collection_name: str, + partition_names: Union[str, List[str]], + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(partition_names, str): + partition_names = [partition_names] + + conn = self._get_connection() + await conn.load_partitions(collection_name, partition_names, timeout=timeout, **kwargs) + + async def release_partitions( + self, + collection_name: str, + partition_names: Union[str, List[str]], + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(partition_names, str): + partition_names = [partition_names] + conn = self._get_connection() + await conn.release_partitions(collection_name, partition_names, timeout=timeout, **kwargs) + + async def has_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ) -> bool: + conn = self._get_connection() + return await conn.has_partition(collection_name, partition_name, timeout=timeout, **kwargs) + + async def list_partitions( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[str]: + conn = self._get_connection() + return await conn.list_partitions(collection_name, timeout=timeout, **kwargs) + + async def insert( + self, + collection_name: str, + data: Union[Dict, List[Dict]], + timeout: Optional[float] = None, + partition_name: Optional[str] = "", + **kwargs, + ) -> Dict: + # If no data provided, we cannot input anything + if isinstance(data, Dict): + data = [data] + + msg = "wrong type of argument 'data'," + msg += f"expected 'Dict' or list of 'Dict', got '{type(data).__name__}'" + + if not isinstance(data, List): + raise TypeError(msg) + + if len(data) == 0: + return {"insert_count": 0, "ids": []} + + conn = self._get_connection() + # Insert into the collection. + res = await conn.insert_rows( + collection_name, data, partition_name=partition_name, timeout=timeout, **kwargs + ) + return OmitZeroDict( + { + "insert_count": res.insert_count, + "ids": res.primary_keys, + "cost": res.cost, + } + ) + + async def upsert( + self, + collection_name: str, + data: Union[Dict, List[Dict]], + timeout: Optional[float] = None, + partition_name: Optional[str] = "", + **kwargs, + ) -> Dict: + """Upsert data into the collection asynchronously. + + Args: + collection_name (str): Name of the collection to upsert into. + data (List[Dict[str, any]]): A list of dicts to pass in. If list not provided, will + cast to list. + timeout (float, optional): The timeout to use, will override init timeout. Defaults + to None. + partition_name (str, optional): Name of the partition to upsert into. + **kwargs (dict): Extra keyword arguments. + + * *partial_update* (bool, optional): Whether this is a partial update operation. + If True, only the specified fields will be updated while others remain unchanged + Default is False. + + Raises: + DataNotMatchException: If the data has missing fields an exception will be thrown. + MilvusException: General Milvus error on upsert. + + Returns: + Dict: Number of rows that were upserted. + """ + # If no data provided, we cannot input anything + if isinstance(data, Dict): + data = [data] + + msg = "wrong type of argument 'data'," + msg += f"expected 'Dict' or list of 'Dict', got '{type(data).__name__}'" + + if not isinstance(data, List): + raise TypeError(msg) + + if len(data) == 0: + return {"upsert_count": 0, "ids": []} + + conn = self._get_connection() + # Upsert into the collection. + try: + res = await conn.upsert_rows( + collection_name, data, partition_name=partition_name, timeout=timeout, **kwargs + ) + except Exception as ex: + raise ex from ex + + return OmitZeroDict( + { + "upsert_count": res.upsert_count, + "cost": res.cost, + "ids": res.primary_keys, + } + ) + + async def hybrid_search( + self, + collection_name: str, + reqs: List[AnnSearchRequest], + ranker: BaseRanker, + limit: int = 10, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + **kwargs, + ) -> List[List[dict]]: + conn = self._get_connection() + return await conn.hybrid_search( + collection_name, + reqs, + ranker, + limit=limit, + partition_names=partition_names, + output_fields=output_fields, + timeout=timeout, + **kwargs, + ) + + async def search( + self, + collection_name: str, + data: Union[List[list], list], + filter: str = "", + limit: int = 10, + output_fields: Optional[List[str]] = None, + search_params: Optional[dict] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + anns_field: Optional[str] = None, + **kwargs, + ) -> List[List[dict]]: + conn = self._get_connection() + return await conn.search( + collection_name, + data, + anns_field or "", + search_params or {}, + expression=filter, + limit=limit, + output_fields=output_fields, + partition_names=partition_names, + expr_params=kwargs.pop("filter_params", {}), + timeout=timeout, + **kwargs, + ) + + async def query( + self, + collection_name: str, + filter: str = "", + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + ids: Optional[Union[List, str, int]] = None, + partition_names: Optional[List[str]] = None, + **kwargs, + ) -> List[dict]: + if filter and not isinstance(filter, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(filter)) + + if filter and ids is not None: + raise ParamError(message=ExceptionsMessage.AmbiguousQueryFilterParam) + + if isinstance(ids, (int, str)): + ids = [ids] + + conn = self._get_connection() + + if ids: + try: + schema_dict, _ = await conn._get_schema_from_cache_or_remote( + collection_name, timeout=timeout + ) + except Exception as ex: + raise ex from ex + filter = self._pack_pks_expr(schema_dict, ids) + + if not output_fields: + output_fields = ["*"] + + return await conn.query( + collection_name, + expr=filter, + output_fields=output_fields, + partition_names=partition_names, + timeout=timeout, + expr_params=kwargs.pop("filter_params", {}), + **kwargs, + ) + + async def get( + self, + collection_name: str, + ids: Union[list, str, int], + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + **kwargs, + ) -> List[dict]: + if not isinstance(ids, list): + ids = [ids] + + if len(ids) == 0: + return [] + + conn = self._get_connection() + try: + schema_dict, _ = await conn._get_schema_from_cache_or_remote( + collection_name, timeout=timeout + ) + except Exception as ex: + raise ex from ex + + if not output_fields: + output_fields = ["*"] + + expr = self._pack_pks_expr(schema_dict, ids) + return await conn.query( + collection_name, + expr=expr, + output_fields=output_fields, + partition_names=partition_names, + timeout=timeout, + **kwargs, + ) + + async def delete( + self, + collection_name: str, + ids: Optional[Union[list, str, int]] = None, + timeout: Optional[float] = None, + filter: Optional[str] = None, + partition_name: Optional[str] = None, + **kwargs, + ) -> Dict[str, int]: + pks = kwargs.get("pks", []) + if isinstance(pks, (int, str)): + pks = [pks] + + for pk in pks: + if not isinstance(pk, (int, str)): + msg = f"wrong type of argument pks, expect list, int or str, got '{type(pk).__name__}'" + raise TypeError(msg) + + if ids is not None: + if isinstance(ids, (int, str)): + pks.append(ids) + elif isinstance(ids, list): + for id in ids: + if not isinstance(id, (int, str)): + msg = f"wrong type of argument ids, expect list, int or str, got '{type(id).__name__}'" + raise TypeError(msg) + pks.extend(ids) + else: + msg = f"wrong type of argument ids, expect list, int or str, got '{type(ids).__name__}'" + raise TypeError(msg) + + # validate ambiguous delete filter param before describe collection rpc + if filter and len(pks) > 0: + raise ParamError(message=ExceptionsMessage.AmbiguousDeleteFilterParam) + + expr = "" + conn = self._get_connection() + if len(pks) > 0: + try: + schema_dict, _ = await conn._get_schema_from_cache_or_remote( + collection_name, timeout=timeout + ) + except Exception as ex: + raise ex from ex + expr = self._pack_pks_expr(schema_dict, pks) + else: + if not isinstance(filter, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(filter)) + expr = filter + + ret_pks = [] + res = await conn.delete( + collection_name=collection_name, + expression=expr, + partition_name=partition_name, + expr_params=kwargs.pop("filter_params", {}), + timeout=timeout, + **kwargs, + ) + if res.primary_keys: + ret_pks.extend(res.primary_keys) + + # compatible with deletions that returns primary keys + if ret_pks: + return ret_pks + + return OmitZeroDict({"delete_count": res.delete_count, "cost": res.cost}) + + async def describe_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> dict: + conn = self._get_connection() + return await conn.describe_collection(collection_name, timeout=timeout, **kwargs) + + async def has_collection( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> bool: + conn = self._get_connection() + return await conn.has_collection(collection_name, timeout=timeout, **kwargs) + + async def list_collections(self, timeout: Optional[float] = None, **kwargs) -> List[str]: + conn = self._get_connection() + return await conn.list_collections(timeout=timeout, **kwargs) + + async def get_collection_stats( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> Dict: + conn = self._get_connection() + stats = await conn.get_collection_stats(collection_name, timeout=timeout, **kwargs) + result = {stat.key: stat.value for stat in stats} + if "row_count" in result: + result["row_count"] = int(result["row_count"]) + return result + + async def get_partition_stats( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ) -> Dict: + conn = self._get_connection() + stats = await conn.get_partition_stats( + collection_name, partition_name, timeout=timeout, **kwargs + ) + result = {stat.key: stat.value for stat in stats} + if "row_count" in result: + result["row_count"] = int(result["row_count"]) + return result + + async def get_load_state( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + return await conn.get_load_state( + collection_name, partition_names, timeout=timeout, **kwargs + ) + + async def refresh_load( + self, + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + return await conn.refresh_load(collection_name, partition_names, timeout=timeout, **kwargs) + + async def get_server_version(self, timeout: Optional[float] = None, **kwargs) -> str: + conn = self._get_connection() + return await conn.get_server_version(timeout=timeout, **kwargs) + + async def describe_replica( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + return await conn.describe_replica(collection_name, timeout=timeout, **kwargs) + + async def alter_collection_properties( + self, collection_name: str, properties: dict, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.alter_collection_properties( + collection_name, + properties=properties, + timeout=timeout, + **kwargs, + ) + + async def drop_collection_properties( + self, + collection_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.drop_collection_properties( + collection_name, property_keys=property_keys, timeout=timeout, **kwargs + ) + + async def alter_collection_field( + self, + collection_name: str, + field_name: str, + field_params: dict, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.alter_collection_field( + collection_name, + field_name=field_name, + field_params=field_params, + timeout=timeout, + **kwargs, + ) + + async def add_collection_field( + self, + collection_name: str, + field_name: str, + data_type: DataType, + desc: str = "", + timeout: Optional[float] = None, + **kwargs, + ): + field_schema = self.create_field_schema(field_name, data_type, desc, **kwargs) + conn = self._get_connection() + await conn.add_collection_field( + collection_name, + field_schema, + timeout=timeout, + **kwargs, + ) + + @classmethod + def create_schema(cls, **kwargs): + kwargs["check_fields"] = False # do not check fields for now + return CollectionSchema([], **kwargs) + + @classmethod + def create_field_schema( + cls, name: str, data_type: DataType, desc: str = "", **kwargs + ) -> FieldSchema: + return FieldSchema(name, data_type, desc, **kwargs) + + @classmethod + def prepare_index_params(cls, field_name: str = "", **kwargs) -> IndexParams: + index_params = IndexParams() + if field_name: + validate_param("field_name", field_name, str) + index_params.add_index(field_name, **kwargs) + return index_params + + async def close(self): + await connections.async_remove_connection(self._using) + + def _get_connection(self): + return connections._fetch_handler(self._using) + + def _extract_primary_field(self, schema_dict: Dict) -> dict: + fields = schema_dict.get("fields", []) + if not fields: + return {} + + for field_dict in fields: + if field_dict.get("is_primary", None) is not None: + return field_dict + + return {} + + def _pack_pks_expr(self, schema_dict: Dict, pks: List) -> str: + primary_field = self._extract_primary_field(schema_dict) + pk_field_name = primary_field["name"] + data_type = primary_field["type"] + + # Varchar pks need double quotes around the values + if data_type == DataType.VARCHAR: + ids = ["'" + str(entry) + "'" for entry in pks] + expr = f"""{pk_field_name} in [{','.join(ids)}]""" + else: + ids = [str(entry) for entry in pks] + expr = f"{pk_field_name} in [{','.join(ids)}]" + return expr + + async def list_indexes(self, collection_name: str, field_name: Optional[str] = "", **kwargs): + conn = self._get_connection() + indexes = await conn.list_indexes(collection_name, **kwargs) + index_name_list = [] + for index in indexes: + if not index: + continue + if not field_name or index.field_name == field_name: + index_name_list.append(index.index_name) + return index_name_list + + async def describe_index( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ) -> Dict: + conn = self._get_connection() + return await conn.describe_index(collection_name, index_name, timeout=timeout, **kwargs) + + async def alter_index_properties( + self, + collection_name: str, + index_name: str, + properties: dict, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.alter_index_properties( + collection_name, index_name, properties=properties, timeout=timeout, **kwargs + ) + + async def drop_index_properties( + self, + collection_name: str, + index_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.drop_index_properties( + collection_name, index_name, property_keys=property_keys, timeout=timeout, **kwargs + ) + + async def create_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.create_alias(collection_name, alias, timeout=timeout, **kwargs) + + async def drop_alias(self, alias: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + await conn.drop_alias(alias, timeout=timeout, **kwargs) + + async def alter_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.alter_alias(collection_name, alias, timeout=timeout, **kwargs) + + async def describe_alias(self, alias: str, timeout: Optional[float] = None, **kwargs) -> Dict: + conn = self._get_connection() + return await conn.describe_alias(alias, timeout=timeout, **kwargs) + + async def list_aliases( + self, collection_name: str = "", timeout: Optional[float] = None, **kwargs + ) -> List[str]: + conn = self._get_connection() + return await conn.list_aliases(collection_name, timeout=timeout, **kwargs) + + def using_database(self, db_name: str, **kwargs): + conn = self._get_connection() + conn.reset_db_name(db_name) + + def use_database(self, db_name: str, **kwargs): + conn = self._get_connection() + conn.reset_db_name(db_name) + + async def create_database( + self, + db_name: str, + properties: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.create_database( + db_name=db_name, properties=properties, timeout=timeout, **kwargs + ) + + async def drop_database(self, db_name: str, **kwargs): + conn = self._get_connection() + await conn.drop_database(db_name, **kwargs) + + async def list_databases(self, timeout: Optional[float] = None, **kwargs) -> List[str]: + conn = self._get_connection() + return await conn.list_database(timeout=timeout, **kwargs) + + async def describe_database(self, db_name: str, **kwargs) -> dict: + conn = self._get_connection() + return await conn.describe_database(db_name, **kwargs) + + async def alter_database_properties(self, db_name: str, properties: dict, **kwargs): + conn = self._get_connection() + await conn.alter_database(db_name, properties, **kwargs) + + async def drop_database_properties(self, db_name: str, property_keys: List[str], **kwargs): + conn = self._get_connection() + await conn.drop_database_properties(db_name, property_keys, **kwargs) + + async def create_user( + self, user_name: str, password: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.create_user(user_name, password, timeout=timeout, **kwargs) + + async def drop_user(self, user_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + await conn.drop_user(user_name, timeout=timeout, **kwargs) + + async def update_password( + self, + user_name: str, + old_password: str, + new_password: str, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.update_password(user_name, old_password, new_password, timeout=timeout, **kwargs) + + async def list_users(self, timeout: Optional[float] = None, **kwargs) -> List[str]: + conn = self._get_connection() + return await conn.list_users(timeout=timeout, **kwargs) + + async def describe_user( + self, user_name: str, timeout: Optional[float] = None, **kwargs + ) -> dict: + conn = self._get_connection() + res = await conn.describe_user(user_name, True, timeout=timeout, **kwargs) + if hasattr(res, "results") and res.results: + user_info = UserInfo(res.results) + if user_info.groups: + item = user_info.groups[0] + return {"user_name": user_name, "roles": item.roles} + return {} + + async def create_privilege_group( + self, + group_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.create_privilege_group(group_name, timeout=timeout, **kwargs) + + async def drop_privilege_group( + self, + group_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.drop_privilege_group(group_name, timeout=timeout, **kwargs) + + async def list_privilege_groups( + self, + timeout: Optional[float] = None, + **kwargs, + ) -> List[Dict[str, Union[str, List[str]]]]: + conn = self._get_connection() + res = await conn.list_privilege_groups(timeout=timeout, **kwargs) + ret = [] + for g in res: + privileges = [] + for p in g.privileges: + privileges.append(p.name) + ret.append({"privilege_group": g.group_name, "privileges": privileges}) + return ret + + async def add_privileges_to_group( + self, + group_name: str, + privileges: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.add_privileges_to_group(group_name, privileges, timeout=timeout, **kwargs) + + async def remove_privileges_from_group( + self, + group_name: str, + privileges: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.remove_privileges_from_group(group_name, privileges, timeout=timeout, **kwargs) + + async def create_role(self, role_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + await conn.create_role(role_name, timeout=timeout, **kwargs) + + async def drop_role( + self, role_name: str, force_drop: bool = False, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.drop_role(role_name, force_drop=force_drop, timeout=timeout, **kwargs) + + async def grant_role( + self, user_name: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.grant_role(user_name, role_name, timeout=timeout, **kwargs) + + async def revoke_role( + self, user_name: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.revoke_role(user_name, role_name, timeout=timeout, **kwargs) + + async def grant_privilege( + self, + role_name: str, + object_type: str, + privilege: str, + object_name: str, + db_name: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.grant_privilege( + role_name, object_type, object_name, privilege, db_name, timeout=timeout, **kwargs + ) + + async def revoke_privilege( + self, + role_name: str, + object_type: str, + privilege: str, + object_name: str, + db_name: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.revoke_privilege( + role_name, object_type, object_name, privilege, db_name, timeout=timeout, **kwargs + ) + + async def grant_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.grant_privilege_v2( + role_name, + privilege, + collection_name, + db_name=db_name, + timeout=timeout, + **kwargs, + ) + + async def revoke_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.revoke_privilege_v2( + role_name, + privilege, + collection_name, + db_name=db_name, + timeout=timeout, + **kwargs, + ) + + async def describe_role( + self, role_name: str, timeout: Optional[float] = None, **kwargs + ) -> Dict: + conn = self._get_connection() + db_name = kwargs.pop("db_name", "") + res = await conn.select_grant_for_one_role(role_name, db_name, timeout=timeout, **kwargs) + ret = {} + ret["role"] = role_name + ret["privileges"] = [dict(i) for i in res.groups] + return ret + + async def list_roles(self, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + res = await conn.list_roles(False, timeout=timeout, **kwargs) + + role_info = RoleInfo(res) + return [g.role_name for g in role_info.groups] + + async def create_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + await conn.create_resource_group(name, timeout=timeout, **kwargs) + + async def drop_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + await conn.drop_resource_group(name, timeout=timeout, **kwargs) + + async def update_resource_groups( + self, configs: Dict[str, ResourceGroupConfig], timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + await conn.update_resource_groups(configs, timeout=timeout, **kwargs) + + async def describe_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + return await conn.describe_resource_group(name, timeout=timeout, **kwargs) + + async def list_resource_groups(self, timeout: Optional[float] = None, **kwargs) -> List[str]: + conn = self._get_connection() + return await conn.list_resource_groups(timeout=timeout, **kwargs) + + async def transfer_replica( + self, + source: str, + target: str, + collection_name: str, + num_replica: int, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + await conn.transfer_replica( + source, target, collection_name, num_replica, timeout=timeout, **kwargs + ) + + async def flush(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + await conn.flush([collection_name], timeout=timeout, **kwargs) + + async def compact( + self, + collection_name: str, + is_clustering: Optional[bool] = False, + timeout: Optional[float] = None, + **kwargs, + ) -> int: + conn = self._get_connection() + return await conn.compact( + collection_name, is_clustering=is_clustering, timeout=timeout, **kwargs + ) + + async def get_compaction_state( + self, job_id: int, timeout: Optional[float] = None, **kwargs + ) -> str: + conn = self._get_connection() + result = await conn.get_compaction_state(job_id, timeout=timeout, **kwargs) + return result.state_name + + async def run_analyzer( + self, + texts: Union[str, List[str]], + analyzer_params: Optional[Union[str, Dict]] = None, + with_hash: bool = False, + with_detail: bool = False, + collection_name: Optional[str] = None, + field_name: Optional[str] = None, + analyzer_names: Optional[Union[str, List[str]]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + return await conn.run_analyzer( + texts, + analyzer_params=analyzer_params, + with_hash=with_hash, + with_detail=with_detail, + collection_name=collection_name, + field_name=field_name, + analyzer_names=analyzer_names, + timeout=timeout, + **kwargs, + ) diff --git a/pymilvus/milvus_client/check.py b/pymilvus/milvus_client/check.py new file mode 100644 index 000000000..c697cb0a5 --- /dev/null +++ b/pymilvus/milvus_client/check.py @@ -0,0 +1,34 @@ +from typing import Any, Dict, Tuple, Union + +from pymilvus.exceptions import ParamError + + +def validate_params(params: Dict[str, Any], expected_type: Union[type, Tuple[type, ...]]): + validate_param("params", params, Dict) + for param_name, param in params.items(): + validate_param(param_name, param, expected_type) + + +def validate_param( + param_name: str, param: Any, expected_type: Union[type, Tuple[type, ...]] +) -> None: + if param is None: + msg = f"missing required argument: [{param_name}]" + raise ParamError(message=msg) + + if not isinstance(param, expected_type): + msg = ( + f"wrong type of argument [{param_name}], " + f"expected type: [{expected_type.__name__}], " + f"got type: [{type(param).__name__}]" + ) + raise ParamError(message=msg) + + +def validate_noneable_param( + param_name: str, param: Any, expected_type: Union[type, Tuple[type, ...]] +): + if param is None: + return + + validate_param(param_name, param, expected_type) diff --git a/pymilvus/milvus_client/index.py b/pymilvus/milvus_client/index.py new file mode 100644 index 000000000..2d421f261 --- /dev/null +++ b/pymilvus/milvus_client/index.py @@ -0,0 +1,90 @@ +from typing import Dict + + +class IndexParam: + def __init__(self, field_name: str, index_type: str, index_name: str, **kwargs): + """ + Examples: + + >>> IndexParam( + >>> field_name="embeddings", + >>> index_type="HNSW", + >>> index_name="hnsw_index", + >>> metric_type="COSINE", + >>> M=64, + >>> efConstruction=100, + >>> ) + """ + self._field_name = field_name + self._index_type = index_type + self._index_name = index_name + + # index configs are unique to each index, + # if params={} is passed in, it will be flattened and merged + # with other configs. + self._configs = {} + self._configs.update(kwargs.pop("params", {})) + self._configs.update(kwargs) + + @property + def field_name(self): + return self._field_name + + @property + def index_name(self): + return self._index_name + + @property + def index_type(self): + return self._index_type + + def get_index_configs(self) -> Dict: + """return index_type and index configs in a dict + + Examples: + + { + "index_type": "HNSW", + "metrics_type": "COSINE", + "M": 64, + "efConstruction": 100, + } + """ + configs = self._configs + # Omit index_type if it's empty + if self.index_type: + configs["index_type"] = self.index_type + return configs + + def to_dict(self) -> Dict: + """All params""" + return { + "field_name": self.field_name, + "index_type": self.index_type, + "index_name": self.index_name, + **self._configs, + } + + def __str__(self): + return str(self.to_dict()) + + __repr__ = __str__ + + def __eq__(self, other: None): + if isinstance(other, self.__class__): + return dict(self) == dict(other) + + if isinstance(other, dict): + return dict(self) == other + return False + + +class IndexParams(list): + """List of indexs of a collection""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def add_index(self, field_name: str, index_type: str = "", index_name: str = "", **kwargs): + index_param = IndexParam(field_name, index_type, index_name, **kwargs) + super().append(index_param) diff --git a/pymilvus/milvus_client/milvus_client.py b/pymilvus/milvus_client/milvus_client.py new file mode 100644 index 000000000..bfe664dbc --- /dev/null +++ b/pymilvus/milvus_client/milvus_client.py @@ -0,0 +1,1926 @@ +import logging +from typing import Dict, List, Optional, Union + +from pymilvus.client.abstract import AnnSearchRequest, BaseRanker +from pymilvus.client.constants import DEFAULT_CONSISTENCY_LEVEL +from pymilvus.client.embedding_list import EmbeddingList +from pymilvus.client.search_iterator import SearchIteratorV2 +from pymilvus.client.types import ( + CompactionPlans, + ExceptionsMessage, + LoadedSegmentInfo, + LoadState, + OmitZeroDict, + ReplicaInfo, + ResourceGroupConfig, + SegmentInfo, +) +from pymilvus.client.utils import convert_struct_fields_to_user_format, get_params, is_vector_type +from pymilvus.exceptions import ( + DataTypeNotMatchException, + ErrorCode, + MilvusException, + ParamError, + PrimaryKeyException, + ServerVersionIncompatibleException, +) +from pymilvus.orm.collection import CollectionSchema, FieldSchema, Function, FunctionScore +from pymilvus.orm.connections import connections +from pymilvus.orm.constants import FIELDS, METRIC_TYPE, TYPE, UNLIMITED +from pymilvus.orm.iterator import QueryIterator, SearchIterator +from pymilvus.orm.schema import StructFieldSchema +from pymilvus.orm.types import DataType + +from ._utils import create_connection +from .check import validate_param +from .index import IndexParam, IndexParams + +logger = logging.getLogger(__name__) + + +class MilvusClient: + """The Milvus Client""" + + # pylint: disable=logging-too-many-args, too-many-instance-attributes + + def __init__( + self, + uri: str = "http://localhost:19530", + user: str = "", + password: str = "", + db_name: str = "", + token: str = "", + timeout: Optional[float] = None, + **kwargs, + ) -> None: + """A client for the common Milvus use case. + + This client attempts to hide away the complexity of using Pymilvus. In a lot ofcases what + the user wants is a simple wrapper that supports adding data, deleting data, and searching. + + Args: + uri (str, optional): The connection address to use to connect to the + instance. Defaults to "http://localhost:19530". Another example: + "https://username:password@in01-12a.aws-us-west-2.vectordb.zillizcloud.com:19538 + timeout (float, optional): What timeout to use for function calls. Defaults + to None. + Unit: second + """ + self._using = create_connection( + uri, token, db_name, user=user, password=password, timeout=timeout, **kwargs + ) + self.is_self_hosted = bool(self.get_server_type() == "milvus") + + def create_collection( + self, + collection_name: str, + dimension: Optional[int] = None, + primary_field_name: str = "id", # default is "id" + id_type: str = "int", # or "string", + vector_field_name: str = "vector", # default is "vector" + metric_type: str = "COSINE", + auto_id: bool = False, + timeout: Optional[float] = None, + schema: Optional[CollectionSchema] = None, + index_params: Optional[IndexParams] = None, + **kwargs, + ): + if schema is None: + return self._fast_create_collection( + collection_name, + dimension, + primary_field_name=primary_field_name, + id_type=id_type, + vector_field_name=vector_field_name, + metric_type=metric_type, + auto_id=auto_id, + timeout=timeout, + **kwargs, + ) + + return self._create_collection_with_schema( + collection_name, schema, index_params, timeout=timeout, **kwargs + ) + + def _fast_create_collection( + self, + collection_name: str, + dimension: int, + primary_field_name: str = "id", # default is "id" + id_type: Union[DataType, str] = DataType.INT64, # or "string", + vector_field_name: str = "vector", # default is "vector" + metric_type: str = "COSINE", + auto_id: bool = False, + timeout: Optional[float] = None, + **kwargs, + ): + validate_param("dimension", dimension, int) + + if "enable_dynamic_field" not in kwargs: + kwargs["enable_dynamic_field"] = True + + schema = self.create_schema(auto_id=auto_id, **kwargs) + + if id_type in ("int", DataType.INT64): + pk_data_type = DataType.INT64 + elif id_type in ("string", "str", DataType.VARCHAR): + pk_data_type = DataType.VARCHAR + else: + raise PrimaryKeyException(message=ExceptionsMessage.PrimaryFieldType) + + pk_args = {} + if "max_length" in kwargs and pk_data_type == DataType.VARCHAR: + pk_args["max_length"] = kwargs["max_length"] + + schema.add_field(primary_field_name, pk_data_type, is_primary=True, **pk_args) + schema.add_field(vector_field_name, DataType.FLOAT_VECTOR, dim=dimension) + schema.verify() + + conn = self._get_connection() + if "consistency_level" not in kwargs: + kwargs["consistency_level"] = DEFAULT_CONSISTENCY_LEVEL + conn.create_collection(collection_name, schema, timeout=timeout, **kwargs) + + index_params = IndexParams() + index_params.add_index(vector_field_name, index_type="AUTOINDEX", metric_type=metric_type) + self.create_index(collection_name, index_params, timeout=timeout) + self.load_collection(collection_name, timeout=timeout) + + def create_index( + self, + collection_name: str, + index_params: IndexParams, + timeout: Optional[float] = None, + **kwargs, + ): + validate_param("collection_name", collection_name, str) + validate_param("index_params", index_params, IndexParams) + if len(index_params) == 0: + raise ParamError(message="IndexParams is empty, no index can be created") + + for index_param in index_params: + self._create_index(collection_name, index_param, timeout=timeout, **kwargs) + + def _create_index( + self, + collection_name: str, + index_param: IndexParam, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.create_index( + collection_name, + index_param.field_name, + index_param.get_index_configs(), + timeout=timeout, + index_name=index_param.index_name, + **kwargs, + ) + + def insert( + self, + collection_name: str, + data: Union[Dict, List[Dict]], + timeout: Optional[float] = None, + partition_name: Optional[str] = "", + **kwargs, + ) -> Dict: + """Insert data into the collection. + + If the Milvus Client was initiated without an existing Collection, the first dict passed + in will be used to initiate the collection. + + Args: + data (List[Dict[str, any]]): A list of dicts to pass in. If list not provided, will + cast to list. + timeout (float, optional): The timeout to use, will override init timeout. Defaults + to None. + + Raises: + DataNotMatchException: If the data has missing fields an exception will be thrown. + MilvusException: General Milvus error on insert. + + Returns: + Dict: Number of rows that were inserted and the inserted primary key list. + """ + # If no data provided, we cannot input anything + if isinstance(data, Dict): + data = [data] + + msg = "wrong type of argument 'data'," + msg += f"expected 'Dict' or list of 'Dict', got '{type(data).__name__}'" + + if not isinstance(data, List): + raise TypeError(msg) + + if len(data) == 0: + return {"insert_count": 0, "ids": []} + + conn = self._get_connection() + # Insert into the collection. + try: + res = conn.insert_rows( + collection_name, data, partition_name=partition_name, timeout=timeout, **kwargs + ) + except Exception as ex: + raise ex from ex + return OmitZeroDict( + { + "insert_count": res.insert_count, + "ids": res.primary_keys, + "cost": res.cost, + } + ) + + def upsert( + self, + collection_name: str, + data: Union[Dict, List[Dict]], + timeout: Optional[float] = None, + partition_name: Optional[str] = "", + **kwargs, + ) -> Dict: + """Upsert data into the collection. + + Args: + collection_name (str): Name of the collection to upsert into. + data (List[Dict[str, any]]): A list of dicts to pass in. If list not provided, will + cast to list. + timeout (float, optional): The timeout to use, will override init timeout. Defaults + to None. + partition_name (str, optional): Name of the partition to upsert into. + **kwargs (dict): Extra keyword arguments. + + * *partial_update* (bool, optional): Whether this is a partial update operation. + If True, only the specified fields will be updated while others remain unchanged + Default is False. + + Raises: + DataNotMatchException: If the data has missing fields an exception will be thrown. + MilvusException: General Milvus error on upsert. + + Returns: + Dict: Number of rows that were upserted. + """ + # If no data provided, we cannot input anything + if isinstance(data, Dict): + data = [data] + + msg = "wrong type of argument 'data'," + msg += f"expected 'Dict' or list of 'Dict', got '{type(data).__name__}'" + + if not isinstance(data, List): + raise TypeError(msg) + + if len(data) == 0: + return {"upsert_count": 0, "ids": []} + + conn = self._get_connection() + # Upsert into the collection. + try: + res = conn.upsert_rows( + collection_name, data, partition_name=partition_name, timeout=timeout, **kwargs + ) + except Exception as ex: + raise ex from ex + + return OmitZeroDict( + { + "upsert_count": res.upsert_count, + "cost": res.cost, + # milvus server supports upsert on autoid=ture from v2.4.15 + # upsert on autoid=ture will return new ids for user + "ids": res.primary_keys, + } + ) + + def hybrid_search( + self, + collection_name: str, + reqs: List[AnnSearchRequest], + ranker: Union[BaseRanker, Function], + limit: int = 10, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + **kwargs, + ) -> List[List[dict]]: + """Conducts multi vector similarity search with a rerank for rearrangement. + + Args: + collection_name(``string``): The name of collection. + reqs (``List[AnnSearchRequest]``): The vector search requests. + ranker (``Union[BaseRanker, Function]``): The ranker. + limit (``int``): The max number of returned record, also known as `topk`. + + partition_names (``List[str]``, optional): The names of partitions to search on. + output_fields (``List[str]``, optional): + The name of fields to return in the search result. Can only get scalar fields. + round_decimal (``int``, optional): + The specified number of decimal places of returned distance. + Defaults to -1 means no round to returned distance. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + **kwargs (``dict``): Optional search params + + * *offset* (``int``, optinal) + offset for pagination. + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + Returns: + List[List[dict]]: A nested list of dicts containing the result data. + + Raises: + MilvusException: If anything goes wrong + """ + + conn = self._get_connection() + return conn.hybrid_search( + collection_name, + reqs, + ranker, + limit=limit, + partition_names=partition_names, + output_fields=output_fields, + timeout=timeout, + **kwargs, + ) + + def search( + self, + collection_name: str, + data: Union[List[list], list], + filter: str = "", + limit: int = 10, + output_fields: Optional[List[str]] = None, + search_params: Optional[dict] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + anns_field: Optional[str] = None, + ranker: Optional[Union[Function, FunctionScore]] = None, + **kwargs, + ) -> List[List[dict]]: + """Search for a query vector/vectors. + + In order for the search to process, a collection needs to have been either provided + at init or data needs to have been inserted. + + Args: + data (Union[List[list], list, List[EmbeddingList]]): The vector/vectors/embedding + list to search. + limit (int, optional): How many results to return per search. Defaults to 10. + filter(str, optional): A filter to use for the search. Defaults to None. + output_fields (List[str], optional): List of which field values to return. If None + specified, only primary fields including distances will be returned. + search_params (dict, optional): The search params to use for the search. + ranker (Function, optional): The ranker to use for the search. + timeout (float, optional): Timeout to use, overides the client level assigned at init. + Defaults to None. + + Raises: + ValueError: The collection being searched doesnt exist. Need to insert data first. + + Returns: + List[List[dict]]: A nested list of dicts containing the result data. Embeddings are + not included in the result data. + """ + # Convert EmbeddingList objects to flat arrays if present + if isinstance(data, list) and data and isinstance(data[0], EmbeddingList): + data = [emb_list.to_flat_array() for emb_list in data] + kwargs["is_embedding_list"] = True + + conn = self._get_connection() + return conn.search( + collection_name, + data, + anns_field or "", + search_params or {}, + expression=filter, + limit=limit, + output_fields=output_fields, + partition_names=partition_names, + expr_params=kwargs.pop("filter_params", {}), + timeout=timeout, + ranker=ranker, + **kwargs, + ) + + def query( + self, + collection_name: str, + filter: str = "", + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + ids: Optional[Union[List, str, int]] = None, + partition_names: Optional[List[str]] = None, + **kwargs, + ) -> List[dict]: + """Query for entries in the Collection. + + Args: + filter (str): The filter to use for the query. + output_fields (List[str], optional): List of which field values to return. If None + specified, all fields excluding vector field will be returned. + partitions (List[str], optional): Which partitions to perform query. Defaults to None. + timeout (float, optional): Timeout to use, overides the client level assigned at init. + Defaults to None. + + Raises: + ValueError: Missing collection. + + Returns: + List[dict]: A list of result dicts, vectors are not included. + """ + if filter and not isinstance(filter, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(filter)) + + if filter and ids is not None: + raise ParamError(message=ExceptionsMessage.AmbiguousQueryFilterParam) + + if isinstance(ids, (int, str)): + ids = [ids] + + conn = self._get_connection() + + if ids: + schema_dict, _ = conn._get_schema_from_cache_or_remote(collection_name, timeout=timeout) + filter = self._pack_pks_expr(schema_dict, ids) + + if not output_fields: + output_fields = ["*"] + + return conn.query( + collection_name, + expr=filter, + output_fields=output_fields, + partition_names=partition_names, + timeout=timeout, + expr_params=kwargs.pop("filter_params", {}), + **kwargs, + ) + + def query_iterator( + self, + collection_name: str, + batch_size: Optional[int] = 1000, + limit: Optional[int] = UNLIMITED, + filter: Optional[str] = "", + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if filter is not None and not isinstance(filter, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(filter)) + + conn = self._get_connection() + # set up schema for iterator + schema_dict = conn.describe_collection(collection_name, timeout=timeout, **kwargs) + + return QueryIterator( + connection=conn, + collection_name=collection_name, + batch_size=batch_size, + limit=limit, + expr=filter, + output_fields=output_fields, + partition_names=partition_names, + schema=schema_dict, + timeout=timeout, + **kwargs, + ) + + def search_iterator( + self, + collection_name: str, + data: Union[List[list], list], + batch_size: Optional[int] = 1000, + filter: Optional[str] = None, + limit: Optional[int] = UNLIMITED, + output_fields: Optional[List[str]] = None, + search_params: Optional[dict] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + anns_field: Optional[str] = None, + round_decimal: int = -1, + **kwargs, + ) -> Union[SearchIteratorV2, SearchIterator]: + """Creates an iterator for searching vectors in batches. + + This method returns an iterator that performs vector similarity search in batches, + which is useful when dealing with large result sets. It automatically attempts to use + Search Iterator V2 if supported by the server, otherwise falls back to V1. + + Args: + collection_name (str): Name of the collection to search in. + data (Union[List[list], list]): Vector data to search with. For V2, only single vector + search is supported. + batch_size (int, optional): Number of results to fetch per batch. Defaults to 1000. + Must be between 1 and MAX_BATCH_SIZE. + filter (str, optional): Filtering expression to filter the results. Defaults to None. + limit (int, optional): Total number of results to return. Defaults to UNLIMITED. + (Deprecated) This parameter is deprecated and will be removed in a future release. + output_fields (List[str], optional): Fields to return in the results. + search_params (dict, optional): Parameters for the search operation. + timeout (float, optional): Timeout in seconds for each RPC call. + partition_names (List[str], optional): Names of partitions to search in. + anns_field (str, optional): Name of the vector field to search. Can be empty when + there is only one vector field in the collection. + round_decimal (int, optional): Number of decimal places for distance values. + Defaults to -1 (no rounding). + **kwargs: Additional arguments to pass to the search operation. + + Returns: + SearchIterator: An iterator object that yields search results in batches. + + Raises: + MilvusException: If the search operation fails. + ParamError: If the input parameters are invalid (e.g., invalid batch_size or multiple + vectors in data when using V2). + + Examples: + >>> # Search with iterator + >>> iterator = client.search_iterator( + ... collection_name="my_collection", + ... data=[[0.1, 0.2]], + ... batch_size=100 + ... ) + """ + + conn = self._get_connection() + + # compatibility logic, change this when support get version from server + try: + return SearchIteratorV2( + connection=conn, + collection_name=collection_name, + data=data, + batch_size=batch_size, + limit=limit, + filter=filter, + output_fields=output_fields, + search_params=search_params or {}, + timeout=timeout, + partition_names=partition_names, + anns_field=anns_field or "", + round_decimal=round_decimal, + **kwargs, + ) + except ServerVersionIncompatibleException: + # for compatibility, return search_iterator V1 + logger.warning(ExceptionsMessage.SearchIteratorV2FallbackWarning) + + # following is the old code for search_iterator V1 + if filter is not None and not isinstance(filter, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(filter)) + + # set up schema for iterator + schema_dict = conn.describe_collection(collection_name, timeout=timeout, **kwargs) + # if anns_field is not provided + # if only one vector field, use to search + # if multiple vector fields, raise exception and abort + if anns_field is None or anns_field == "": + vec_field = None + fields = schema_dict[FIELDS] + vec_field_count = 0 + for field in fields: + if is_vector_type(field[TYPE]): + vec_field_count += 1 + vec_field = field + if vec_field is None: + raise MilvusException( + code=ErrorCode.UNEXPECTED_ERROR, + message="there should be at least one vector field in milvus collection", + ) + if vec_field_count > 1: + raise MilvusException( + code=ErrorCode.UNEXPECTED_ERROR, + message="must specify anns_field when there are more than one vector field", + ) + anns_field = vec_field["name"] + if anns_field is None or anns_field == "": + raise MilvusException( + code=ErrorCode.UNEXPECTED_ERROR, + message=f"cannot get anns_field name for search iterator, got:{anns_field}", + ) + # set up metrics type for search_iterator which is mandatory + if search_params is None: + search_params = {} + if METRIC_TYPE not in search_params: + indexes = conn.list_indexes(collection_name) + for index in indexes: + if anns_field == index.index_name: + params = index.params + for param in params: + if param.key == METRIC_TYPE: + search_params[METRIC_TYPE] = param.value + if METRIC_TYPE not in search_params: + raise MilvusException( + ParamError, f"Cannot set up metrics type for anns_field:{anns_field}" + ) + + search_params["params"] = get_params(search_params) + + return SearchIterator( + connection=self._get_connection(), + collection_name=collection_name, + data=data, + ann_field=anns_field, + param=search_params, + batch_size=batch_size, + limit=limit, + expr=filter, + partition_names=partition_names, + output_fields=output_fields, + timeout=timeout, + round_decimal=round_decimal, + schema=schema_dict, + **kwargs, + ) + + def get( + self, + collection_name: str, + ids: Union[list, str, int], + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + partition_names: Optional[List[str]] = None, + **kwargs, + ) -> List[dict]: + """Grab the inserted vectors using the primary key from the Collection. + + Due to current implementations, grabbing a large amount of vectors is slow. + + Args: + ids (str): The pk's to get vectors for. Depending on pk_field type it can be int or str + or a list of either. + timeout (float, optional): Timeout to use, overides the client level assigned at + init. Defaults to None. + + Raises: + ValueError: Missing collection. + + Returns: + List[dict]: A list of result dicts with keys {pk_field, vector_field} + """ + if not isinstance(ids, list): + ids = [ids] + + if len(ids) == 0: + return [] + + conn = self._get_connection() + schema_dict, _ = conn._get_schema_from_cache_or_remote(collection_name, timeout=timeout) + + if not output_fields: + output_fields = ["*"] + + expr = self._pack_pks_expr(schema_dict, ids) + return conn.query( + collection_name, + expr=expr, + output_fields=output_fields, + partition_names=partition_names, + timeout=timeout, + **kwargs, + ) + + def delete( + self, + collection_name: str, + ids: Optional[Union[list, str, int]] = None, + timeout: Optional[float] = None, + filter: Optional[str] = None, + partition_name: Optional[str] = None, + **kwargs, + ) -> Dict[str, int]: + """Delete entries in the collection by their pk or by filter. + + Starting from version 2.3.2, Milvus no longer includes the primary keys in the result + when processing the delete operation on expressions. + This change is due to the large amount of data involved. + The delete interface no longer returns any results. + If no exceptions are thrown, it indicates a successful deletion. + However, for backward compatibility, If the primary_keys returned from old + Milvus(previous 2.3.2) is not empty, the list of primary keys is still returned. + + Args: + ids (list, str, int, optional): The pk's to delete. + Depending on pk_field type it can be int or str or a list of either. + Default to None. + filter(str, optional): A filter to use for the deletion. Defaults to none. + timeout (int, optional): Timeout to use, overides the client level assigned at init. + Defaults to None. + + Note: You need to passin either ids or filter, and they cannot be used at the same time. + + Returns: + Dict: with key 'deleted_count' and value number of rows that were deleted. + """ + pks = kwargs.get("pks", []) + if isinstance(pks, (int, str)): + pks = [pks] + + for pk in pks: + if not isinstance(pk, (int, str)): + msg = f"wrong type of argument pks, expect list, int or str, got '{type(pk).__name__}'" + raise TypeError(msg) + + if ids is not None: + if isinstance(ids, (int, str)): + pks.append(ids) + elif isinstance(ids, list): + for id in ids: + if not isinstance(id, (int, str)): + msg = f"wrong type of argument ids, expect list, int or str, got '{type(id).__name__}'" + raise TypeError(msg) + pks.extend(ids) + else: + msg = f"wrong type of argument ids, expect list, int or str, got '{type(ids).__name__}'" + raise TypeError(msg) + + # validate ambiguous delete filter param before describe collection rpc + if filter and len(pks) > 0: + raise ParamError(message=ExceptionsMessage.AmbiguousDeleteFilterParam) + + expr = "" + conn = self._get_connection() + if len(pks) > 0: + schema_dict, _ = conn._get_schema_from_cache_or_remote(collection_name, timeout=timeout) + expr = self._pack_pks_expr(schema_dict, pks) + else: + if not isinstance(filter, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(filter)) + expr = filter + + ret_pks = [] + res = conn.delete( + collection_name=collection_name, + expression=expr, + partition_name=partition_name, + expr_params=kwargs.pop("filter_params", {}), + timeout=timeout, + **kwargs, + ) + if res.primary_keys: + ret_pks.extend(res.primary_keys) + + # compatible with deletions that returns primary keys + if ret_pks: + return ret_pks + + return OmitZeroDict({"delete_count": res.delete_count, "cost": res.cost}) + + def get_collection_stats(self, collection_name: str, timeout: Optional[float] = None) -> Dict: + conn = self._get_connection() + stats = conn.get_collection_stats(collection_name, timeout=timeout) + result = {stat.key: stat.value for stat in stats} + if "row_count" in result: + result["row_count"] = int(result["row_count"]) + return result + + def describe_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + result = conn.describe_collection(collection_name, timeout=timeout, **kwargs) + # Convert internal struct_array_fields to user-friendly format + if isinstance(result, dict) and "struct_array_fields" in result: + converted_fields = convert_struct_fields_to_user_format(result["struct_array_fields"]) + result["fields"].extend(converted_fields) + # Remove internal struct_array_fields from user-facing response + result.pop("struct_array_fields") + + return result + + def has_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + return conn.has_collection(collection_name, timeout=timeout, **kwargs) + + def list_collections(self, **kwargs): + conn = self._get_connection() + return conn.list_collections(**kwargs) + + def drop_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + """Delete the collection stored in this object""" + conn = self._get_connection() + conn.drop_collection(collection_name, timeout=timeout, **kwargs) + + def rename_collection( + self, + old_name: str, + new_name: str, + target_db: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.rename_collections(old_name, new_name, target_db, timeout=timeout, **kwargs) + + @classmethod + def create_schema(cls, **kwargs): + kwargs["check_fields"] = False # do not check fields for now + return CollectionSchema([], **kwargs) + + @classmethod + def create_struct_field_schema(cls) -> StructFieldSchema: + return StructFieldSchema() + + @classmethod + def create_field_schema( + cls, name: str, data_type: DataType, desc: str = "", **kwargs + ) -> FieldSchema: + """Create a field schema. Wrapping orm.FieldSchema. + + Args: + name (str): The name of the field. + dtype (DataType): The data type of the field. + desc (str): The description of the field. + **kwargs: Additional keyword arguments. + + Returns: + FieldSchema: the FieldSchema created. + """ + return FieldSchema(name, data_type, desc, **kwargs) + + @classmethod + def prepare_index_params(cls, field_name: str = "", **kwargs) -> IndexParams: + index_params = IndexParams() + if field_name: + validate_param("field_name", field_name, str) + index_params.add_index(field_name, **kwargs) + return index_params + + def _create_collection_with_schema( + self, + collection_name: str, + schema: CollectionSchema, + index_params: IndexParams, + timeout: Optional[float] = None, + **kwargs, + ): + schema.verify() + + conn = self._get_connection() + if "consistency_level" not in kwargs: + kwargs["consistency_level"] = DEFAULT_CONSISTENCY_LEVEL + conn.create_collection(collection_name, schema, timeout=timeout, **kwargs) + + if index_params: + self.create_index(collection_name, index_params, timeout=timeout) + self.load_collection(collection_name, timeout=timeout) + + def close(self): + connections.remove_connection(self._using) + + def _get_connection(self): + return connections._fetch_handler(self._using) + + def _extract_primary_field(self, schema_dict: Dict) -> dict: + fields = schema_dict.get("fields", []) + if not fields: + return {} + + for field_dict in fields: + if field_dict.get("is_primary", None) is not None: + return field_dict + + return {} + + def _pack_pks_expr(self, schema_dict: Dict, pks: List) -> str: + primary_field = self._extract_primary_field(schema_dict) + pk_field_name = primary_field["name"] + data_type = primary_field["type"] + + # Varchar pks need double quotes around the values + if data_type == DataType.VARCHAR: + ids = ["'" + str(entry) + "'" for entry in pks] + expr = f"""{pk_field_name} in [{",".join(ids)}]""" + else: + ids = [str(entry) for entry in pks] + expr = f"{pk_field_name} in [{','.join(ids)}]" + return expr + + def load_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + """Loads the collection.""" + conn = self._get_connection() + conn.load_collection(collection_name, timeout=timeout, **kwargs) + + def release_collection(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + conn.release_collection(collection_name, timeout=timeout, **kwargs) + + def get_load_state( + self, + collection_name: str, + partition_name: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ) -> Dict: + conn = self._get_connection() + partition_names = None + if partition_name: + partition_names = [partition_name] + try: + state = conn.get_load_state(collection_name, partition_names, timeout=timeout, **kwargs) + except Exception as ex: + raise ex from ex + + ret = {"state": state} + if state == LoadState.Loading: + progress = conn.get_loading_progress(collection_name, partition_names, timeout=timeout) + ret["progress"] = progress + + return ret + + def refresh_load(self, collection_name: str, timeout: Optional[float] = None, **kwargs): + kwargs.pop("_refresh", None) + conn = self._get_connection() + conn.load_collection(collection_name, timeout=timeout, _refresh=True, **kwargs) + + def list_indexes(self, collection_name: str, field_name: Optional[str] = "", **kwargs): + """List all indexes of collection. If `field_name` is not specified, + return all the indexes of this collection, otherwise this interface will return + all indexes on this field of the collection. + + :param collection_name: The name of collection. + :type collection_name: str + + :param field_name: The name of field. If no field name is specified, all indexes + of this collection will be returned. + + :return: The name list of all indexes. + :rtype: str list + """ + conn = self._get_connection() + indexes = conn.list_indexes(collection_name, **kwargs) + index_name_list = [] + for index in indexes: + if not index: + continue + if not field_name or index.field_name == field_name: + index_name_list.append(index.index_name) + return index_name_list + + def drop_index( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.drop_index(collection_name, "", index_name, timeout=timeout, **kwargs) + + def describe_index( + self, collection_name: str, index_name: str, timeout: Optional[float] = None, **kwargs + ) -> Dict: + conn = self._get_connection() + return conn.describe_index(collection_name, index_name, timeout=timeout, **kwargs) + + def alter_index_properties( + self, + collection_name: str, + index_name: str, + properties: dict, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.alter_index_properties( + collection_name, index_name, properties=properties, timeout=timeout, **kwargs + ) + + def drop_index_properties( + self, + collection_name: str, + index_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.drop_index_properties( + collection_name, index_name, property_keys=property_keys, timeout=timeout, **kwargs + ) + + def alter_collection_properties( + self, collection_name: str, properties: dict, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.alter_collection_properties( + collection_name, + properties=properties, + timeout=timeout, + **kwargs, + ) + + def drop_collection_properties( + self, + collection_name: str, + property_keys: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.drop_collection_properties( + collection_name, property_keys=property_keys, timeout=timeout, **kwargs + ) + + def alter_collection_field( + self, + collection_name: str, + field_name: str, + field_params: dict, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.alter_collection_field_properties( + collection_name, + field_name=field_name, + field_params=field_params, + timeout=timeout, + **kwargs, + ) + + def add_collection_field( + self, + collection_name: str, + field_name: str, + data_type: DataType, + desc: str = "", + timeout: Optional[float] = None, + **kwargs, + ): + """Add a new field to the collection. + + Args: + collection_name(``string``): The name of collection. + name (str): The name of the field. + dtype (DataType): The data type of the field. + desc (str): The description of the field. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + **kwargs (``dict``): Optional field params + nullable: bool, indicates field is nullable or not, shall be ``True`` for now + default_value: default val for added field + + Raises: + MilvusException: If anything goes wrong + """ + field_schema = self.create_field_schema(field_name, data_type, desc, **kwargs) + conn = self._get_connection() + conn.add_collection_field( + collection_name, + field_schema, + timeout=timeout, + **kwargs, + ) + + def create_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.create_partition(collection_name, partition_name, timeout=timeout, **kwargs) + + def drop_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.drop_partition(collection_name, partition_name, timeout=timeout, **kwargs) + + def has_partition( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ) -> bool: + conn = self._get_connection() + return conn.has_partition(collection_name, partition_name, timeout=timeout, **kwargs) + + def list_partitions( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[str]: + conn = self._get_connection() + return conn.list_partitions(collection_name, timeout=timeout, **kwargs) + + def load_partitions( + self, + collection_name: str, + partition_names: Union[str, List[str]], + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(partition_names, str): + partition_names = [partition_names] + + conn = self._get_connection() + conn.load_partitions(collection_name, partition_names, timeout=timeout, **kwargs) + + def release_partitions( + self, + collection_name: str, + partition_names: Union[str, List[str]], + timeout: Optional[float] = None, + **kwargs, + ): + if isinstance(partition_names, str): + partition_names = [partition_names] + conn = self._get_connection() + conn.release_partitions(collection_name, partition_names, timeout=timeout, **kwargs) + + def get_partition_stats( + self, collection_name: str, partition_name: str, timeout: Optional[float] = None, **kwargs + ) -> Dict: + conn = self._get_connection() + if not isinstance(partition_name, str): + msg = f"wrong type of argument 'partition_name', str expected, got '{type(partition_name).__name__}'" + raise TypeError(msg) + ret = conn.get_partition_stats(collection_name, partition_name, timeout=timeout, **kwargs) + result = {stat.key: stat.value for stat in ret} + if "row_count" in result: + result["row_count"] = int(result["row_count"]) + return result + + def create_user(self, user_name: str, password: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + return conn.create_user(user_name, password, timeout=timeout, **kwargs) + + def drop_user(self, user_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + return conn.delete_user(user_name, timeout=timeout, **kwargs) + + def update_password( + self, + user_name: str, + old_password: str, + new_password: str, + reset_connection: Optional[bool] = False, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.update_password(user_name, old_password, new_password, timeout=timeout, **kwargs) + if reset_connection: + conn._setup_authorization_interceptor(user_name, new_password, None) + conn._setup_grpc_channel() + + def list_users(self, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + return conn.list_usernames(timeout=timeout, **kwargs) + + def describe_user(self, user_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + try: + res = conn.select_one_user(user_name, True, timeout=timeout, **kwargs) + except Exception as ex: + raise ex from ex + if res.groups: + item = res.groups[0] + return {"user_name": user_name, "roles": item.roles} + return {} + + def grant_role(self, user_name: str, role_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + conn.add_user_to_role(user_name, role_name, timeout=timeout, **kwargs) + + def revoke_role( + self, user_name: str, role_name: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.remove_user_from_role(user_name, role_name, timeout=timeout, **kwargs) + + def create_role(self, role_name: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + conn.create_role(role_name, timeout=timeout, **kwargs) + + def drop_role( + self, role_name: str, force_drop: bool = False, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.drop_role(role_name, force_drop=force_drop, timeout=timeout, **kwargs) + + def describe_role(self, role_name: str, timeout: Optional[float] = None, **kwargs) -> Dict: + conn = self._get_connection() + db_name = kwargs.pop("db_name", "") + try: + res = conn.select_grant_for_one_role(role_name, db_name, timeout=timeout, **kwargs) + except Exception as ex: + raise ex from ex + ret = {} + ret["role"] = role_name + ret["privileges"] = [dict(i) for i in res.groups] + return ret + + def list_roles(self, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + try: + res = conn.select_all_role(False, timeout=timeout, **kwargs) + except Exception as ex: + raise ex from ex + + groups = res.groups + return [g.role_name for g in groups] + + def grant_privilege( + self, + role_name: str, + object_type: str, + privilege: str, + object_name: str, + db_name: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.grant_privilege( + role_name, object_type, object_name, privilege, db_name, timeout=timeout, **kwargs + ) + + def revoke_privilege( + self, + role_name: str, + object_type: str, + privilege: str, + object_name: str, + db_name: Optional[str] = "", + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.revoke_privilege( + role_name, object_type, object_name, privilege, db_name, timeout=timeout, **kwargs + ) + + def grant_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Grant a privilege or a privilege group to a role. + + Args: + role_name (``str``): The name of the role. + privilege (``str``): The privilege or privilege group to grant. + collection_name (``str``): The name of the collection. + db_name (``str``, optional): The name of the database. It will use default database + if not specified. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.grant_privilege_v2( + role_name, + privilege, + collection_name, + db_name=db_name, + timeout=timeout, + **kwargs, + ) + + def revoke_privilege_v2( + self, + role_name: str, + privilege: str, + collection_name: str, + db_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Revoke a privilege or a privilege group from a role. + + Args: + role_name (``str``): The name of the role. + privilege (``str``): The privilege or privilege group to revoke. + collection_name (``str``): The name of the collection. + db_name (``str``, optional): The name of the database. It will use default database + if not specified. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.revoke_privilege_v2( + role_name, + privilege, + collection_name, + db_name=db_name, + timeout=timeout, + **kwargs, + ) + + def create_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.create_alias(collection_name, alias, timeout=timeout, **kwargs) + + def drop_alias(self, alias: str, timeout: Optional[float] = None, **kwargs): + conn = self._get_connection() + conn.drop_alias(alias, timeout=timeout, **kwargs) + + def alter_alias( + self, collection_name: str, alias: str, timeout: Optional[float] = None, **kwargs + ): + conn = self._get_connection() + conn.alter_alias(collection_name, alias, timeout=timeout, **kwargs) + + def describe_alias(self, alias: str, timeout: Optional[float] = None, **kwargs) -> Dict: + conn = self._get_connection() + return conn.describe_alias(alias, timeout=timeout, **kwargs) + + def list_aliases( + self, collection_name: str = "", timeout: Optional[float] = None, **kwargs + ) -> List[str]: + conn = self._get_connection() + return conn.list_aliases(collection_name, timeout=timeout, **kwargs) + + # deprecated same to use_database + def using_database(self, db_name: str, **kwargs): + self.use_database(db_name, **kwargs) + + def use_database(self, db_name: str, **kwargs): + conn = self._get_connection() + conn.reset_db_name(db_name) + + def create_database( + self, + db_name: str, + properties: Optional[dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + conn = self._get_connection() + conn.create_database(db_name=db_name, properties=properties, timeout=timeout, **kwargs) + + def drop_database(self, db_name: str, **kwargs): + conn = self._get_connection() + conn.drop_database(db_name, **kwargs) + + def list_databases(self, timeout: Optional[float] = None, **kwargs) -> List[str]: + conn = self._get_connection() + return conn.list_database(timeout=timeout, **kwargs) + + def describe_database(self, db_name: str, **kwargs) -> dict: + conn = self._get_connection() + return conn.describe_database(db_name, **kwargs) + + def alter_database_properties(self, db_name: str, properties: dict, **kwargs): + conn = self._get_connection() + conn.alter_database(db_name, properties, **kwargs) + + def drop_database_properties(self, db_name: str, property_keys: List[str], **kwargs): + conn = self._get_connection() + conn.drop_database_properties(db_name, property_keys, **kwargs) + + def flush( + self, + collection_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + """Seal all segments in the collection. Inserts after flushing will be written into + new segments. + + Args: + collection_name(``string``): The name of collection. + timeout (float): an optional duration of time in seconds to allow for the RPCs. + If timeout is not set, the client keeps waiting until the server + responds or an error occurs. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.flush([collection_name], timeout=timeout, **kwargs) + + def compact( + self, + collection_name: str, + is_clustering: Optional[bool] = False, + is_l0: Optional[bool] = False, + timeout: Optional[float] = None, + **kwargs, + ) -> int: + """Compact merge the small segments in a collection + + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + is_clustering (``bool``, optional): Option to trigger clustering compaction. + + Raises: + MilvusException: If anything goes wrong. + + Returns: + int: An integer represents the server's compaction job. You can use this job ID + for subsequent state inquiries. + """ + conn = self._get_connection() + return conn.compact( + collection_name, is_clustering=is_clustering, is_l0=is_l0, timeout=timeout, **kwargs + ) + + def get_compaction_state( + self, + job_id: int, + timeout: Optional[float] = None, + **kwargs, + ) -> str: + """Get the state of compaction job + + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + + Returns: + str: the state of this compaction job. Possible values are "UndefiedState", "Executing" + and "Completed". + """ + conn = self._get_connection() + result = conn.get_compaction_state(job_id, timeout=timeout, **kwargs) + return result.state_name + + def get_server_version( + self, + timeout: Optional[float] = None, + **kwargs, + ) -> str: + """Get the running server's version + + Args: + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + + Returns: + str: A string represent the server's version. + + Raises: + MilvusException: If anything goes wrong + """ + conn = self._get_connection() + return conn.get_server_version(timeout=timeout, **kwargs) + + def create_privilege_group( + self, + group_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + """Create a new privilege group. + + Args: + group_name (``str``): The name of the privilege group. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.create_privilege_group(group_name, timeout=timeout, **kwargs) + + def drop_privilege_group( + self, + group_name: str, + timeout: Optional[float] = None, + **kwargs, + ): + """Drop a privilege group. + + Args: + group_name (``str``): The name of the privilege group. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.drop_privilege_group(group_name, timeout=timeout, **kwargs) + + def list_privilege_groups( + self, + timeout: Optional[float] = None, + **kwargs, + ) -> List[Dict[str, str]]: + """List all privilege groups. + + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Returns: + List[Dict[str, str]]: A list of privilege groups. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + res = conn.list_privilege_groups(timeout=timeout, **kwargs) + ret = [] + for g in res.groups: + ret.append({"privilege_group": g.privilege_group, "privileges": g.privileges}) + return ret + + def add_privileges_to_group( + self, + group_name: str, + privileges: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + """Add privileges to a privilege group. + + Args: + group_name (``str``): The name of the privilege group. + privileges (``List[str]``): A list of privileges to be added to the group. + Privileges should be the same type in a group otherwise it will raise an exception. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.add_privileges_to_group(group_name, privileges, timeout=timeout, **kwargs) + + def remove_privileges_from_group( + self, + group_name: str, + privileges: List[str], + timeout: Optional[float] = None, + **kwargs, + ): + """Remove privileges from a privilege group. + + Args: + group_name (``str``): The name of the privilege group. + privileges (``List[str]``): A list of privileges to be removed from the group. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + conn.remove_privileges_from_group(group_name, privileges, timeout=timeout, **kwargs) + + def create_resource_group(self, name: str, timeout: Optional[float] = None, **kwargs): + """Create a resource group + It will success whether or not the resource group exists. + + Args: + name: The name of the resource group. + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + return conn.create_resource_group(name, timeout, **kwargs) + + def update_resource_groups( + self, + configs: Dict[str, ResourceGroupConfig], + timeout: Optional[float] = None, + ): + """Update resource groups. + This function updates the resource groups based on the provided configurations. + + Args: + configs: A mapping of resource group names to their configurations. + timeout: The timeout value in seconds. Defaults to None. + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + return conn.update_resource_groups(configs, timeout) + + def drop_resource_group( + self, + name: str, + timeout: Optional[float] = None, + ): + """Drop a resource group + It will success if the resource group is existed and empty, otherwise fail. + + Args: + name: The name of the resource group. + timeout: The timeout value in seconds. Defaults to None. + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + return conn.drop_resource_group(name, timeout) + + def describe_resource_group(self, name: str, timeout: Optional[float] = None): + """Drop a resource group + It will success if the resource group is existed and empty, otherwise fail. + + Args: + name: The name of the resource group. + timeout: The timeout value in seconds. Defaults to None. + Returns: + ResourceGroupInfo: The detail info of the resource group. + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + return conn.describe_resource_group(name, timeout) + + def list_resource_groups(self, timeout: Optional[float] = None): + """list all resource group names + + Args: + timeout: The timeout value in seconds. Defaults to None. + Returns: + list[str]: all resource group names + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + return conn.list_resource_groups(timeout) + + def transfer_replica( + self, + source_group: str, + target_group: str, + collection_name: str, + num_replicas: int, + timeout: Optional[float] = None, + ): + """transfer num_replica from source resource group to target resource group + + Args: + source_group: source resource group name + target_group: target resource group name + collection_name: collection name which replica belong to + num_replicas: transfer replica num + timeout: The timeout value in seconds. Defaults to None. + + Raises: + MilvusException: If anything goes wrong. + """ + conn = self._get_connection() + return conn.transfer_replica( + source_group, target_group, collection_name, num_replicas, timeout + ) + + def describe_replica( + self, collection_name: str, timeout: Optional[float] = None, **kwargs + ) -> List[ReplicaInfo]: + """Get the current loaded replica information + + Args: + collection_name (``str``): The name of the given collection. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + Returns: + List[ReplicaInfo]: All the replica information. + """ + conn = self._get_connection() + return conn.describe_replica(collection_name, timeout=timeout, **kwargs) + + def run_analyzer( + self, + texts: Union[str, List[str]], + analyzer_params: Optional[Union[str, Dict]] = None, + with_hash: bool = False, + with_detail: bool = False, + collection_name: Optional[str] = None, + field_name: Optional[str] = None, + analyzer_names: Optional[Union[str, List[str]]] = None, + timeout: Optional[float] = None, + ): + """Run analyzer. Return result tokens of analysis. + Args: + text(``str``,``List[str]``): The input text (string or string list). + analyzer_params(``str``,``Dict``,``None``): The parameters of analyzer. + timeout(``float``, optional): The timeout value in seconds. Defaults to None. + Returns: + (``List[str]``,``List[List[str]]``): The result tokens of analysis. + """ + + return self._get_connection().run_analyzer( + texts, + analyzer_params=analyzer_params, + with_hash=with_hash, + with_detail=with_detail, + collection_name=collection_name, + field_name=field_name, + analyzer_names=analyzer_names, + timeout=timeout, + ) + + def update_replicate_configuration( + self, + clusters: Optional[List[Dict]] = None, + cross_cluster_topology: Optional[List[Dict]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """ + Update replication configuration across Milvus clusters. + + Args: + clusters (List[Dict], optional): List of cluster configurations. + Each dict should contain: + - cluster_id (str): Unique identifier for the cluster + - connection_param (Dict): Connection parameters with 'uri' and 'token' + - pchannels (List[str], optional): Physical channels for the cluster + + cross_cluster_topology (List[Dict], optional): List of replication relationships. + Each dict should contain: + - source_cluster_id (str): ID of the source cluster + - target_cluster_id (str): ID of the target cluster + + cross_cluster_topology (List[Dict], optional): List of replication relationships. + Each dict should contain: + - source_cluster_id (str): ID of the source cluster + - target_cluster_id (str): ID of the target cluster + + timeout (float, optional): An optional duration of time in seconds to allow for the RPC + **kwargs: Additional arguments + + Returns: + Status: The status of the operation + + Raises: + ParamError: If neither clusters nor cross_cluster_topology is provided + MilvusException: If the operation fails + + Examples: + client.update_replicate_configuration( + clusters=[ + { + "cluster_id": "source_cluster", + "connection_param": { + "uri": "http://source:19530", + "token": "source_token" + }, + "pchannels": ["source_pchannel1", "source_pchannel2"] + }, + { + "cluster_id": "target_cluster", + "connection_param": { + "uri": "http://target:19530", + "token": "target_token" + }, + "pchannels": ["target_pchannel1", "target_pchannel2"] + } + ], + cross_cluster_topology=[ + { + "source_cluster_id": "source_cluster", + "target_cluster_id": "target_cluster" + } + ] + ) + """ + + return self._get_connection().update_replicate_configuration( + clusters=clusters, + cross_cluster_topology=cross_cluster_topology, + timeout=timeout, + **kwargs, + ) + + def flush_all(self, timeout: Optional[float] = None, **kwargs) -> None: + """Flush all collections. + + Args: + timeout (Optional[float]): An optional duration of time in seconds to allow for the RPC. + **kwargs: Additional arguments. + """ + self._get_connection().flush_all(timeout=timeout, **kwargs) + + def get_flush_all_state(self, timeout: Optional[float] = None, **kwargs) -> bool: + """Get the flush all state. + + Args: + timeout (Optional[float]): An optional duration of time in seconds to allow for the RPC. + **kwargs: Additional arguments. + + Returns: + bool: True if flush all operation is completed, False otherwise. + """ + return self._get_connection().get_flush_all_state(timeout=timeout, **kwargs) + + def list_loaded_segments( + self, + collection_name: str, + timeout: Optional[float] = None, + **kwargs, + ) -> List[LoadedSegmentInfo]: + """List loaded segments for a collection. + + Args: + collection_name (str): The name of the collection. + timeout (Optional[float]): An optional duration of time in seconds to allow for the RPC. + **kwargs: Additional arguments. + + Returns: + List[LoadedSegmentInfo]: A list of loaded segment information. + """ + infos = self._get_connection().get_query_segment_info( + collection_name, timeout=timeout, **kwargs + ) + return [ + LoadedSegmentInfo( + info.segment_id, + info.collection_id, + collection_name, + info.num_rows, + info.is_sorted, + info.state, + info.level, + info.storage_version, + info.mem_size, + ) + for info in infos + ] + + def list_persistent_segments( + self, + collection_name: str, + timeout: Optional[float] = None, + **kwargs, + ) -> List[SegmentInfo]: + """List persistent segments for a collection. + + Args: + collection_name (str): The name of the collection. + timeout (Optional[float]): An optional duration of time in seconds to allow for the RPC. + **kwargs: Additional arguments. + + Returns: + List[SegmentInfo]: A list of persistent segment information. + """ + infos = self._get_connection().get_persistent_segment_infos( + collection_name, timeout=timeout, **kwargs + ) + return [ + SegmentInfo( + info.segment_id, + info.collection_id, + collection_name, + info.num_rows, + info.is_sorted, + info.state, + info.level, + info.storage_version, + ) + for info in infos + ] + + def get_server_type(self): + """Get the server type. + + Returns: + str: The server type (e.g., "milvus", "zilliz"). + """ + return self._get_connection().get_server_type() + + def get_compaction_plans( + self, + job_id: int, + timeout: Optional[float] = None, + **kwargs, + ) -> CompactionPlans: + """Get compaction plans for a specific job. + + Args: + job_id (int): The ID of the compaction job. + timeout (Optional[float]): An optional duration of time in seconds to allow for the RPC. + **kwargs: Additional arguments. + + Returns: + CompactionPlans: The compaction plans for the specified job. + """ + return self._get_connection().get_compaction_plans(job_id, timeout=timeout, **kwargs) diff --git a/pymilvus/orm/collection.py b/pymilvus/orm/collection.py index 15961aad2..6c4fb0129 100644 --- a/pymilvus/orm/collection.py +++ b/pymilvus/orm/collection.py @@ -11,148 +11,159 @@ # the License. import copy -import pandas +import json +from typing import Dict, List, Optional, Union + +import pandas as pd + +from pymilvus.client import utils +from pymilvus.client.abstract import BaseRanker +from pymilvus.client.constants import DEFAULT_CONSISTENCY_LEVEL +from pymilvus.client.search_result import SearchResult +from pymilvus.client.types import ( + CompactionPlans, + CompactionState, + Replica, + cmp_consistency_level, + get_consistency_level, +) +from pymilvus.exceptions import ( + AutoIDException, + DataTypeNotMatchException, + DataTypeNotSupportException, + ExceptionsMessage, + IndexNotExistException, + PartitionAlreadyExistException, + SchemaNotReadyException, +) +from pymilvus.grpc_gen import schema_pb2 +from pymilvus.settings import Config from .connections import connections +from .constants import UNLIMITED +from .future import MutationFuture, SearchFuture +from .index import Index +from .iterator import QueryIterator, SearchIterator +from .mutation import MutationResult +from .partition import Partition +from .prepare import Prepare from .schema import ( CollectionSchema, FieldSchema, - parse_fields_from_data, - infer_dtype_bydata, + Function, + FunctionScore, + check_insert_schema, + check_schema, + check_upsert_schema, + construct_fields_from_dataframe, + is_row_based, + is_valid_insert_data, ) -from .prepare import Prepare -from .partition import Partition -from .index import Index -from .search import SearchResult -from .mutation import MutationResult from .types import DataType -from .exceptions import ( - SchemaNotReadyException, - DataTypeNotMatchException, - DataNotMatchException, - PartitionAlreadyExistException, - PartitionNotExistException, - IndexNotExistException, - AutoIDException, - ExceptionsMessage, -) -from .future import SearchFuture, MutationFuture -from ..client.types import CompactionState, CompactionPlans -from ..client.types import get_consistency_level -from ..client.constants import DEFAULT_CONSISTENCY_LEVEL - - -def _check_schema(schema): - if schema is None: - raise SchemaNotReadyException(0, ExceptionsMessage.NoSchema) - if len(schema.fields) < 1: - raise SchemaNotReadyException(0, ExceptionsMessage.EmptySchema) - vector_fields = [] - for field in schema.fields: - if field.dtype == DataType.FLOAT_VECTOR or field.dtype == DataType.BINARY_VECTOR: - vector_fields.append(field.name) - if len(vector_fields) < 1: - raise SchemaNotReadyException(0, ExceptionsMessage.NoVector) - - -def _check_data_schema(fields, data): - if isinstance(data, pandas.DataFrame): - for i, field in enumerate(fields): - for j, _ in enumerate(data[field.name]): - tmp_type = infer_dtype_bydata(data[field.name].iloc[j]) - if tmp_type != field.dtype: - raise DataNotMatchException(0, ExceptionsMessage.DataTypeInconsistent) - else: - for i, field in enumerate(fields): - for j, _ in enumerate(data[i]): - tmp_type = infer_dtype_bydata(data[i][j]) - if tmp_type != field.dtype: - raise DataNotMatchException(0, ExceptionsMessage.DataTypeInconsistent) +from .utility import _get_connection class Collection: - """ This is a class corresponding to collection in milvus. """ - - def __init__(self, name, schema=None, using="default", shards_num=2, **kwargs): - """ - Constructs a collection by name, schema and other parameters. - Connection information is contained in kwargs. - - :param name: the name of collection - :type name: str - - :param schema: the schema of collection - :type schema: class `schema.CollectionSchema` - - :param using: Milvus link of create collection - :type using: str - - :param shards_num: How wide to scale collection. Corresponds to how many active datanodes - can be used on insert. - :type shards_num: int - - :param kwargs: - * *consistency_level* (``str/int``) -- - Which consistency level to use when searching in the collection. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter can be overwritten by the same parameter specified in search. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - + def __init__( + self, + name: str, + schema: Optional[CollectionSchema] = None, + using: str = "default", + **kwargs, + ) -> None: + """Constructs a collection by name, schema and other parameters. + + Args: + name (``str``): the name of collection + schema (``CollectionSchema``, optional): the schema of collection, defaults to None. + using (``str``, optional): Milvus connection alias name, defaults to 'default'. + **kwargs (``dict``): + + * *num_shards (``int``, optional): how many shards will the insert data be divided. + * *shards_num (``int``, optional, deprecated): + how many shards will the insert data be divided. + * *consistency_level* (``int/ str``) + Which consistency level to use when searching in the collection. + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: can be overwritten by the same parameter specified in search. + + * *properties* (``dict``, optional) + Collection properties. + + * *timeout* (``float``) + An optional duration of time in seconds to allow for the RPCs. + If timeout is not set, the client keeps waiting until the server + responds or an error occurs. + + + Raises: + SchemaNotReadyException: if the schema is wrong. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> fields = [ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) ... ] - >>> description="This is a new collection description." - >>> schema = CollectionSchema(fields=fields, description=description) - >>> collection = Collection(name="test_collection_init", schema=schema) + >>> schema = CollectionSchema(fields=fields) + >>> prop = {"collection.ttl.seconds": 1800} + >>> collection = Collection(name="test_collection_init", schema=schema, properties=prop) >>> collection.name 'test_collection_init' - >>> collection.description - 'This is a new collection description.' - >>> collection.is_empty - True - >>> collection.num_entities - 0 """ self._name = name self._using = using - self._shards_num = shards_num self._kwargs = kwargs + self._num_shards = None conn = self._get_connection() - has = conn.has_collection(self._name) + + has = conn.has_collection(self._name, **kwargs) if has: - resp = conn.describe_collection(self._name) + resp = conn.describe_collection(self._name, **kwargs) + s_consistency_level = resp.get("consistency_level", DEFAULT_CONSISTENCY_LEVEL) + arg_consistency_level = kwargs.get("consistency_level", s_consistency_level) + if not cmp_consistency_level(s_consistency_level, arg_consistency_level): + raise SchemaNotReadyException( + message=ExceptionsMessage.ConsistencyLevelInconsistent + ) server_schema = CollectionSchema.construct_from_dict(resp) + self._consistency_level = s_consistency_level if schema is None: self._schema = server_schema else: if not isinstance(schema, CollectionSchema): - raise SchemaNotReadyException(0, ExceptionsMessage.SchemaType) + raise SchemaNotReadyException(message=ExceptionsMessage.SchemaType) if server_schema != schema: - raise SchemaNotReadyException(0, ExceptionsMessage.SchemaInconsistent) + raise SchemaNotReadyException(message=ExceptionsMessage.SchemaInconsistent) self._schema = schema else: if schema is None: - raise SchemaNotReadyException(0, ExceptionsMessage.CollectionNotExistNoSchema % name) + raise SchemaNotReadyException( + message=ExceptionsMessage.CollectionNotExistNoSchema % name + ) if isinstance(schema, CollectionSchema): - _check_schema(schema) - consistency_level = get_consistency_level(kwargs.get("consistency_level", DEFAULT_CONSISTENCY_LEVEL)) - conn.create_collection(self._name, fields=schema.to_dict(), shards_num=self._shards_num, - consistency_level=consistency_level) + schema.verify() + check_schema(schema) + consistency_level = get_consistency_level( + kwargs.get("consistency_level", DEFAULT_CONSISTENCY_LEVEL) + ) + + conn.create_collection(self._name, schema, **kwargs) self._schema = schema + self._consistency_level = consistency_level else: - raise SchemaNotReadyException(0, ExceptionsMessage.SchemaType) + raise SchemaNotReadyException(message=ExceptionsMessage.SchemaType) - def __repr__(self): + self._schema_dict = self._schema.to_dict() + self._schema_dict["consistency_level"] = self._consistency_level + + def __repr__(self) -> str: _dict = { - 'name': self.name, - 'partitions': self.partitions, - 'description': self.description, - 'schema': self._schema, + "name": self.name, + "description": self.description, + "schema": self._schema, } r = [":\n-------------\n"] s = "<{}>: {}\n" @@ -163,189 +174,102 @@ def __repr__(self): def _get_connection(self): return connections._fetch_handler(self._using) - def _check_insert_data_schema(self, data): - """ - Checks whether the data type matches the schema. - """ - if self._schema is None: - return False - if self._schema.auto_id: - if isinstance(data, pandas.DataFrame): - if self._schema.primary_field.name in data: - if not data[self._schema.primary_field.name].isnull().all(): - raise DataNotMatchException(0, ExceptionsMessage.AutoIDWithData) - data = data.drop(self._schema.primary_field.name, axis=1) - - infer_fields = parse_fields_from_data(data) - tmp_fields = copy.deepcopy(self._schema.fields) - - for i, field in enumerate(self._schema.fields): - if field.is_primary and field.auto_id: - tmp_fields.pop(i) - - if len(infer_fields) != len(tmp_fields): - raise DataTypeNotMatchException(0, ExceptionsMessage.FieldsNumInconsistent) - - _check_data_schema(infer_fields, data) - - for x, y in zip(infer_fields, tmp_fields): - if x.dtype != y.dtype: - return False - if isinstance(data, pandas.DataFrame): - if x.name != y.name: - return False - # todo check dim - return True - - def _check_schema(self): - if self._schema is None: - raise SchemaNotReadyException(0, ExceptionsMessage.NoSchema) - - def _get_vector_field(self) -> str: - for field in self._schema.fields: - if field.dtype == DataType.FLOAT_VECTOR or field.dtype == DataType.BINARY_VECTOR: - return field.name - raise SchemaNotReadyException(0, ExceptionsMessage.NoVector) - + # TODO(SPARSE): support pd.SparseDtype @classmethod - def construct_from_dataframe(cls, name, dataframe, **kwargs): - if dataframe is None: - raise SchemaNotReadyException(0, ExceptionsMessage.NoneDataFrame) - if not isinstance(dataframe, pandas.DataFrame): - raise SchemaNotReadyException(0, ExceptionsMessage.DataFrameType) + def construct_from_dataframe(cls, name: str, dataframe: pd.DataFrame, **kwargs): + if not isinstance(dataframe, pd.DataFrame): + raise SchemaNotReadyException(message=ExceptionsMessage.DataFrameType) primary_field = kwargs.pop("primary_field", None) if primary_field is None: - raise SchemaNotReadyException(0, ExceptionsMessage.NoPrimaryKey) + raise SchemaNotReadyException(message=ExceptionsMessage.NoPrimaryKey) pk_index = -1 for i, field in enumerate(dataframe): if field == primary_field: pk_index = i if pk_index == -1: - raise SchemaNotReadyException(0, ExceptionsMessage.PrimaryKeyNotExist) - if "auto_id" in kwargs: - if not isinstance(kwargs.get("auto_id", None), bool): - raise AutoIDException(0, ExceptionsMessage.AutoIDType) + raise SchemaNotReadyException(message=ExceptionsMessage.PrimaryKeyNotExist) + if "auto_id" in kwargs and not isinstance(kwargs.get("auto_id"), bool): + raise AutoIDException(message=ExceptionsMessage.AutoIDType) auto_id = kwargs.pop("auto_id", False) if auto_id: if dataframe[primary_field].isnull().all(): dataframe = dataframe.drop(primary_field, axis=1) else: - raise SchemaNotReadyException(0, ExceptionsMessage.AutoIDWithData) + raise SchemaNotReadyException(message=ExceptionsMessage.AutoIDWithData) - fields = parse_fields_from_data(dataframe) - _check_data_schema(fields, dataframe) - if auto_id: - fields.insert(pk_index, FieldSchema(name=primary_field, dtype=DataType.INT64, is_primary=True, auto_id=True, - **kwargs)) + using = kwargs.get("using", Config.MILVUS_CONN_ALIAS) + conn = _get_connection(using) + if conn.has_collection(name, **kwargs): + resp = conn.describe_collection(name, **kwargs) + server_schema = CollectionSchema.construct_from_dict(resp) + schema = server_schema else: - for field in fields: - if field.name == primary_field: + fields_schema = construct_fields_from_dataframe(dataframe) + if auto_id: + fields_schema.insert( + pk_index, + FieldSchema( + name=primary_field, + dtype=DataType.INT64, + is_primary=True, + auto_id=True, + **kwargs, + ), + ) + + for field in fields_schema: + if auto_id is False and field.name == primary_field: field.is_primary = True field.auto_id = False + if field.dtype == DataType.VARCHAR: + field.params[Config.MaxVarCharLengthKey] = int(Config.MaxVarCharLength) + schema = CollectionSchema(fields=fields_schema) - schema = CollectionSchema(fields=fields) - _check_schema(schema) + check_schema(schema) collection = cls(name, schema, **kwargs) res = collection.insert(data=dataframe) return collection, res @property def schema(self) -> CollectionSchema: - """ - Returns the schema of the collection. - - :return schema.CollectionSchema: - Schema of the collection. - """ + """CollectionSchema: schema of the collection.""" return self._schema @property - def description(self) -> str: - """ - Returns a text description of the collection. - - :return str: - Collection description text, returned when the operation succeeds. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - >>> fields = [ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) - ... ] - >>> description="This is an example text description." - >>> schema = CollectionSchema(fields=fields, description=description) - >>> collection = Collection(name="test_collection_description", schema=schema) - >>> collection.description - 'This is an example text description.' - """ + def aliases(self) -> list: + """List[str]: all the aliases of the collection.""" + conn = self._get_connection() + resp = conn.describe_collection(self._name) + return resp["aliases"] - return self._schema.description + @property + def description(self) -> str: + """str: a text description of the collection.""" + return self.schema.description @property def name(self) -> str: - """ - Returns the collection name. - - :return str: - The collection name, returned when the operation succeeds. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - >>> fields = [ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) - ... ] - >>> schema = CollectionSchema(fields) - >>> collection = Collection("test_collection_name", schema) - >>> collection.name - 'test_collection_name' - """ + """str: the name of the collection.""" return self._name @property def is_empty(self) -> bool: - """ - Whether the collection is empty. - This method need to call `num_entities <#pymilvus.Collection.num_entities>`_. - - :return bool: - * True: The collection is empty. - * False: The collection is gfghnot empty. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - >>> schema = CollectionSchema([ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) - ... ]) - >>> collection = Collection("test_collection_is_empty", schema) - >>> collection.is_empty - True - >>> collection.insert([[1], [[1.0, 2.0]]]) - - >>> collection.is_empty - False - """ + """bool: whether the collection is empty or not.""" return self.num_entities == 0 - # read-only @property - def num_entities(self) -> int: - """ - Returns the number of entities in the collection. + def num_shards(self) -> int: + """int: number of shards used by the collection.""" + if self._num_shards is None: + self._num_shards = self.describe().get("num_shards") + return self._num_shards - :return int: - Number of entities in the collection. - - :raises CollectionNotExistException: If the collection does not exist. + @property + def num_entities(self) -> int: + """int: The number of entities in the collection, not real time. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -355,52 +279,57 @@ def num_entities(self) -> int: 0 >>> collection.insert([[1, 2], [[1.0, 2.0], [3.0, 4.0]]]) >>> collection.num_entities + 0 + >>> collection.flush() + >>> collection.num_entities 2 - """ + """ conn = self._get_connection() - conn.flush([self._name]) - stats = conn.get_collection_stats(db_name="", collection_name=self._name) + stats = conn.get_collection_stats(collection_name=self._name) result = {stat.key: stat.value for stat in stats} result["row_count"] = int(result["row_count"]) return result["row_count"] @property def primary_field(self) -> FieldSchema: - """ - Returns the primary field of the collection. + """FieldSchema: the primary field of the collection.""" + return self.schema.primary_field - :return schema.FieldSchema: - The primary field of the collection. + def flush(self, timeout: Optional[float] = None, **kwargs): + """Seal all segments in the collection. Inserts after flushing will be written into + new segments. Only sealed segments can be indexed. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - >>> schema = CollectionSchema([ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("film_length", DataType.INT64, description="length in miniute"), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) - ... ]) - >>> collection = Collection("test_collection_primary_field", schema) - >>> collection.primary_field.name - 'film_id' - """ - return self._schema.primary_field + Args: + timeout (float): an optional duration of time in seconds to allow for the RPCs. + If timeout is not set, the client keeps waiting until the server + responds or an error occurs. - def drop(self, timeout=None, **kwargs): + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType + >>> fields = [ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) + ... ] + >>> schema = CollectionSchema(fields=fields) + >>> collection = Collection(name="test_collection_flush", schema=schema) + >>> collection.insert([[1, 2], [[1.0, 2.0], [3.0, 4.0]]]) + >>> collection.flush() + >>> collection.num_entities + 2 """ - Drops the collection together with its index files. + conn = self._get_connection() + conn.flush([self.name], timeout=timeout, **kwargs) - :param timeout: - * *timeout* (``float``) -- - An optional duration of time in seconds to allow for the RPC. - If timeout is set to None, - the client keeps waiting until the server responds or an error occurs. + def drop(self, timeout: Optional[float] = None, **kwargs): + """Drops the collection. The same as `utility.drop_collection()` - :raises CollectionNotExistException: If the collection does not exist. + Args: + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -413,31 +342,70 @@ def drop(self, timeout=None, **kwargs): False """ conn = self._get_connection() - indexes = self.indexes - for index in indexes: - index.drop(timeout=timeout, **kwargs) conn.drop_collection(self._name, timeout=timeout, **kwargs) - def load(self, partition_names=None, timeout=None, **kwargs): + def set_properties(self, properties: dict, timeout: Optional[float] = None, **kwargs): + """Set properties for the collection + Args: + properties (``dict``): collection properties. + support collection TTL with key `collection.ttl.seconds` + support collection replica number with key `collection.replica.number` + support collection resource groups with key `collection.resource_groups`. + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType + >>> fields = [ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) + ... ] + >>> schema = CollectionSchema(fields=fields) + >>> collection = Collection("test_set_properties", schema) + >>> collection.set_properties({"collection.ttl.seconds": 60}) """ - Loads the collection from disk to memory. - - :param partition_names: The specified partitions to load. - :type partition_names: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. If timeout - is set to None, the client keeps waiting until the server responds or error occurs. - :type timeout: float - - :param kwargs: - * *_async* (``bool``) -- Indicate if invoke asynchronously. - - :raises CollectionNotExistException: If the collection does not exist. - :raises ParamError: If the parameters are invalid. - :raises BaseException: If the specified field, index or partition does not exist. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + conn = self._get_connection() + conn.alter_collection_properties( + self.name, + properties=properties, + timeout=timeout, + **kwargs, + ) + + def load( + self, + partition_names: Optional[list] = None, + replica_number: Optional[int] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Load the data into memory. + + Args: + partition_names (``List[str]``): The specified partitions to load. + replica_number (``int``, optional): The replica number to load, defaults to None. + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + **kwargs (``dict``, optional): + + * *_async*(``bool``) + Indicate if invoke asynchronously. + + * *refresh*(``bool``) + Whether to renew the segment list of this collection before loading + * *resource_groups(``List[str]``) + Specify resource groups which can be used during loading. + * *load_fields(``List[str]``) + Specify load fields list needed during this load + * *_skip_load_dynamic_field(``bool``) + Specify whether this load shall skip dynamic schmea field + + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> connections.connect() >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), @@ -445,78 +413,78 @@ def load(self, partition_names=None, timeout=None, **kwargs): ... ]) >>> collection = Collection("test_collection_load", schema) >>> collection.insert([[1, 2], [[1.0, 2.0], [3.0, 4.0]]]) - + >>> index_param = {"index_type": "FLAT", "metric_type": "L2", "params": {}} + >>> collection.create_index("films", index_param) >>> collection.load() - >>> collection.num_entities - 2 """ conn = self._get_connection() if partition_names is not None: - conn.load_partitions(self._name, partition_names, timeout=timeout, **kwargs) + conn.load_partitions( + collection_name=self._name, + partition_names=partition_names, + replica_number=replica_number, + timeout=timeout, + **kwargs, + ) else: - conn.load_collection(self._name, timeout=timeout, **kwargs) - - def release(self, timeout=None, **kwargs): - """ - Releases the collection from memory. - - :param timeout: - * *timeout* (``float``) -- - An optional duration of time in seconds to allow for the RPC. If timeout - is set to None, the client keeps waiting until the server responds or an error occurs. - - :raises CollectionNotExistException: If collection does not exist. - :raises BaseException: If collection has not been loaded to memory. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + conn.load_collection( + collection_name=self._name, + replica_number=replica_number, + timeout=timeout, + **kwargs, + ) + + def release(self, timeout: Optional[float] = None, **kwargs): + """Releases the collection data from memory. + + Args: + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) ... ]) >>> collection = Collection("test_collection_release", schema) >>> collection.insert([[1, 2], [[1.0, 2.0], [3.0, 4.0]]]) - + >>> index_param = {"index_type": "FLAT", "metric_type": "L2", "params": {}} + >>> collection.create_index("films", index_param) >>> collection.load() - >>> collection.num_entities - 2 - >>> collection.release() # release the collection from memory + >>> collection.release() """ conn = self._get_connection() conn.release_collection(self._name, timeout=timeout, **kwargs) - def insert(self, data, partition_name=None, timeout=None, **kwargs): - """ - Insert data into the collection. - - :param data: The specified data to insert, the dimension of data needs to align with column - number - :type data: list-like(list, tuple) object or pandas.DataFrame - :param partition_name: The partition name which the data will be inserted to, if partition - name is not passed, then the data will be inserted to "_default" - partition - :type partition_name: str - - :param timeout: - * *timeout* (``float``) -- - An optional duration of time in seconds to allow for the RPC. If timeout - is set to None, the client keeps waiting until the server responds or an error occurs. - - :return: A MutationResult object contains a property named `insert_count` represents how many - entities have been inserted into milvus and a property named `primary_keys` is a list of primary - keys of the inserted entities. - :rtype: MutationResult - - :raises CollectionNotExistException: If the specified collection does not exist. - :raises ParamError: If input parameters are invalid. - :raises BaseException: If the specified partition does not exist. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + def insert( + self, + data: Union[List, pd.DataFrame, Dict, utils.SparseMatrixInputType], + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> MutationResult: + """Insert data into the collection. + + Args: + data (``list/tuple/pandas.DataFrame/sparse types``): The specified data to insert + partition_name (``str``): The partition name which the data will be inserted to, + if partition name is not passed, then the data will be inserted + to default partition + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + Returns: + MutationResult: contains 2 properties `insert_count`, and, `primary_keys` + `insert_count`: how may entites have been inserted into Milvus, + `primary_keys`: list of primary keys of the inserted entities + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> import random - >>> connections.connect() - >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -526,55 +494,79 @@ def insert(self, data, partition_name=None, timeout=None, **kwargs): ... [random.randint(1, 100) for _ in range(10)], ... [[random.random() for _ in range(2)] for _ in range(10)], ... ] - >>> collection.insert(data) - >>> collection.num_entities + >>> res = collection.insert(data) + >>> res.insert_count 10 """ - if data is None: - return MutationResult(data) - if not self._check_insert_data_schema(data): - raise SchemaNotReadyException(0, ExceptionsMessage.TypeOfDataAndSchemaInconsistent) - conn = self._get_connection() - entities = Prepare.prepare_insert_data(data, self._schema) - res = conn.bulk_insert(self._name, entities, partition_name, ids=None, timeout=timeout, **kwargs) - - if kwargs.get("_async", False): - return MutationFuture(res) - return MutationResult(res) + if not is_valid_insert_data(data): + raise DataTypeNotSupportException( + message="The type of data should be List, pd.DataFrame or Dict" + ) - def delete(self, expr, partition_name=None, timeout=None, **kwargs): - """ - Delete entities with an expression condition. - And return results to show how many entities will be deleted. - - :param expr: The expression to specify entities to be deleted - :type expr: str - - :param partition_name: Name of partitions that contain entities - :type partition_name: str - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :return: A MutationResult object contains a property named `delete_count` represents how many - entities will be deleted. - :rtype: MutationResult - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + conn = self._get_connection() + if is_row_based(data): + return conn.insert_rows( + collection_name=self._name, + entities=data, + partition_name=partition_name, + timeout=timeout, + schema=self._schema_dict, + **kwargs, + ) + + check_insert_schema(self.schema, data) + entities = Prepare.prepare_data(data, self.schema) + return conn.batch_insert( + self._name, + entities, + partition_name, + timeout=timeout, + schema=self._schema_dict, + **kwargs, + ) + + def delete( + self, + expr: str, + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Delete entities with an expression condition. + + Args: + expr (``str``): The specified data to insert. + partition_names (``List[str]``): Name of partitions to delete entities. + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + **kwargs (``dict``): Optional search params + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + Returns: + MutationResult: + contains `delete_count` properties represents how many entities might be deleted. + + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> import random - >>> connections.connect() >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("film_date", DataType.INT64), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2), ... ]) - >>> collection = Collection("test_collection_query", schema) + >>> collection = Collection("test_collection_delete", schema) >>> # insert >>> data = [ ... [i for i in range(10)], @@ -582,83 +574,199 @@ def delete(self, expr, partition_name=None, timeout=None, **kwargs): ... [[random.random() for _ in range(2)] for _ in range(10)], ... ] >>> collection.insert(data) - >>> collection.num_entities - - >>> expr = "film_id in [ 0, 1 ]" - >>> res = collection.delete(expr) - >>> assert len(res) == 2 + >>> res = collection.delete("film_id in [ 0, 1 ]") >>> print(f"- Deleted entities: {res}") - Delete results: [0, 1] """ conn = self._get_connection() - res = conn.delete(self._name, expr, partition_name, timeout, **kwargs) + res = conn.delete(self._name, expr, partition_name, timeout=timeout, **kwargs) if kwargs.get("_async", False): return MutationFuture(res) return MutationResult(res) - def search(self, data, anns_field, param, limit, expr=None, partition_names=None, - output_fields=None, timeout=None, round_decimal=-1, **kwargs): + def upsert( + self, + data: Union[List, pd.DataFrame, Dict, utils.SparseMatrixInputType], + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> MutationResult: + """Upsert data into the collection. + + Args: + data (``list/tuple/pandas.DataFrame/sparse types``): The specified data to upsert + partition_name (``str``): The partition name which the data will be upserted at, + if partition name is not passed, then the data will be upserted + in default partition + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + **kwargs (``dict``): Optional upsert params + + * *partial_update* (``bool``, optional): Whether this is a partial update operation. + If True, only the specified fields will be updated while others remain unchanged + Default is False. + + Returns: + MutationResult: contains 2 properties `upsert_count`, and, `primary_keys` + `upsert_count`: how may entites have been upserted at Milvus, + `primary_keys`: list of primary keys of the upserted entities + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType + >>> import random + >>> schema = CollectionSchema([ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) + ... ]) + >>> collection = Collection("test_collection_upsert", schema) + >>> data = [ + ... [random.randint(1, 100) for _ in range(10)], + ... [[random.random() for _ in range(2)] for _ in range(10)], + ... ] + >>> res = collection.upsert(data) + >>> res.upsert_count + 10 """ - Conducts a vector similarity search with an optional boolean expression as filter. - - :param data: The vectors of search data, the length of data is number of query (nq), the - dim of every vector in data must be equal to vector field's of collection. - :type data: list[list[float]] - :param anns_field: The vector field used to search of collection. - :type anns_field: str - :param param: The parameters of search, such as ``nprobe``. - :type param: dict - :param limit: The max number of returned record, also known as ``topk``. - :type limit: int - :param expr: The boolean expression used to filter attribute. - :type expr: str - :param partition_names: The names of partitions to search. - :type partition_names: list[str] - :param output_fields: The fields to return in the search result, not supported now. - :type output_fields: list[str] - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - :param round_decimal: The specified number of decimal places of returned distance - :type round_decimal: int - :param kwargs: - * *_async* (``bool``) -- - Indicate if invoke asynchronously. When value is true, method returns a - SearchFuture object; otherwise, method returns results from server directly. - * *_callback* (``function``) -- - The callback function which is invoked after server response successfully. - It functions only if _async is set to True. - * *consistency_level* (``str/int``) -- - Which consistency level to use when searching in the collection. See details in - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter will overwrite the same parameter specified when user created the collection, - if no consistency level was specified, search will use the consistency level when you create the collection. - * *guarantee_timestamp* (``int``) -- - This function instructs Milvus to see all operations performed before a provided timestamp. If no - such timestamp is provided, then Milvus will search all operations performed to date. - Note: only used in Customized consistency level. - * *graceful_time* (``int``) -- - Only used in bounded consistency level. If graceful_time is set, PyMilvus will use current timestamp minus - the graceful_time as the `guarantee_timestamp`. This option is 5s by default if not set. - * *travel_timestamp* (``int``) -- - Users can specify a timestamp in a search to get results based on a data view - at a specified point in time. - - :return: SearchResult: SearchResult is iterable and is a 2d-array-like class, the first dimension is - the number of vectors to query (nq), the second dimension is the number of limit(topk). - :rtype: SearchResult - - :raises RpcError: If gRPC encounter an error. - :raises ParamError: If parameters are invalid. - :raises DataTypeNotMatchException: If wrong type of param is passed. - :raises BaseException: If the return result from server is not ok. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + + if not is_valid_insert_data(data): + raise DataTypeNotSupportException( + message="The type of data should be List, pd.DataFrame or Dict" + ) + + conn = self._get_connection() + if is_row_based(data): + res = conn.upsert_rows( + self._name, + data, + partition_name, + timeout=timeout, + schema=self._schema_dict, + **kwargs, + ) + return MutationResult(res) + + check_upsert_schema(self.schema, data) + entities = Prepare.prepare_data(data, self.schema, False) + res = conn.upsert( + self._name, + entities, + partition_name, + timeout=timeout, + schema=self._schema_dict, + **kwargs, + ) + + return MutationFuture(res) if kwargs.get("_async", False) else MutationResult(res) + + def search( + self, + data: Union[List, utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + limit: int, + expr: Optional[str] = None, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + round_decimal: int = -1, + ranker: Optional[Union[Function, FunctionScore]] = None, + **kwargs, + ): + """Conducts a vector similarity search with an optional boolean expression as filter. + + Args: + data (``List[List[float]]/sparse types``): The vectors of search data. + the length of data is number of query (nq), + and the dim of every vector in data must be equal to the vector field of collection. + anns_field (``str``): The name of the vector field used to search of collection. + param (``dict[str, Any]``): + The parameters of search. The followings are valid keys of param. + * *metric_type* (``str``) + similar metricy types, the value must be of type str. + * *offset* (``int``, optional) + offset for pagination. + * *params of index: *nprobe*, *ef*, *search_k*, etc + Corresponding search params for a certain index. + example for param:: + + { + "metric_type": "L2", + "offset": 10, + "params": {"nprobe": 12}, + } + + limit (``int``): The max number of returned record, also known as `topk`. + expr (``str``, Optional): The boolean expression used to filter attribute. + + example for expr:: + + "id_field >= 0", "id_field in [1, 2, 3, 4]" + + partition_names (``List[str]``, optional): The names of partitions to search on. + output_fields (``List[str]``, optional): + The name of fields to return in the search result. + round_decimal (``int``, optional): + The specified number of decimal places of returned distance. + Defaults to -1 means no round to returned distance. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + ranker (``Function``, ``FunctionScore``, optional): The ranker to use for the search. + **kwargs (``dict``): Optional search params + + * *_async* (``bool``, optional) + Indicate if invoke asynchronously. + Returns a SearchFuture if True, else returns results from server directly. + + * *_callback* (``function``, optional) + The callback function which is invoked after server response successfully. + It functions only if _async is set to True. + + * *offset* (``int``, optinal) + offset for pagination. + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + * *guarantee_timestamp* (``int``, optional) + Instructs Milvus to see all operations performed before this timestamp. + By default Milvus will search all operations performed to date. + + Note: only valid in Customized consistency level. + + * *graceful_time* (``int``, optional) + Search will use the (current_timestamp - the graceful_time) as the + `guarantee_timestamp`. By default with 5s. + + Note: only valid in Bounded consistency level + + Returns: + SearchResult: + Returns ``SearchResult`` if `_async` is False , otherwise ``SearchFuture`` + + .. _Metric type documentations: + https://milvus.io/docs/v2.2.x/metric.md + .. _Index documentations: + https://milvus.io/docs/v2.2.x/index.md + .. _How guarantee ts works: + https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> import random - >>> connections.connect() - >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -670,14 +778,14 @@ def search(self, data, anns_field, param, limit, expr=None, partition_names=None ... [[random.random() for _ in range(2)] for _ in range(10)], ... ] >>> collection.insert(data) - >>> collection.num_entities - 10 + >>> index_param = {"index_type": "FLAT", "metric_type": "L2", "params": {}} + >>> collection.create_index("films", index_param) >>> collection.load() >>> # search >>> search_param = { ... "data": [[1.0, 1.0]], ... "anns_field": "films", - ... "param": {"metric_type": "L2"}, + ... "param": {"metric_type": "L2", "offset": 1}, ... "limit": 2, ... "expr": "film_id > 0", ... } @@ -687,66 +795,271 @@ def search(self, data, anns_field, param, limit, expr=None, partition_names=None >>> assert len(hits) == 2 >>> print(f"- Total hits: {len(hits)}, hits ids: {hits.ids} ") - Total hits: 2, hits ids: [8, 5] - >>> print(f"- Top1 hit id: {hits[0].id}, distance: {hits[0].distance}, score: {hits[0].score} ") - - Top1 hit id: 8, distance: 0.10143111646175385, score: 0.10143111646175385 + >>> print(f"- Top1 hit id: {hits[0].id}, score: {hits[0].score} ") + - Top1 hit id: 8, score: 0.10143111646175385 """ if expr is not None and not isinstance(expr, str): - raise DataTypeNotMatchException(0, ExceptionsMessage.ExprType % type(expr)) + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(expr)) - conn = self._get_connection() - res = conn.search(self._name, data, anns_field, param, limit, expr, - partition_names, output_fields, timeout, round_decimal, **kwargs) - if kwargs.get("_async", False): - return SearchFuture(res) - return SearchResult(res) + empty_scipy_sparse = utils.SciPyHelper.is_scipy_sparse(data) and (data.shape[0] == 0) + if (isinstance(data, list) and len(data) == 0) or empty_scipy_sparse: + resp = SearchResult(schema_pb2.SearchResultData()) + return SearchFuture(None) if kwargs.get("_async", False) else resp - def query(self, expr, output_fields=None, partition_names=None, timeout=None, **kwargs): + conn = self._get_connection() + resp = conn.search( + self._name, + data, + anns_field, + param, + limit, + expr, + partition_names, + output_fields, + round_decimal, + timeout=timeout, + schema=self._schema_dict, + ranker=ranker, + **kwargs, + ) + + return SearchFuture(resp) if kwargs.get("_async", False) else resp + + def hybrid_search( + self, + reqs: List, + rerank: BaseRanker, + limit: int, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + round_decimal: int = -1, + ranker: Optional[Function] = None, + **kwargs, + ): + """Conducts multi vector similarity search with a rerank for rearrangement. + + Args: + reqs (``List[AnnSearchRequest]``): The vector search requests. + rerank (``BaseRanker``): The reranker for rearrange nummer of limit results. + limit (``int``): The max number of returned record, also known as `topk`. + + partition_names (``List[str]``, optional): The names of partitions to search on. + output_fields (``List[str]``, optional): + The name of fields to return in the search result. + round_decimal (``int``, optional): + The specified number of decimal places of returned distance. + Defaults to -1 means no round to returned distance. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + ranker (``Function``, optional): The ranker to use for the search. + **kwargs (``dict``): Optional search params + + * *_async* (``bool``, optional) + Indicate if invoke asynchronously. + Returns a SearchFuture if True, else returns results from server directly. + + * *_callback* (``function``, optional) + The callback function which is invoked after server response successfully. + It functions only if _async is set to True. + + * *offset* (``int``, optinal) + offset for pagination. + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + * *guarantee_timestamp* (``int``, optional) + Instructs Milvus to see all operations performed before this timestamp. + By default Milvus will search all operations performed to date. + + Note: only valid in Customized consistency level. + + * *graceful_time* (``int``, optional) + Search will use the (current_timestamp - the graceful_time) as the + `guarantee_timestamp`. By default with 5s. + + Note: only valid in Bounded consistency level + + Returns: + SearchResult: + Returns ``SearchResult`` if `_async` is False , otherwise ``SearchFuture`` + + .. _Metric type documentations: + https://milvus.io/docs/v2.2.x/metric.md + .. _Index documentations: + https://milvus.io/docs/v2.2.x/index.md + .. _How guarantee ts works: + https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import (Collection, FieldSchema, CollectionSchema, DataType, + >>> AnnSearchRequest, RRFRanker, WeightedRanker) + >>> import random + >>> schema = CollectionSchema([ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2), + ... FieldSchema("poster", dtype=DataType.FLOAT_VECTOR, dim=2), + ... ]) + >>> collection = Collection("test_collection_search", schema) + >>> # insert + >>> data = [ + ... [i for i in range(10)], + ... [[random.random() for _ in range(2)] for _ in range(10)], + ... [[random.random() for _ in range(2)] for _ in range(10)], + ... ] + >>> collection.insert(data) + >>> index_param = {"index_type": "FLAT", "metric_type": "L2", "params": {}} + >>> collection.create_index("films", index_param) + >>> collection.create_index("poster", index_param) + >>> collection.load() + >>> # search + >>> search_param1 = { + ... "data": [[1.0, 1.0]], + ... "anns_field": "films", + ... "param": {"metric_type": "L2", "offset": 1}, + ... "limit": 2, + ... "expr": "film_id > 0", + ... } + >>> req1 = AnnSearchRequest(**search_param1) + >>> search_param2 = { + ... "data": [[2.0, 2.0]], + ... "anns_field": "poster", + ... "param": {"metric_type": "L2", "offset": 1}, + ... "limit": 2, + ... "expr": "film_id > 0", + ... } + >>> req2 = AnnSearchRequest(**search_param2) + >>> res = collection.hybrid_search([req1, req2], WeightedRanker(0.9, 0.1), 2) + >>> assert len(res) == 1 + >>> hits = res[0] + >>> assert len(hits) == 2 + >>> print(f"- Total hits: {len(hits)}, hits ids: {hits.ids} ") + - Total hits: 2, hits ids: [8, 5] + >>> print(f"- Top1 hit id: {hits[0].id}, score: {hits[0].score} ") + - Top1 hit id: 8, score: 0.10143111646175385 """ - Query with a set of criteria, and results in a list of records that match the query exactly. - - :param expr: The query expression - :type expr: str - - :param output_fields: A list of fields to return - :type output_fields: list[str] - - :param partition_names: Name of partitions that contain entities - :type partition_names: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :param kwargs: - * *consistency_level* (``str/int``) -- - Which consistency level to use during a query on the collection. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter will overwrite the same parameter specified when user created the collection, - if no consistency level was specified, query will use the consistency level when you create the collection. - * *guarantee_timestamp* (``int``) -- - This function instructs Milvus to see all operations performed before a provided timestamp. If no - such timestamp is specified, Milvus queries all operations performed to date. - Note: only used in Customized consistency level. - * *graceful_time* (``int``) -- - Only used in bounded consistency level. If graceful_time is set, PyMilvus will use current timestamp minus - the graceful_time as the `guarantee_timestamp`. This option is 5s by default if not set. - * *travel_timestamp* (``int``) -- - Users can specify a timestamp in a search to get results based on a data view - at a specified point in time. - - :return: A list that contains all results - :rtype: list - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises DataTypeNotMatchException: If wrong type of param is passed - :raises BaseException: If the return result from server is not ok - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + if isinstance(reqs, list) and len(reqs) == 0: + resp = SearchResult(schema_pb2.SearchResultData()) + return SearchFuture(None) if kwargs.get("_async", False) else resp + + conn = self._get_connection() + resp = conn.hybrid_search( + self._name, + reqs, + rerank, + limit, + partition_names, + output_fields, + round_decimal, + timeout=timeout, + schema=self._schema_dict, + ranker=ranker, + **kwargs, + ) + + return SearchFuture(resp) if kwargs.get("_async", False) else resp + + def search_iterator( + self, + data: Union[List, utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + batch_size: Optional[int] = 1000, + limit: Optional[int] = UNLIMITED, + expr: Optional[str] = None, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + round_decimal: int = -1, + **kwargs, + ): + if expr is not None and not isinstance(expr, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(expr)) + param["params"] = utils.get_params(param) + return SearchIterator( + connection=self._get_connection(), + collection_name=self._name, + data=data, + ann_field=anns_field, + param=param, + batch_size=batch_size, + limit=limit, + expr=expr, + partition_names=partition_names, + output_fields=output_fields, + timeout=timeout, + round_decimal=round_decimal, + schema=self._schema_dict, + **kwargs, + ) + + def query( + self, + expr: str, + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Query with expressions + + Args: + expr (``str``): The query expression. + output_fields(``List[str]``): A list of field names to return. Defaults to None. + partition_names: (``List[str]``, optional): A list of partition names to query in. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + **kwargs (``dict``, optional): + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + + * *guarantee_timestamp* (``int``, optional) + Instructs Milvus to see all operations performed before this timestamp. + By default Milvus will search all operations performed to date. + + Note: only valid in Customized consistency level. + + * *graceful_time* (``int``, optional) + Search will use the (current_timestamp - the graceful_time) as the + `guarantee_timestamp`. By default with 5s. + + Note: only valid in Bounded consistency level + + * *offset* (``int``) + Combined with limit to enable pagination + + * *limit* (``int``) + Combined with limit to enable pagination + + Returns: + List, contains all results + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> import random - >>> connections.connect() - >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("film_date", DataType.INT64), @@ -760,37 +1073,64 @@ def query(self, expr, output_fields=None, partition_names=None, timeout=None, ** ... [[random.random() for _ in range(2)] for _ in range(10)], ... ] >>> collection.insert(data) - >>> collection.num_entities - 10 + >>> index_param = {"index_type": "FLAT", "metric_type": "L2", "params": {}} + >>> collection.create_index("films", index_param) >>> collection.load() >>> # query - >>> expr = "film_id in [ 0, 1 ]" - >>> res = collection.query(expr, output_fields=["film_date"]) - >>> assert len(res) == 2 + >>> expr = "film_id <= 1" + >>> res = collection.query(expr, output_fields=["film_date"], offset=1, limit=1) + >>> assert len(res) == 1 >>> print(f"- Query results: {res}") - - Query results: [{'film_id': 0, 'film_date': 2000}, {'film_id': 1, 'film_date': 2001}] + - Query results: [{'film_id': 1, 'film_date': 2001}] """ if not isinstance(expr, str): - raise DataTypeNotMatchException(0, ExceptionsMessage.ExprType % type(expr)) + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(expr)) conn = self._get_connection() - res = conn.query(self._name, expr, output_fields, partition_names, timeout, **kwargs) - return res + return conn.query( + self._name, + expr, + output_fields, + partition_names, + timeout=timeout, + schema=self._schema_dict, + **kwargs, + ) + + def query_iterator( + self, + batch_size: Optional[int] = 1000, + limit: Optional[int] = UNLIMITED, + expr: Optional[str] = None, + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + if expr is not None and not isinstance(expr, str): + raise DataTypeNotMatchException(message=ExceptionsMessage.ExprType % type(expr)) + return QueryIterator( + connection=self._get_connection(), + collection_name=self._name, + batch_size=batch_size, + limit=limit, + expr=expr, + output_fields=output_fields, + partition_names=partition_names, + schema=self._schema_dict, + timeout=timeout, + **kwargs, + ) @property - def partitions(self) -> list: - """ - Return all partitions of the collection. - - :return list[Partition]: - List of Partition object, return when operation is successful. + def partitions(self) -> List[Partition]: + """List[Partition]: List of Partition object. - :raises CollectionNotExistException: If collection doesn't exist. + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -806,23 +1146,20 @@ def partitions(self) -> list: partitions.append(Partition(self, partition, construct_only=True)) return partitions - def partition(self, partition_name) -> Partition: - """ - Return the partition corresponding to name. Return None if not existed. + def partition(self, partition_name: str, **kwargs) -> Partition: + """Get the existing partition object according to name. Return None if not existed. - :param partition_name: The name of the partition to get. - :type partition_name: str + Args: + partition_name (``str``): The name of the partition to get. - :return Partition: - Partition object corresponding to partition_name. + Returns: + Partition: Partition object corresponding to partition_name. - :raises CollectionNotExistException: If collection doesn't exist. - :raises BaseException: If partition doesn't exist. + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() - + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -830,65 +1167,57 @@ def partition(self, partition_name) -> Partition: >>> collection = Collection("test_collection_partition", schema) >>> collection.partition("_default") {"name": "_default", "description": "", "num_entities": 0} - >>> collection.partition("partition") - """ - if self.has_partition(partition_name) is False: + if not self.has_partition(partition_name, **kwargs): return None - return Partition(self, partition_name, construct_only=True) - - def create_partition(self, partition_name, description=""): - """ - Create the partition corresponding to name if not existed. + return Partition(self, partition_name, construct_only=True, **kwargs) - :param partition_name: The name of the partition to create. - :type partition_name: str + def create_partition(self, partition_name: str, description: str = "", **kwargs) -> Partition: + """Create a new partition corresponding to name if not existed. - :param description: The description of the partition corresponding to name. - :type description: str + Args: + partition_name (``str``): The name of the partition to create. + description (``str``, optional): The description of this partition. - :return Partition: - Partition object corresponding to partition_name. + Returns: + Partition: Partition object corresponding to partition_name. - :raises CollectionNotExistException: If collection doesn't exist. - :raises BaseException: If partition doesn't exist. + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) ... ]) - >>> collection = Collection("test_collection_create_partition", schema) + >>> collection = Collection("test_create_partition", schema) >>> collection.create_partition("comedy", description="comedy films") - {"name": "comedy", "description": "comedy films", "num_entities": 0} + {"name": "comedy", "collection_name": "test_create_partition", "description": ""} >>> collection.partition("comedy") - {"name": "partition", "description": "comedy films", "num_entities": 0} - """ - if self.has_partition(partition_name) is True: - raise PartitionAlreadyExistException(0, ExceptionsMessage.PartitionAlreadyExist) - return Partition(self, partition_name, description=description) - - def has_partition(self, partition_name, timeout=None) -> bool: + {"name": "comedy", "collection_name": "test_create_partition", "description": ""} """ - Checks if a specified partition exists. + if self.has_partition(partition_name, **kwargs) is True: + raise PartitionAlreadyExistException(message=ExceptionsMessage.PartitionAlreadyExist) + return Partition(self, partition_name, description=description, **kwargs) - :param partition_name: The name of the partition to check - :type partition_name: str + def has_partition(self, partition_name: str, timeout: Optional[float] = None, **kwargs) -> bool: + """Checks if a specified partition exists. - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + Args: + partition_name (``str``): The name of the partition to check. + timeout (``float``, optional): An optional duration of time in seconds to allow for + the RPC. When timeout is set to None, client waits until server + response or error occur. - :return bool: - Whether a specified partition exists. + Returns: + bool: True if exists, otherwise false. - :raises CollectionNotExistException: If collection doesn't exist. + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -902,26 +1231,22 @@ def has_partition(self, partition_name, timeout=None) -> bool: False """ conn = self._get_connection() - return conn.has_partition(self._name, partition_name, timeout=timeout) + return conn.has_partition(self._name, partition_name, timeout=timeout, **kwargs) - def drop_partition(self, partition_name, timeout=None, **kwargs): - """ - Drop the partition and its corresponding index files. - - :param partition_name: The name of the partition to drop. - :type partition_name: str + def drop_partition(self, partition_name: str, timeout: Optional[float] = None, **kwargs): + """Drop the partition in this collection. - :param timeout: - * *timeout* (``float``) -- - An optional duration of time in seconds to allow for the RPC. If timeout - is set to None, the client keeps waiting until the server responds or an error occurs. + Args: + partition_name (``str``): The name of the partition to drop. + timeout (``float``, optional): An optional duration of time in seconds to allow for + the RPC. When timeout is set to None, client waits until server response + or error occur. - :raises CollectionNotExistException: If collection doesn't exist. - :raises BaseException: If partition doesn't exist. + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -935,24 +1260,15 @@ def drop_partition(self, partition_name, timeout=None, **kwargs): >>> collection.has_partition("comedy") False """ - if self.has_partition(partition_name) is False: - raise PartitionNotExistException(0, ExceptionsMessage.PartitionNotExist) conn = self._get_connection() return conn.drop_partition(self._name, partition_name, timeout=timeout, **kwargs) @property - def indexes(self) -> list: - """ - Returns all indexes of the collection. + def indexes(self) -> List[Index]: + """List[Index]: list of indexes of this collection. - :return list[Index]: - List of Index objects, returned when this operation is successful. - - :raises CollectionNotExistException: If the collection does not exist. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -963,25 +1279,39 @@ def indexes(self) -> list: """ conn = self._get_connection() indexes = [] - tmp_index = conn.describe_index(self._name, "") - if tmp_index is not None: - field_name = tmp_index.pop("field_name", None) - indexes.append(Index(self, field_name, tmp_index, construct_only=True)) + tmp_index = conn.list_indexes(self._name) + for index in tmp_index: + if index is not None: + info_dict = {kv.key: kv.value for kv in index.params} + if info_dict.get("params"): + info_dict["params"] = json.loads(info_dict["params"]) + + index_info = Index( + collection=self, + field_name=index.field_name, + index_params=info_dict, + index_name=index.index_name, + construct_only=True, + ) + indexes.append(index_info) return indexes - def index(self) -> Index: - """ - Fetches the index object of the of the specified name. + def index(self, **kwargs) -> Index: + """Get the index object of index name. - :return Index: - Index object corresponding to index_name. + Args: + **kwargs (``dict``): + * *index_name* (``str``) + The name of index. If no index is specified, the default index name is used. - :raises CollectionNotExistException: If the collection does not exist. - :raises BaseException: If the specified index does not exist. + Returns: + Index: Index object corresponding to index_name. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Raises: + IndexNotExistException: If the index doesn't exists. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -995,66 +1325,122 @@ def index(self) -> Index: >>> collection.index() """ + copy_kwargs = copy.deepcopy(kwargs) + index_name = copy_kwargs.pop("index_name", Config.IndexName) conn = self._get_connection() - tmp_index = conn.describe_index(self._name, "") + tmp_index = conn.describe_index(self._name, index_name, **copy_kwargs) if tmp_index is not None: field_name = tmp_index.pop("field_name", None) - return Index(self, field_name, tmp_index, construct_only=True) - raise IndexNotExistException(0, ExceptionsMessage.IndexNotExist) - - def create_index(self, field_name, index_params, timeout=None, **kwargs) -> Index: - """ - Creates index for a specified field. Return Index Object. - - :param field_name: The name of the field to create an index for. - :type field_name: str - - :param index_params: The indexing parameters. - :type index_params: dict - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :raises CollectionNotExistException: If the collection does not exist. - :raises ParamError: If the index parameters are invalid. - :raises BaseException: If field does not exist. - :raises BaseException: If the index has been created. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + index_name = tmp_index.pop("index_name", index_name) + tmp_index.pop("total_rows") + tmp_index.pop("indexed_rows") + tmp_index.pop("pending_index_rows") + tmp_index.pop("state") + return Index(self, field_name, tmp_index, construct_only=True, index_name=index_name) + raise IndexNotExistException(message=ExceptionsMessage.IndexNotExist) + + def create_index( + self, + field_name: str, + index_params: Optional[Dict] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Creates index for a specified field, with a index name. + + Args: + field_name (``str``): The name of the field to create index + index_params (``dict``, optional): The parameters to index + * *index_type* (``str``) + "index_type" as the key, example values: "FLAT", "IVF_FLAT", etc. + + * *metric_type* (``str``) + "metric_type" as the key, examples values: "L2", "IP", "JACCARD". + + * *params* (``dict``) + "params" as the key, corresponding index params. + + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server + response or error occur. + index_name (``str``): The name of index which will be created, must be unique. + If no index name is specified, the default index name will be used. + + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) ... ]) >>> collection = Collection("test_collection_create_index", schema) - >>> index = {"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"} - >>> collection.create_index("films", index) + >>> index_params = { + ... "index_type": "IVF_FLAT", + ... "params": {"nlist": 128}, + ... "metric_type": "L2"} + >>> collection.create_index("films", index_params, index_name="idx") Status(code=0, message='') - >>> collection.index() - """ conn = self._get_connection() - return conn.create_index(self._name, field_name, index_params, - timeout=timeout, **kwargs) - - def has_index(self, timeout=None) -> bool: + return conn.create_index(self._name, field_name, index_params, timeout=timeout, **kwargs) + + def alter_index( + self, + index_name: str, + extra_params: dict, + timeout: Optional[float] = None, + ): + """Alter index for a specified field, with a index name. + Args: + index_name (``str``): The name of the index to alter + extra_params (``dict``): The parameters to index + * *mmap.enabled* (``str``) + "mmap.enabled" as the key, example values: True or False. + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server + response or error occur. + Raises: + MilvusException: If anything goes wrong. + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType + >>> from pymilvus import IndexType, MetricType + >>> schema = CollectionSchema([ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("title", DataType.STRING), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) + ... ]) + >>> collection = Collection("test_collection_alter_index", schema) + >>> index_params = { + ... "index_type": IndexType.IVF_FLAT, + ... "metric_type": MetricType.L2, + ... "params": {"nlist": 128} + ... } + >>> collection.create_index("films", index_params, index_name="idx") + Status(code=0, message='') + >>> collection.alter_index_properties("idx", {"mmap.enabled": True}) """ - Checks whether a specified index exists. + conn = self._get_connection() + return conn.alter_index_properties(self._name, index_name, extra_params, timeout=timeout) - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + def has_index(self, timeout: Optional[float] = None, **kwargs) -> bool: + """Check whether a specified index exists. - :return bool: - Whether the specified index exists. + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. - :raises CollectionNotExistException: If the collection does not exist. + **kwargs (``dict``): + * *index_name* (``str``) + The name of index. If no index is specified, the default index name will be used. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Returns: + bool: Whether the specified index exists. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -1066,27 +1452,29 @@ def has_index(self, timeout=None) -> bool: True """ conn = self._get_connection() - # TODO(yukun): Need field name, but provide index name - if conn.describe_index(self._name, "", timeout=timeout) is None: - return False - return True + copy_kwargs = copy.deepcopy(kwargs) + index_name = copy_kwargs.pop("index_name", Config.IndexName) - def drop_index(self, timeout=None, **kwargs): - """ - Drop index and its corresponding index files. + return ( + conn.describe_index(self._name, index_name, timeout=timeout, **copy_kwargs) is not None + ) - :param timeout: - * *timeout* (``float``) -- - An optional duration of time in seconds to allow for the RPC. If timeout - is set to None, the client keeps waiting until the server responds or an error occurs. - Optional. A duration of time in seconds. + def drop_index(self, timeout: Optional[float] = None, **kwargs): + """Drop index and its corresponding index files. + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. - :raises CollectionNotExistException: If the collection does not exist. - :raises BaseException: If the index does not exist or has been dropped. + **kwargs (``dict``): + * *index_name* (``str``) + The name of index. If no index is specified, the default index name will be used. - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus Collection, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -1100,73 +1488,126 @@ def drop_index(self, timeout=None, **kwargs): >>> collection.has_index() False """ - if self.has_index() is False: - raise IndexNotExistException(0, ExceptionsMessage.IndexNotExist) + copy_kwargs = copy.deepcopy(kwargs) + index_name = copy_kwargs.pop("index_name", Config.IndexName) conn = self._get_connection() - tmp_index = conn.describe_index(self._name, "") + tmp_index = conn.describe_index(self._name, index_name, timeout=timeout, **copy_kwargs) if tmp_index is not None: - index = Index(self, tmp_index['field_name'], tmp_index, construct_only=True) - index.drop(timeout=timeout, **kwargs) - - def compact(self, timeout=None, **kwargs): - """ - Compact merge the small segments in a collection - - :param collection_name: The name of the collection. - :type collection_name: str. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :raises BaseException: If the collection does not exist. - - :example: + conn.drop_index( + collection_name=self._name, + field_name=tmp_index["field_name"], + index_name=index_name, + timeout=timeout, + **copy_kwargs, + ) + + def compact( + self, is_clustering: Optional[bool] = False, timeout: Optional[float] = None, **kwargs + ): + """Compact merge the small segments in a collection + + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + is_clustering (``bool``, optional): Option to trigger clustering compaction. + + Raises: + MilvusException: If anything goes wrong. """ conn = self._get_connection() - self.compaction_id = conn.compact(self._name, timeout=timeout, **kwargs) + if is_clustering: + self.clustering_compaction_id = conn.compact( + self._name, is_clustering=is_clustering, timeout=timeout, **kwargs + ) + else: + self.compaction_id = conn.compact( + self._name, is_clustering=is_clustering, timeout=timeout, **kwargs + ) - def get_compaction_state(self, timeout=None, **kwargs) -> CompactionState: - """ - get_compaction_state returns the current collection's compaction state + def get_compaction_state( + self, timeout: Optional[float] = None, is_clustering: Optional[bool] = False, **kwargs + ) -> CompactionState: + """Get the current compaction state - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. - :raises BaseException: If the collection does not exist. + is_clustering (``bool``, optional): Option to get clustering compaction state. - :example: + Raises: + MilvusException: If anything goes wrong. """ conn = self._get_connection() + if is_clustering: + return conn.get_compaction_state( + self.clustering_compaction_id, timeout=timeout, **kwargs + ) return conn.get_compaction_state(self.compaction_id, timeout=timeout, **kwargs) - def wait_for_compaction_completed(self, timeout=None, **kwargs) -> CompactionState: - """ - Block until the current collection's compaction completed + def wait_for_compaction_completed( + self, + timeout: Optional[float] = None, + is_clustering: Optional[bool] = False, + **kwargs, + ) -> CompactionState: + """Block until the current collection's compaction completed - :param timeout: The timeout for this method, unit: second - when timeout is set to None, client waits until compaction completed or error occur - :type timeout: float + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. - :raises BaseException: If the time is up and the compression has not been completed + is_clustering (``bool``, optional): Option to get clustering compaction state. - :example: + Raises: + MilvusException: If anything goes wrong. """ conn = self._get_connection() - return conn.wait_for_compaction_completed(self.compaction_id, timeout, **kwargs) - - def get_compaction_plans(self, timeout=None, **kwargs) -> CompactionPlans: + if is_clustering: + return conn.wait_for_compaction_completed( + self.clustering_compaction_id, timeout=timeout, **kwargs + ) + return conn.wait_for_compaction_completed(self.compaction_id, timeout=timeout, **kwargs) + + def get_compaction_plans( + self, timeout: Optional[float] = None, is_clustering: Optional[bool] = False, **kwargs + ) -> CompactionPlans: + """Get the current compaction plans + + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + + is_clustering (``bool``, optional): Option to get clustering compaction plan. + + Returns: + CompactionPlans: All the plans' states of this compaction. """ - get_compaction_state returns the current collection's compaction state - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + conn = self._get_connection() + if is_clustering: + return conn.get_compaction_plans( + self.clustering_compaction_id, timeout=timeout, **kwargs + ) + return conn.get_compaction_plans(self.compaction_id, timeout=timeout, **kwargs) - :raises BaseException: If the collection does not exist. + def get_replicas(self, timeout: Optional[float] = None, **kwargs) -> Replica: + """Get the current loaded replica information - :example: + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur. + Returns: + Replica: All the replica information. """ conn = self._get_connection() - return conn.get_compaction_plans(self.compaction_id, timeout=timeout, **kwargs) + return conn.get_replicas(self.name, timeout=timeout, **kwargs) + + def describe(self, timeout: Optional[float] = None): + conn = self._get_connection() + return conn.describe_collection(self.name, timeout=timeout) diff --git a/pymilvus/orm/connections.py b/pymilvus/orm/connections.py index e3b9de030..bbae847e1 100644 --- a/pymilvus/orm/connections.py +++ b/pymilvus/orm/connections.py @@ -11,15 +11,28 @@ # the License. import copy +import logging +import pathlib import threading +from typing import Callable, Tuple, Union +from urllib import parse -from ..client.grpc_handler import GrpcHandler +from pymilvus.client.async_grpc_handler import AsyncGrpcHandler +from pymilvus.client.check import is_legal_address, is_legal_host, is_legal_port +from pymilvus.client.grpc_handler import GrpcHandler, ReconnectHandler +from pymilvus.exceptions import ( + ConnectionConfigException, + ConnectionNotExistException, + ExceptionsMessage, +) +from pymilvus.settings import Config -from .default_config import DefaultConfig -from .exceptions import ExceptionsMessage, ConnectionConfigException, ConnectionNotExistException +logger = logging.getLogger(__name__) +VIRTUAL_PORT = 443 -def synchronized(func): + +def synchronized(func: Callable): """ Decorator in order to achieve thread-safe singleton class. """ @@ -35,7 +48,7 @@ def lock_func(*args, **kwargs): class SingleInstanceMetaClass(type): instance = None - def __init__(cls, *args, **kwargs): + def __init__(cls, *args, **kwargs) -> None: super().__init__(*args, **kwargs) def __call__(cls, *args, **kwargs): @@ -51,130 +64,391 @@ def __new__(cls, *args, **kwargs): class Connections(metaclass=SingleInstanceMetaClass): - """ - Class for managing all connections of milvus. - Used as a singleton in this module. - """ + """Class for managing all connections of milvus. Used as a singleton in this module.""" + + def __init__(self) -> None: + """Constructs a default milvus alias config + + default config will be read from env: MILVUS_URI and MILVUS_CONN_ALIAS + with default value: default="localhost:19530" + + Read default connection config from environment variable: MILVUS_URI. + Format is: + [scheme://][@]host[:] + + scheme is one of: http, https, or + + Examples: + localhost + localhost:19530 + test_user@localhost:19530 + http://test_userlocalhost:19530 + https://test_user:password@localhost:19530 - def __init__(self): - """ - Construct a Connections object. """ - self._kwargs = {"default": {"host": DefaultConfig.DEFAULT_HOST, - "port": DefaultConfig.DEFAULT_PORT}} - self._conns = {} + self._alias_config = {} + self._alias_handlers = {} + self._env_uri = None + + if Config.MILVUS_URI != "": + address, parsed_uri = self.__parse_address_from_uri(Config.MILVUS_URI) + self._env_uri = (address, parsed_uri) + + default_conn_config = { + "user": parsed_uri.username if parsed_uri.username is not None else "", + "address": address, + } + else: + default_conn_config = { + "user": "", + "address": f"{Config.DEFAULT_HOST}:{Config.DEFAULT_PORT}", + } + + self.add_connection(**{Config.MILVUS_CONN_ALIAS: default_conn_config}) + + def __verify_host_port(self, host: str, port: Union[int, str]): + if not is_legal_host(host): + raise ConnectionConfigException(message=ExceptionsMessage.HostType) + if not is_legal_port(port): + raise ConnectionConfigException(message=ExceptionsMessage.PortType) + if not 0 <= int(port) < 65535: + msg = f"port number {port} out of range, valid range [0, 65535)" + raise ConnectionConfigException(message=msg) + + def __parse_address_from_uri(self, uri: str) -> (str, parse.ParseResult): + illegal_uri_msg = ( + "Illegal uri: [{}], expected form 'http[s]://[user:password@]example.com[:12345]'" + ) + try: + parsed_uri = parse.urlparse(uri) + except Exception as e: + raise ConnectionConfigException( + message=f"{illegal_uri_msg.format(uri)}: <{type(e).__name__}, {e}>" + ) from None + + if len(parsed_uri.netloc) == 0: + raise ConnectionConfigException(message=f"{illegal_uri_msg.format(uri)}") from None + + host = parsed_uri.hostname if parsed_uri.hostname is not None else Config.DEFAULT_HOST + default_port = "443" if parsed_uri.scheme == "https" else Config.DEFAULT_PORT + port = parsed_uri.port if parsed_uri.port is not None else default_port + addr = f"{host}:{port}" + + self.__verify_host_port(host, port) + + if not is_legal_address(addr): + raise ConnectionConfigException(message=illegal_uri_msg.format(uri)) + + return addr, parsed_uri def add_connection(self, **kwargs): - """ - Configures a milvus connection. + """Configures a milvus connection. + + Addresses priority in kwargs: address, uri, host and port + + :param kwargs: + * *address* (``str``) -- Optional. The actual address of Milvus instance. + Example address: "localhost:19530" + + * *uri* (``str``) -- Optional. The uri of Milvus instance. + Example uri: "http://localhost:19530", "tcp:localhost:19530", "https://ok.s3.south.com:19530". + + * *host* (``str``) -- Optional. The host of Milvus instance. + Default at "localhost", PyMilvus will fill in the default host + if only port is provided. + + * *port* (``str/int``) -- Optional. The port of Milvus instance. + Default at 19530, PyMilvus will fill in the default port if only host is provided. Example:: connections.add_connection( default={"host": "localhost", "port": "19530"}, - dev={"host": "localhost", "port": "19531"}, + dev1={"host": "localhost", "port": "19531"}, + dev2={"uri": "http://random.com/random"}, + dev3={"uri": "http://localhost:19530"}, + dev4={"uri": "tcp://localhost:19530"}, + dev5={"address": "localhost:19530"}, + prod={"uri": "http://random.random.random.com:19530"}, ) - - The above example creates two milvus connections named default and dev. """ - for k in kwargs: - if k in self._conns: - if self._kwargs.get(k, None) != kwargs.get(k, None): - raise ConnectionConfigException(0, ExceptionsMessage.ConnDiffConf % k) - if "host" not in kwargs.get(k, {}) or "port" not in kwargs.get(k, {}): - raise ConnectionConfigException(0, ExceptionsMessage.NoHostPort) + for alias, config in kwargs.items(): + addr, parsed_uri = self.__get_full_address( + config.get("address", ""), + config.get("uri", ""), + config.get("host", ""), + config.get("port", ""), + ) - if not isinstance(kwargs.get(k)["host"], str): - raise ConnectionConfigException(0, ExceptionsMessage.HostType) - if not isinstance(kwargs.get(k)["port"], (str, int)): - raise ConnectionConfigException(0, ExceptionsMessage.PortType) + if alias in self._alias_handlers and self._alias_config[alias].get("address") != addr: + raise ConnectionConfigException(message=ExceptionsMessage.ConnDiffConf % alias) + + alias_config = { + "address": addr, + "user": config.get("user", ""), + } + + if parsed_uri is not None and parsed_uri.scheme == "https": + alias_config["secure"] = True + + self._alias_config[alias] = alias_config + + def __get_full_address( + self, + address: str = "", + uri: str = "", + host: str = "", + port: str = "", + ) -> (str, parse.ParseResult): + if address != "": + if not is_legal_address(address): + raise ConnectionConfigException( + message=f"Illegal address: {address}, should be in form 'localhost:19530'" + ) + return address, None + + if uri != "": + if isinstance(uri, str) and uri.startswith("unix:"): + return uri, None + address, parsed = self.__parse_address_from_uri(uri) + return address, parsed + + _host = host if host != "" else Config.DEFAULT_HOST + _port = port if port != "" else Config.DEFAULT_PORT + self.__verify_host_port(_host, _port) + + addr = f"{_host}:{_port}" + if not is_legal_address(addr): + raise ConnectionConfigException( + message=f"Illegal host: {host} or port: {port}, should be in form of '111.1.1.1', '19530'" + ) - self._kwargs[k] = kwargs.get(k, None) + return addr, None def disconnect(self, alias: str): - """ - Disconnects connection from the registry. + """Disconnects connection from the registry. :param alias: The name of milvus connection :type alias: str """ if not isinstance(alias, str): - raise ConnectionConfigException(0, ExceptionsMessage.AliasType % type(alias)) + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) + + if alias in self._alias_handlers: + self._alias_handlers.pop(alias).close() + + async def async_disconnect(self, alias: str): + if not isinstance(alias, str): + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) + + if alias in self._alias_handlers: + await self._alias_handlers.pop(alias).close() - if alias in self._conns: - self._conns.pop(alias).close() + async def async_remove_connection(self, alias: str): + await self.async_disconnect(alias) + self._alias_config.pop(alias, None) def remove_connection(self, alias: str): - """ - Removes connection from the registry. + """Removes connection from the registry. :param alias: The name of milvus connection :type alias: str """ if not isinstance(alias, str): - raise ConnectionConfigException(0, ExceptionsMessage.AliasType % type(alias)) + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) self.disconnect(alias) - self._kwargs.pop(alias, None) - - def connect(self, alias=DefaultConfig.DEFAULT_USING, **kwargs): - """ - Constructs a milvus connection and register it under given alias. - - :param alias: The name of milvus connection - :type alias: str + self._alias_config.pop(alias, None) + + def connect( + self, + alias: str = Config.MILVUS_CONN_ALIAS, + user: str = "", + password: str = "", + db_name: str = "default", + token: str = "", + _async: bool = False, + **kwargs, + ) -> None: + """Constructs a milvus connection and register it under given alias. + + Args: + alias (str): Default to "default". The name of connection. Each alias corresponds to one + connection. + user (str, Optional): The user of milvus server. + password (str, Optional): The password of milvus server. + token (str, Optional): Serving as the key for authentication. + db_name (str): The database name of milvus server. + timeout (float, Optional) The timeout for the connection. Default is 10 seconds. + Unit: second + + **kwargs: + * address (str, Optional) -- The actual address of Milvus instance. + Example: "localhost:19530" + * uri (str, Recommanded) -- The uri of Milvus instance. + Example uri: "http://localhost:19530", "tcp:localhost:19530", "https://ok.s3.south.com:19530". + * host (str, Optional) -- The host of Milvus instance. Default at "localhost", + PyMilvus will fill in the default host if only port is provided. + * port (str/int, Optional) -- The port of Milvus instance. Default at 19530, + PyMilvus will fill in the default port if only host is provided. + * keep_alive (bool, Optional) -- Default is false. If set to true, + client will keep an alive connection. + * secure (bool, Optional) -- Default is false. If set to true, tls will be enabled. + If use "https://" scheme in uri, secure will be true. + * client_key_path (str, Optional) -- Needed when use tls two-way authentication. + * client_pem_path (str, Optional) -- Needed when use tls two-way authentication. + * ca_pem_path (str, Optional) -- Needed when use tls two-way authentication. + * server_pem_path (str, Optional) -- Needed when use tls one-way authentication. + * server_name (str, Optional) -- Needed when enabled tls. + + Example: + >>> from pymilvus import connections + >>> connections.connect("test", uri="http://localhost:19530", token="abcdefg") - :raises NotImplementedError: If handler in connection parameters is not GRPC. - :raises ParamError: If pool in connection parameters is not supported. - :raises Exception: If server specified in parameters is not ready, we cannot connect to - server. + Raises: + ConnectionConfigException: If connection parameters are illegal. + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections - >>> connections.connect("test", host="localhost", port="19530") """ - if not isinstance(alias, str): - raise ConnectionConfigException(0, ExceptionsMessage.AliasType % type(alias)) + if kwargs.get("uri") and parse.urlparse(kwargs["uri"]).scheme.lower() not in [ + "unix", + "http", + "https", + "tcp", + "grpc", + ]: + # start milvuslite + if not kwargs["uri"].endswith(".db"): + raise ConnectionConfigException( + message=f"uri: {kwargs['uri']} is illegal, needs start with [unix, http, https, tcp] or a local file endswith [.db]" + ) + logger.info(f"Pass in the local path {kwargs['uri']}, and run it using milvus-lite") + parent_path = pathlib.Path(kwargs["uri"]).parent + if not parent_path.is_dir(): + raise ConnectionConfigException( + message=f"Open local milvus failed, dir: {parent_path} not exists" + ) + + # ruff: noqa: PLC0415 + try: + from milvus_lite.server_manager import ( + server_manager_instance, + ) + except ImportError as e: + raise ConnectionConfigException( + message="milvus-lite is required for local database connections. " + "Please install it with: pip install pymilvus[milvus_lite]" + ) from e + + local_uri = server_manager_instance.start_and_get_uri(kwargs["uri"]) + if local_uri is None: + raise ConnectionConfigException(message="Open local milvus failed") + kwargs["uri"] = local_uri + + # kwargs_copy is used for auto reconnect + kwargs_copy = copy.deepcopy(kwargs) + kwargs_copy["user"] = user + kwargs_copy["password"] = password + kwargs_copy["db_name"] = db_name + kwargs_copy["token"] = token def connect_milvus(**kwargs): - tmp_kwargs = copy.deepcopy(kwargs) - tmp_host = tmp_kwargs.pop("host", None) - tmp_port = tmp_kwargs.pop("port", None) - gh = GrpcHandler(host=str(tmp_host), port=str(tmp_port), **tmp_kwargs) - gh._wait_for_channel_ready() - return gh - if alias in self._conns: - if len(kwargs) > 0 and self._kwargs[alias] != kwargs: - raise ConnectionConfigException(0, ExceptionsMessage.ConnDiffConf % alias) - # return self._conns[alias] + gh = GrpcHandler(**kwargs) if not _async else AsyncGrpcHandler(**kwargs) + config_to_keep = { + k: v + for k, v in kwargs.items() + if k not in ["password", "token", "db_name", "keep_alive"] + } + self._alias_handlers[alias] = gh + self._alias_config[alias] = config_to_keep + + t = kwargs.get("timeout") + timeout = t if isinstance(t, (int, float)) else Config.MILVUS_CONN_TIMEOUT + + if not _async: + try: + gh._wait_for_channel_ready(timeout=timeout) + + if kwargs.pop("keep_alive", False): + gh.register_reconnect_handler(ReconnectHandler(self, alias, kwargs_copy)) + except Exception as e: + self.remove_connection(alias) + raise e from e + + def with_config(config: Tuple) -> bool: + return any(c != "" for c in config) + + if not isinstance(alias, str): + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) + + config = ( + kwargs.pop("address", ""), + kwargs.pop("uri", ""), + kwargs.pop("host", ""), + kwargs.pop("port", ""), + ) + + # Make sure passed in None doesnt break + user, password, token = str(user) or "", str(password) or "", str(token) or "" + + # 1st Priority: connection from params + if with_config(config): + addr, parsed_uri = self.__get_full_address(*config) + kwargs["address"] = addr + + if self.has_connection(alias) and self._alias_config[alias].get("address") != addr: + raise ConnectionConfigException(message=ExceptionsMessage.ConnDiffConf % alias) + + if parsed_uri is not None: + # Extract user and password from uri + user = parsed_uri.username or user + password = parsed_uri.password or password + + # Extract db_name from URI path only if appropriate + # Priority: + # 1. If db_name is explicitly provided and not empty -> use it + # 2. If db_name is empty string and URI has path -> use URI path + # 3. If db_name is empty string and URI has no path -> use "default" + if db_name == "": + group = [segment for segment in parsed_uri.path.split("/") if segment] + # Use first path segment if group exists and fall back to "default" if empty + db_name = group[0] if group else "default" + # If db_name is not empty (including "default", "test_db", etc.), keep it as-is + + # Set secure=True if https scheme + if parsed_uri.scheme == "https": + kwargs["secure"] = True + + connect_milvus(**kwargs, user=user, password=password, token=token, db_name=db_name) return - if alias in self._kwargs: - if len(kwargs) > 0: - if "host" not in kwargs or "port" not in kwargs: - raise ConnectionConfigException(0, ExceptionsMessage.NoHostPort) - conn = connect_milvus(**kwargs) - self._kwargs[alias] = copy.deepcopy(kwargs) - self._conns[alias] = conn - return - # return conn - conn = connect_milvus(**self._kwargs[alias]) - self._conns[alias] = conn + # 2nd Priority, connection configs from env + if self._env_uri is not None: + addr, parsed_uri = self._env_uri + kwargs["address"] = addr + + user = parsed_uri.username if parsed_uri.username is not None else "" + password = parsed_uri.password if parsed_uri.password is not None else "" + + # Set secure=True if https scheme + if parsed_uri.scheme == "https": + kwargs["secure"] = True + + connect_milvus(**kwargs, user=user, password=password, db_name=db_name) return - # return conn - - if len(kwargs) > 0: - if "host" not in kwargs or "port" not in kwargs: - raise ConnectionConfigException(0, ExceptionsMessage.NoHostPort) - conn = connect_milvus(**kwargs) - self._kwargs[alias] = copy.deepcopy(kwargs) - self._conns[alias] = conn + + # 3rd Priority, connect to cached configs with provided user and password + if alias in self._alias_config: + connect_alias = dict(self._alias_config[alias].items()) + connect_alias["user"] = user + connect_milvus(**connect_alias, password=password, db_name=db_name, **kwargs) return - # return conn - raise ConnectionConfigException(0, ExceptionsMessage.ConnLackConf % alias) + + # No params, env, and cached configs for the alias + raise ConnectionConfigException(message=ExceptionsMessage.ConnLackConf % alias) def list_connections(self) -> list: - """ List names of all connections. + """List names of all connections. :return list: Names of all connections. @@ -183,9 +457,8 @@ def list_connections(self) -> list: >>> from pymilvus import connections >>> connections.connect("test", host="localhost", port="19530") >>> connections.list_connections() - // TODO [('default', None), ('test', )] """ - return [(k, self._conns.get(k, None)) for k in self._kwargs] + return [(k, self._alias_handlers.get(k, None)) for k in self._alias_config] def get_connection_addr(self, alias: str): """ @@ -202,51 +475,47 @@ def get_connection_addr(self, alias: str): >>> from pymilvus import connections >>> connections.connect("test", host="localhost", port="19530") >>> connections.list_connections() - [('default', None), ('test', )] >>> connections.get_connection_addr('test') {'host': 'localhost', 'port': '19530'} """ if not isinstance(alias, str): - raise ConnectionConfigException(0, ExceptionsMessage.AliasType % type(alias)) + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) - return self._kwargs.get(alias, {}) + return self._alias_config.get(alias, {}) def has_connection(self, alias: str) -> bool: - """ - Retrieves connection configure by alias. + """Check if connection named alias exists. :param alias: The name of milvus connection :type alias: str - :return dict: - The connection configure which of the name is alias. - If alias does not exist, return empty dict. + :return bool: + if the connection of name alias exists. :example: >>> from pymilvus import connections >>> connections.connect("test", host="localhost", port="19530") >>> connections.list_connections() - [('default', None), ('test', )] >>> connections.get_connection_addr('test') {'host': 'localhost', 'port': '19530'} """ if not isinstance(alias, str): - raise ConnectionConfigException(0, ExceptionsMessage.AliasType % type(alias)) - - return alias in self._conns + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) + return alias in self._alias_handlers - def _fetch_handler(self, alias=DefaultConfig.DEFAULT_USING) -> GrpcHandler: - """ Retrieves a GrpcHandler by alias. """ + def _fetch_handler( + self, alias: str = Config.MILVUS_CONN_ALIAS + ) -> Union[GrpcHandler, AsyncGrpcHandler]: + """Retrieves a GrpcHandler by alias.""" if not isinstance(alias, str): - raise ConnectionConfigException(0, ExceptionsMessage.AliasType % type(alias)) + raise ConnectionConfigException(message=ExceptionsMessage.AliasType % type(alias)) - conn = self._conns.get(alias, None) + conn = self._alias_handlers.get(alias, None) if conn is None: - raise ConnectionNotExistException(0, ExceptionsMessage.ConnectFirst) + raise ConnectionNotExistException(message=ExceptionsMessage.ConnectFirst) return conn # Singleton Mode in Python - connections = Connections() diff --git a/pymilvus/orm/constants.py b/pymilvus/orm/constants.py index 3644582ef..2fa8f4507 100644 --- a/pymilvus/orm/constants.py +++ b/pymilvus/orm/constants.py @@ -10,9 +10,15 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. -VECTOR_COMMON_TYPE_PARAMS = ("dim",) - - +COMMON_TYPE_PARAMS = ( + "dim", + "max_length", + "max_capacity", + "enable_match", + "enable_analyzer", + "analyzer_params", + "multi_analyzer_params", +) CALC_DIST_IDS = "ids" CALC_DIST_FLOAT_VEC = "float_vectors" @@ -20,7 +26,44 @@ CALC_DIST_METRIC = "metric" CALC_DIST_L2 = "L2" CALC_DIST_IP = "IP" +CALC_DIST_BM25 = "BM25" CALC_DIST_HAMMING = "HAMMING" CALC_DIST_TANIMOTO = "TANIMOTO" +CALC_DIST_JACCARD = "JACCARD" +CALC_DIST_COSINE = "COSINE" CALC_DIST_SQRT = "sqrt" CALC_DIST_DIM = "dim" + +OFFSET = "offset" +MILVUS_LIMIT = "limit" +BATCH_SIZE = "batch_size" +ID = "id" +TYPE = "type" +METRIC_TYPE = "metric_type" +PARAMS = "params" +DISTANCE = "distance" +RADIUS = "radius" +RANGE_FILTER = "range_filter" +FIELDS = "fields" +EF = "ef" +IS_PRIMARY = "is_primary" +REDUCE_STOP_FOR_BEST = "reduce_stop_for_best" +COLLECTION_ID = "collection_id" +ITERATOR_FIELD = "iterator" +ITERATOR_SESSION_TS_FIELD = "iterator_session_ts" +DEFAULT_MAX_L2_DISTANCE = 99999999.0 +DEFAULT_MIN_IP_DISTANCE = -99999999.0 +DEFAULT_MAX_HAMMING_DISTANCE = 99999999.0 +DEFAULT_MAX_TANIMOTO_DISTANCE = 99999999.0 +DEFAULT_MAX_JACCARD_DISTANCE = 2.0 +DEFAULT_MIN_COSINE_DISTANCE = -2.0 +MAX_FILTERED_IDS_COUNT_ITERATION = 100000 +INT64_MAX = 9223372036854775807 +MAX_BATCH_SIZE: int = 16384 +DEFAULT_SEARCH_EXTENSION_RATE: int = 10 +UNLIMITED: int = -1 +MAX_TRY_TIME: int = 20 +GUARANTEE_TIMESTAMP = "guarantee_timestamp" +ITERATOR_SESSION_CP_FILE = "iterator_cp_file" +BM25_k1 = "bm25_k1" +BM25_b = "bm25_b" diff --git a/pymilvus/orm/db.py b/pymilvus/orm/db.py new file mode 100644 index 000000000..5a9ea5002 --- /dev/null +++ b/pymilvus/orm/db.py @@ -0,0 +1,78 @@ +from typing import Optional + +from .connections import connections + + +def _get_connection(alias: str): + return connections._fetch_handler(alias) + + +def using_database(db_name: str, using: str = "default"): + """Using a database as a default database name within this connection + + :param db_name: Database name + :type db_name: str + + """ + _get_connection(using).reset_db_name(db_name) + + +def create_database( + db_name: str, using: str = "default", timeout: Optional[float] = None, **kwargs +): + """Create a database using provided database name + Args: + db_name (``str``): Database name + properties (``dict``): database properties. + support database replica number with key `database.replica.number` + support database resource groups with key `database.resource_groups` + """ + _get_connection(using).create_database(db_name, timeout=timeout, **kwargs) + + +def drop_database(db_name: str, using: str = "default", timeout: Optional[float] = None): + """Drop a database using provided database name + + :param db_name: Database name + :type db_name: str + + """ + _get_connection(using).drop_database(db_name, timeout=timeout) + + +def list_database(using: str = "default", timeout: Optional[float] = None) -> list: + """List databases + + :return list[str]: + List of database names, return when operation is successful + """ + return _get_connection(using).list_database(timeout=timeout) + + +def set_properties( + db_name: str, + properties: dict, + using: str = "default", + timeout: Optional[float] = None, +): + """Set properties for a database using provided database name + Args: + db_name (``str``): Database name + properties (``dict``): database properties. + support database replica number with key `database.replica.number` + support database resource groups with key `database.resource_groups` + """ + _get_connection(using).alter_database(db_name, properties=properties, timeout=timeout) + + +def describe_database(db_name: str, using: str = "default", timeout: Optional[float] = None): + """Describe a database using provided database name + + :param db_name: Database name + :type db_name: str + + :return dict: + Database information, return when operation is successful + + """ + return _get_connection(using).describe_database(db_name, timeout=timeout) diff --git a/pymilvus/orm/default_config.py b/pymilvus/orm/default_config.py deleted file mode 100644 index 1f9da8023..000000000 --- a/pymilvus/orm/default_config.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2019-2021 Zilliz. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. - - -class DefaultConfig: - DEFAULT_USING = "default" - DEFAULT_HOST = "localhost" - DEFAULT_PORT = "19530" diff --git a/pymilvus/orm/exceptions.py b/pymilvus/orm/exceptions.py deleted file mode 100644 index fe240726e..000000000 --- a/pymilvus/orm/exceptions.py +++ /dev/null @@ -1,212 +0,0 @@ -# Copyright (C) 2019-2021 Zilliz. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. - - -class ParamError(ValueError): - """ - Param of interface is illegal - """ - -class ResultError(ValueError): - """ - Result of interface is illegal - """ - -class ConnectError(ValueError): - """ - Connect server failed - """ - - -class NotConnectError(ConnectError): - """ - Disconnect error - """ - - -class RepeatingConnectError(ConnectError): - """ - Try to connect repeatedly - """ - - -class ConnectionPoolError(ConnectError): - """ - Waiting timeout error - """ - - -class FutureTimeoutError(TimeoutError): - """ - Future timeout - """ - - -class DeprecatedError(AttributeError): - """ - Deprecated - """ - - -class VersionError(AttributeError): - """ - Version not match - """ - - -class MilvusException(Exception): - - def __init__(self, code, message): - super(MilvusException, self).__init__(message) - self._code = code - self._message = message - - @property - def code(self): - return self._code - - @property - def message(self): - return self._message - - def __str__(self): - return f"<{type(self).__name__}: (code={self._code}, message={self._message})>" - - -class CollectionExistException(MilvusException): - pass - - -class CollectionNotExistException(MilvusException): - pass - - -class InvalidDimensionException(MilvusException): - pass - - -class InvalidMetricTypeException(MilvusException): - pass - - -class IllegalCollectionNameException(MilvusException): - pass - - -class DescribeCollectionException(MilvusException): - pass - - -class PartitionNotExistException(MilvusException): - pass - - -class PartitionAlreadyExistException(MilvusException): - pass - - -class InvalidArgumentException(MilvusException): - pass - - -class IndexConflictException(MilvusException): - pass - - -class IndexNotExistException(MilvusException): - pass - - -class CannotInferSchemaException(MilvusException): - pass - - -class SchemaNotReadyException(MilvusException): - pass - - -class DataTypeNotMatchException(MilvusException): - pass - - -class DataTypeNotSupportException(MilvusException): - pass - - -class DataNotMatchException(MilvusException): - pass - - -class ConnectionNotExistException(MilvusException): - pass - - -class ConnectionConfigException(MilvusException): - pass - - -class PrimaryKeyException(MilvusException): - pass - - -class FieldsTypeException(MilvusException): - pass - - -class FieldTypeException(MilvusException): - pass - - -class AutoIDException(MilvusException): - pass - - -class ExceptionsMessage: - NoHostPort = "connection configuration must contain 'host' and 'port'." - HostType = "Type of 'host' must be str." - PortType = "Type of 'port' must be str or int." - ConnDiffConf = "Alias of %r already creating connections, but the configure is not the same as passed in." - AliasType = "Alias should be string, but %r is given." - ConnLackConf = "You need to pass in the configuration of the connection named %r ." - ConnectFirst = "should create connect first." - CollectionNotExistNoSchema = "Collection %r not exist, or you can pass in schema to create one." - NoSchema = "Should be passed into the schema." - EmptySchema = "The field of the schema cannot be empty." - SchemaType = "Schema type must be schema.CollectionSchema." - SchemaInconsistent = "The collection already exist, but the schema is not the same as the schema passed in." - AutoIDWithData = "Auto_id is True, primary field should not have data." - AutoIDType = "Param auto_id must be bool type." - AutoIDInconsistent = "The auto_id of the collection is inconsistent with the auto_id of the primary key field." - AutoIDOnlyOnPK = "The auto_id can only be specified on the primary key field" - FieldsNumInconsistent = "The data fields number is not match with schema." - NoVector = "No vector field is found." - NoneDataFrame = "Dataframe can not be None." - DataFrameType = "Data type must be pandas.DataFrame." - NoPrimaryKey = "Schema must have a primary key field." - PrimaryKeyNotExist = "Primary field must in dataframe." - PrimaryKeyOnlyOne = "Primary key field can only be one." - PrimaryKeyType = "Primary key type must be DataType.INT64." - IsPrimaryType = "Param is_primary must be bool type." - DataTypeInconsistent = "The data in the same column must be of the same type." - DataTypeNotSupport = "Data type is not support." - DataLengthsInconsistent = "Arrays must all be same length." - DataFrameInvalid = "Cannot infer schema from empty dataframe." - NdArrayNotSupport = "Data type not support numpy.ndarray." - TypeOfDataAndSchemaInconsistent = "The types of schema and data do not match." - PartitionAlreadyExist = "Partition already exist." - PartitionNotExist = "Partition not exist." - IndexNotExist = "Index doesn't exist." - CollectionType = "The type of collection must be pymilvus.Collection." - FieldsType = "The fields of schema must be type list." - FieldType = "The field of schema type must be FieldSchema." - FieldDtype = "Field dtype must be of DataType" - ExprType = "The type of expr must be string ,but %r is given." diff --git a/pymilvus/orm/future.py b/pymilvus/orm/future.py index 8fef4df6b..32ca61f58 100644 --- a/pymilvus/orm/future.py +++ b/pymilvus/orm/future.py @@ -10,46 +10,56 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. +from typing import Any + +from pymilvus.client.search_result import SearchResult +from pymilvus.grpc_gen import schema_pb2 -from .search import SearchResult from .mutation import MutationResult # TODO(dragondriver): how could we inherit the docstring elegantly? class BaseFuture: - def __init__(self, future): - self._f = future + def __init__(self, future: Any) -> None: + self._f = future if future is not None else _EmptySearchFuture() - def result(self, **kwargs): - """ - Return the result from future object. + def result(self) -> Any: + """Return the result from future object. It's a synchronous interface. It will wait executing until server respond or timeout occur(if specified). """ return self.on_response(self._f.result()) - def on_response(self, res): + def on_response(self, res: Any): return res def cancel(self): - """ - Cancel the request. - """ + """Cancel the request.""" return self._f.cancel() def done(self): - """ - Wait for request done. - """ + """Wait for request done.""" return self._f.done() -class SearchFuture(BaseFuture): - def on_response(self, res): - return SearchResult(res) +class _EmptySearchFuture: + def result(self) -> SearchResult: + return SearchResult(schema_pb2.SearchResultData()) + + def cancel(self) -> None: + pass + + def done(self) -> None: + pass class MutationFuture(BaseFuture): - def on_response(self, res): + def on_response(self, res: Any): return MutationResult(res) + + +class SearchFuture(BaseFuture): + """SearchFuture of async already returns SearchResult, add BaseFuture + functions into async.SearchFuture + """ diff --git a/pymilvus/orm/index.py b/pymilvus/orm/index.py index aaf1ffd48..4e9b20a42 100644 --- a/pymilvus/orm/index.py +++ b/pymilvus/orm/index.py @@ -11,129 +11,129 @@ # the License. import copy +from typing import Dict, Optional, TypeVar -from .exceptions import CollectionNotExistException, ExceptionsMessage, IndexNotExistException +from pymilvus.exceptions import CollectionNotExistException, ExceptionsMessage +from pymilvus.settings import Config + +Index = TypeVar("Index") +Collection = TypeVar("Collection") class Index: - def __init__(self, collection, field_name, index_params, **kwargs): - """ - Creates index on a specified field according to the index parameters. - - :param collection: The collection in which the index is created - :type collection: Collection - - :param field_name: The name of the field to create an index for. - :type field_name: str - - :param index_params: Indexing parameters. - :type index_params: dict - - :raises ParamError: If parameters are invalid. - :raises IndexConflictException: - If an index of the same name but of different param already exists. - - :example: - >>> from pymilvus import * - >>> from pymilvus.schema import * - >>> from pymilvus.types import DataType - >>> connections.connect() - - >>> field1 = FieldSchema("int64", DataType.INT64, is_primary=True) - >>> field2 = FieldSchema("fvec", DataType.FLOAT_VECTOR, is_primary=False, dim=128) - >>> schema = CollectionSchema(fields=[field1, field2], description="collection description") - >>> collection = Collection(name='test_collection', schema=schema) - >>> # insert some data - >>> index_params = {"index_type": "IVF_FLAT", "metric_type": "L2", "params": {"nlist": 128}} - >>> index = Index(collection, "fvec", index_params) - >>> print(index.params) - {'index_type': 'IVF_FLAT', 'metric_type': 'L2', 'params': {'nlist': 128}} - >>> print(index.collection_name) - test_collection - >>> print(index.field_name) - fvec - >>> index.drop() + def __init__( + self, + collection: Collection, + field_name: str, + index_params: Dict, + **kwargs, + ) -> Index: + """Creates index on a specified field according to the index parameters. + + Args: + collection(Collection): The collection in which the index is created + field_name(str): The name of the field to create an index for. + index_params(dict): Indexing parameters. + kwargs: + * *index_name* (``str``) -- + The name of index which will be created. If no index name is specified, + default index name will be used. + + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import * + >>> from pymilvus.schema import * + >>> from pymilvus.types import DataType + >>> connections.connect() + + >>> field1 = FieldSchema("int64", DataType.INT64, is_primary=True) + >>> field2 = FieldSchema("fvec", DataType.FLOAT_VECTOR, is_primary=False, dim=128) + >>> schema = CollectionSchema(fields=[field1, field2]) + >>> collection = Collection(name='test_collection', schema=schema) + >>> # insert some data + >>> index_params = { + ... "index_type": "IVF_FLAT", + ... "metric_type": "L2", + ... "params": {"nlist": 128}} + >>> index = Index(collection, "fvec", index_params) + >>> index.params + {'index_type': 'IVF_FLAT', 'metric_type': 'L2', 'params': {'nlist': 128}} + >>> index.collection_name + test_collection + >>> index.field_name + fvec + >>> index.drop() """ + # ruff: noqa: PLC0415 from .collection import Collection + if not isinstance(collection, Collection): - raise CollectionNotExistException(0, ExceptionsMessage.CollectionType) + raise CollectionNotExistException(message=ExceptionsMessage.CollectionType) self._collection = collection self._field_name = field_name self._index_params = index_params - self._kwargs = kwargs - if self._kwargs.pop("construct_only", False): + self._index_name = kwargs.get("index_name", Config.IndexName) + if kwargs.get("construct_only", False): return conn = self._get_connection() - index = conn.describe_index(self._collection.name, "") - if index is not None: - tmp_field_name = index.pop("field_name", None) - if index is None or index != index_params or tmp_field_name != field_name: - conn.create_index(self._collection.name, self._field_name, self._index_params) + conn.create_index(self._collection.name, self._field_name, self._index_params, **kwargs) + indexes = conn.list_indexes(self._collection.name) + for index in indexes: + if index.field_name == self._field_name: + self._index_name = index.index_name + break def _get_connection(self): return self._collection._get_connection() - # read-only @property def params(self) -> dict: - """ - Returns the index parameters. - - :return dict: - The index parameters - """ + """dict: The index parameters""" return copy.deepcopy(self._index_params) - # read-only @property def collection_name(self) -> str: - """ - Returns the corresponding collection name. - - :return str: - The corresponding collection name - """ + """str: The corresponding collection name""" return self._collection.name @property def field_name(self) -> str: - """ - Returns the corresponding field name. - - :return str: - The corresponding field name. - """ + """str: The corresponding field name.""" return self._field_name - def __eq__(self, other) -> bool: - """ - The order of the fields of index must be consistent. - """ + @property + def index_name(self) -> str: + """str: The corresponding index name.""" + return self._index_name + + def __eq__(self, other: Index) -> bool: + """The order of the fields of index must be consistent.""" return self.to_dict() == other.to_dict() def to_dict(self): - """ - Put collection name, field name and index params into dict. - """ - _dict = { + """Put collection name, field name and index params into dict.""" + return { "collection": self._collection._name, "field": self._field_name, - "index_param": self.params + "index_name": self._index_name, + "index_param": self.params, } - return _dict - - def drop(self, timeout=None, **kwargs): - """ - Drop an index and its corresponding index files. - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + def drop(self, timeout: Optional[float] = None, **kwargs): + """Drop an index and its corresponding index files. - :raises IndexNotExistException: If the specified index does not exist. + Args: + timeout(float, optional): An optional duration of time in seconds to allow + for the RPC. When timeout is set to None, client waits until server response + or error occur """ conn = self._get_connection() - if conn.describe_index(self._collection.name, "") is None: - raise IndexNotExistException(0, ExceptionsMessage.IndexNotExist) - conn.drop_index(self._collection.name, self.field_name, "", timeout=timeout, **kwargs) + conn.drop_index( + collection_name=self._collection.name, + field_name=self.field_name, + index_name=self.index_name, + timeout=timeout, + ) diff --git a/pymilvus/orm/iterator.py b/pymilvus/orm/iterator.py new file mode 100644 index 000000000..cc14bdc2b --- /dev/null +++ b/pymilvus/orm/iterator.py @@ -0,0 +1,826 @@ +import datetime +import logging +import time +from copy import deepcopy +from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, TypeVar, Union + +from pymilvus.client import entity_helper, utils +from pymilvus.client.abstract import LoopBase +from pymilvus.client.search_result import Hits +from pymilvus.exceptions import ( + MilvusException, + ParamError, +) +from pymilvus.grpc_gen import milvus_pb2 as milvus_types + +from .connections import Connections +from .constants import ( + BATCH_SIZE, + CALC_DIST_BM25, + CALC_DIST_COSINE, + CALC_DIST_HAMMING, + CALC_DIST_IP, + CALC_DIST_JACCARD, + CALC_DIST_L2, + CALC_DIST_TANIMOTO, + COLLECTION_ID, + DEFAULT_SEARCH_EXTENSION_RATE, + EF, + FIELDS, + GUARANTEE_TIMESTAMP, + INT64_MAX, + IS_PRIMARY, + ITERATOR_FIELD, + ITERATOR_SESSION_CP_FILE, + ITERATOR_SESSION_TS_FIELD, + MAX_BATCH_SIZE, + MAX_FILTERED_IDS_COUNT_ITERATION, + MAX_TRY_TIME, + METRIC_TYPE, + MILVUS_LIMIT, + OFFSET, + PARAMS, + RADIUS, + RANGE_FILTER, + REDUCE_STOP_FOR_BEST, + UNLIMITED, +) +from .schema import CollectionSchema +from .types import DataType +from .utility import mkts_from_datetime + +log = logging.getLogger(__name__) +QueryIterator = TypeVar("QueryIterator") +SearchIterator = TypeVar("SearchIterator") + + +def fall_back_to_latest_session_ts(): + d = datetime.datetime.now() + return mkts_from_datetime(d, milliseconds=1000.0) + + +def assert_info(condition: bool, message: str): + if not condition: + raise MilvusException(message) + + +def io_operation(io_func: Callable[[Any], None], message: str): + try: + io_func() + except OSError as ose: + raise MilvusException(message=message) from ose + + +def extend_batch_size(batch_size: int, next_param: dict, to_extend_batch_size: bool) -> int: + extend_rate = 1 + if to_extend_batch_size: + extend_rate = DEFAULT_SEARCH_EXTENSION_RATE + if EF in next_param[PARAMS]: + return min(MAX_BATCH_SIZE, batch_size * extend_rate, next_param[PARAMS][EF]) + return min(MAX_BATCH_SIZE, batch_size * extend_rate) + + +def check_set_flag(obj: Any, flag_name: str, kwargs: Dict[str, Any], key: str): + setattr(obj, flag_name, kwargs.get(key, False)) + + +class QueryIterator: + def __init__( + self, + connection: Connections, + collection_name: str, + batch_size: Optional[int] = 1000, + limit: Optional[int] = -1, + expr: Optional[str] = None, + output_fields: Optional[List[str]] = None, + partition_names: Optional[List[str]] = None, + schema: Optional[CollectionSchema] = None, + timeout: Optional[float] = None, + **kwargs, + ) -> QueryIterator: + self._conn = connection + self._collection_name = collection_name + self.__set_up_collection_id() + self._output_fields = output_fields + self._partition_names = partition_names + self._schema = schema + self._timeout = timeout + self._session_ts = 0 + self._kwargs = kwargs + self._kwargs[ITERATOR_FIELD] = "True" + self._kwargs[COLLECTION_ID] = self._collection_id + self.__check_set_batch_size(batch_size) + self._limit = limit + self.__check_set_reduce_stop_for_best() + self._returned_count = 0 + self.__setup__pk_prop() + self.__set_up_expr(expr) + self._next_id = None + self._cache_id_in_use = NO_CACHE_ID + self._cp_file_handler = None + self.__set_up_ts_cp() + self.__seek_to_offset() + + def __set_up_collection_id(self): + res = self._conn.describe_collection(self._collection_name) + self._collection_id = res[COLLECTION_ID] + + def __seek_to_offset(self): + # read pk cursor from cp file, no need to seek offset + if self._next_id is not None: + return + offset = self._kwargs.get(OFFSET, 0) + if offset > 0: + seek_params = self._kwargs.copy() + seek_params[OFFSET] = 0 + seek_params[ITERATOR_FIELD] = "False" + seek_params[REDUCE_STOP_FOR_BEST] = "False" + start_time = time.time() + + def seek_offset_by_batch(batch: int, expr: str) -> int: + seek_params[MILVUS_LIMIT] = batch + res = self._conn.query( + collection_name=self._collection_name, + expr=expr, + output_field=[], + partition_name=self._partition_names, + timeout=self._timeout, + **seek_params, + ) + self.__update_cursor(res) + return len(res) + + while offset > 0: + batch_size = min(MAX_BATCH_SIZE, offset) + next_expr = self.__setup_next_expr() + seeked_count = seek_offset_by_batch(batch_size, next_expr) + log.debug( + f"seeked offset, seek_expr:{next_expr} batch_size:{batch_size} seeked_count:{seeked_count}" + ) + if seeked_count == 0: + log.info( + "seek offset has drained all matched results for query iterator, break" + ) + break + offset -= seeked_count + self._kwargs[OFFSET] = 0 + seek_offset_duration = time.time() - start_time + log.info( + f"Finish seek offset for query iterator, offset:{offset}, current_pk_cursor:{self._next_id}, " + f"duration:{seek_offset_duration}" + ) + + def __init_cp_file_handler(self) -> bool: + mode = "w" + if self._cp_file_path.exists(): + mode = "r+" + try: + self._cp_file_handler = self._cp_file_path.open(mode) + except OSError as ose: + raise MilvusException( + message=f"Failed to open cp file for iterator:{self._cp_file_path_str}" + ) from ose + return mode == "r+" + + def __save_mvcc_ts(self): + assert_info( + self._cp_file_handler is not None, + "Must init cp file handler before saving session_ts", + ) + self._cp_file_handler.writelines(str(self._session_ts) + "\n") + + def __save_pk_cursor(self): + if self._need_save_cp and self._next_id is not None: + if not self._cp_file_path.exists(): + self._cp_file_handler.close() + self._cp_file_handler = self._cp_file_path.open("w") + self._buffer_cursor_lines_number = 0 + self.__save_mvcc_ts() + log.warning( + "iterator cp file is not existed any more, recreate for iteration, " + "do not remove this file manually!" + ) + if self._buffer_cursor_lines_number >= 100: + self._cp_file_handler.seek(0) + self._cp_file_handler.truncate() + log.info( + "cursor lines in cp file has exceeded 100 lines, truncate the file and rewrite" + ) + self._buffer_cursor_lines_number = 0 + self._cp_file_handler.writelines(str(self._next_id) + "\n") + self._cp_file_handler.flush() + self._buffer_cursor_lines_number += 1 + + def __check_set_reduce_stop_for_best(self): + if self._kwargs.get(REDUCE_STOP_FOR_BEST, True): + self._kwargs[REDUCE_STOP_FOR_BEST] = "True" + else: + self._kwargs[REDUCE_STOP_FOR_BEST] = "False" + + def __check_set_batch_size(self, batch_size: int): + if batch_size < 0: + raise ParamError(message="batch size cannot be less than zero") + if batch_size > MAX_BATCH_SIZE: + raise ParamError(message=f"batch size cannot be larger than {MAX_BATCH_SIZE}") + self._kwargs[BATCH_SIZE] = batch_size + self._kwargs[MILVUS_LIMIT] = batch_size + + # rely on pk prop, so this method should be called after __setup__pk_prop + def __set_up_expr(self, expr: str): + if expr is not None: + self._expr = expr + elif self._pk_str: + self._expr = self._pk_field_name + ' != ""' + else: + self._expr = self._pk_field_name + " < " + str(INT64_MAX) + + def __setup_ts_by_request(self): + init_ts_kwargs = self._kwargs.copy() + init_ts_kwargs[OFFSET] = 0 + init_ts_kwargs[MILVUS_LIMIT] = 1 + # just to set up mvccTs for iterator, no need correct limit + res = self._conn.query( + collection_name=self._collection_name, + expr=self._expr, + output_field=self._output_fields, + partition_name=self._partition_names, + timeout=self._timeout, + **init_ts_kwargs, + ) + if res is None: + raise MilvusException( + message="failed to connect to milvus for setting up " + "mvccTs, check milvus servers' status" + ) + if res.extra is not None: + self._session_ts = res.extra.get(ITERATOR_SESSION_TS_FIELD, 0) + if self._session_ts <= 0: + log.warning("failed to get mvccTs from milvus server, use client-side ts instead") + self._session_ts = fall_back_to_latest_session_ts() + self._kwargs[GUARANTEE_TIMESTAMP] = self._session_ts + + def __set_up_ts_cp(self): + self._buffer_cursor_lines_number = 0 + self._cp_file_path_str = self._kwargs.get(ITERATOR_SESSION_CP_FILE, None) + self._cp_file_path = None + # no input cp_file, set up mvccTs by query request + if self._cp_file_path_str is None: + self._need_save_cp = False + self.__setup_ts_by_request() + else: + self._need_save_cp = True + self._cp_file_path = Path(self._cp_file_path_str) + if not self.__init_cp_file_handler(): + # input cp file is empty, set up mvccTs by query request + self.__setup_ts_by_request() + io_operation(self.__save_mvcc_ts, "Failed to save mvcc ts") + else: + try: + # input cp file is not emtpy, init mvccTs by reading cp file + lines = self._cp_file_handler.readlines() + line_count = len(lines) + if line_count < 2: + raise ParamError( + message=f"input cp file:{self._cp_file_path_str} should contain " + f"at least two lines, but only:{line_count} lines" + ) + self._session_ts = int(lines[0]) + self._kwargs[GUARANTEE_TIMESTAMP] = self._session_ts + if line_count > 1: + self._buffer_cursor_lines_number = line_count - 1 + self._next_id = lines[self._buffer_cursor_lines_number].strip() + except OSError as ose: + raise MilvusException( + message=f"Failed to read cp info from file:{self._cp_file_path_str}" + ) from ose + except ValueError as e: + raise ParamError(message=f"cannot parse input cp session_ts:{lines[0]}") from e + + def __maybe_cache(self, result: List): + if len(result) < 2 * self._kwargs[BATCH_SIZE]: + return + start = self._kwargs[BATCH_SIZE] + cache_result = result[start:] + cache_id = iterator_cache.cache(cache_result, NO_CACHE_ID) + self._cache_id_in_use = cache_id + + def __is_res_sufficient(self, res: List): + return res is not None and len(res) >= self._kwargs[BATCH_SIZE] + + def get_cursor(self) -> milvus_types.QueryCursor: + cursor = milvus_types.QueryCursor + cursor.session_ts = self._session_ts + if self._pk_str: + cursor.str_pk = str(self._next_id) + else: + cursor.int_pk = self._next_id + return cursor + + def next(self): + cached_res = iterator_cache.fetch_cache(self._cache_id_in_use) + ret = None + if self.__is_res_sufficient(cached_res): + ret = cached_res[0 : self._kwargs[BATCH_SIZE]] + res_to_cache = cached_res[self._kwargs[BATCH_SIZE] :] + iterator_cache.cache(res_to_cache, self._cache_id_in_use) + else: + iterator_cache.release_cache(self._cache_id_in_use) + current_expr = self.__setup_next_expr() + log.debug(f"query_iterator_next_expr:{current_expr}") + res = self._conn.query( + collection_name=self._collection_name, + expr=current_expr, + output_fields=self._output_fields, + partition_names=self._partition_names, + timeout=self._timeout, + **self._kwargs, + ) + self.__maybe_cache(res) + ret = res[0 : min(self._kwargs[BATCH_SIZE], len(res))] + + ret = self.__check_reached_limit(ret) + self.__update_cursor(ret) + io_operation(self.__save_pk_cursor, "failed to save pk cursor") + self._returned_count += len(ret) + return ret + + def __check_reached_limit(self, ret: List): + if self._limit == UNLIMITED: + return ret + left_count = self._limit - self._returned_count + if left_count >= len(ret): + return ret + # has exceeded the limit, cut off the result and return + return ret[0:left_count] + + def __setup__pk_prop(self): + fields = self._schema[FIELDS] + for field in fields: + if field.get(IS_PRIMARY): + if field["type"] == DataType.VARCHAR: + self._pk_str = True + else: + self._pk_str = False + self._pk_field_name = field["name"] + break + if self._pk_field_name is None or self._pk_field_name == "": + raise MilvusException(message="schema must contain pk field, broke") + + def __setup_next_expr(self) -> str: + current_expr = self._expr + if self._next_id is None: + return current_expr + filtered_pk_str = "" + if self._pk_str: + filtered_pk_str = f'{self._pk_field_name} > "{self._next_id}"' + else: + filtered_pk_str = f"{self._pk_field_name} > {self._next_id}" + if current_expr is None or len(current_expr) == 0: + return filtered_pk_str + return "(" + current_expr + ")" + " and " + filtered_pk_str + + def __update_cursor(self, res: List) -> None: + if len(res) == 0: + return + self._next_id = res[-1][self._pk_field_name] + + def close(self) -> None: + # release cache in use + iterator_cache.release_cache(self._cache_id_in_use) + if self._cp_file_handler is not None: + + def inner_close(): + self._cp_file_handler.close() + self._cp_file_path.unlink() + log.info(f"removed cp file:{self._cp_file_path_str} for query iterator") + + io_operation( + inner_close, f"failed to clear cp file:{self._cp_file_path_str} for query iterator" + ) + + +def metrics_positive_related(metrics: str) -> bool: + if metrics in [CALC_DIST_L2, CALC_DIST_JACCARD, CALC_DIST_HAMMING, CALC_DIST_TANIMOTO]: + return True + if metrics in [CALC_DIST_IP, CALC_DIST_COSINE, CALC_DIST_BM25]: + return False + raise MilvusException(message=f"unsupported metrics type for search iteration: {metrics}") + + +class SearchPage(LoopBase): + """Since we only support nq=1 in search iteration, so search iteration response + should be different from raw response of search operation""" + + def __init__(self, res: Hits, session_ts: Optional[int] = 0): + super().__init__() + self._session_ts = session_ts + self._results = [] + if res is not None: + self._results.append(res) + + def get_session_ts(self): + return self._session_ts + + def get_res(self): + return self._results + + def __len__(self): + length = 0 + for res in self._results: + length += len(res) + return length + + def get__item(self, idx: Any): + if len(self._results) == 0: + return None + if idx >= self.__len__(): + msg = "Index out of range" + raise IndexError(msg) + index = 0 + ret = None + for res in self._results: + if index + len(res) <= idx: + index += len(res) + else: + ret = res[idx - index] + break + return ret + + def merge(self, others: List[Hits]): + if others is not None: + for other in others: + self._results.append(other) + + def ids(self): + ids = [] + for res in self._results: + for hit in res: + ids.append(hit.id) + return ids + + def distances(self): + distances = [] + for res in self._results: + for hit in res: + distances.append(hit.distance) + return distances + + +class SearchIterator: + def __init__( + self, + connection: Connections, + collection_name: str, + data: Union[List, utils.SparseMatrixInputType], + ann_field: str, + param: Dict, + batch_size: Optional[int] = 1000, + limit: Optional[int] = UNLIMITED, + expr: Optional[str] = None, + partition_names: Optional[List[str]] = None, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + round_decimal: int = -1, + schema: Optional[CollectionSchema] = None, + **kwargs, + ) -> SearchIterator: + rows = entity_helper.get_input_num_rows(data) + if rows > 1: + raise ParamError( + message="Not support search iteration over multiple vectors at present" + ) + if rows == 0: + raise ParamError(message="vector_data for search cannot be empty") + self._conn = connection + self._iterator_params = { + "collection_name": collection_name, + "data": data, + "ann_field": ann_field, + BATCH_SIZE: batch_size, + "output_fields": output_fields, + "partition_names": partition_names, + "timeout": timeout, + "round_decimal": round_decimal, + } + self._collection_name = collection_name + self._expr = expr + self.__check_set_params(param) + self.__check_for_special_index_param() + self._kwargs = kwargs + self._kwargs[ITERATOR_FIELD] = "True" + self.__set_up_collection_id() + self._kwargs[COLLECTION_ID] = self._collection_id + self._filtered_ids = [] + self._filtered_distance = None + self._schema = schema + self._limit = limit + self._returned_count = 0 + self.__check_metrics() + self.__check_offset() + self.__check_rm_range_search_parameters() + self.__setup__pk_prop() + self.__init_search_iterator() + + def __set_up_collection_id(self): + res = self._conn.describe_collection(self._collection_name) + self._collection_id = res[COLLECTION_ID] + + def __init_search_iterator(self): + init_page = self.__execute_next_search(self._param, self._expr, False) + self._session_ts = init_page.get_session_ts() + if self._session_ts <= 0: + log.warning("failed to set up mvccTs from milvus server, use client-side ts instead") + self._session_ts = fall_back_to_latest_session_ts() + self._kwargs[GUARANTEE_TIMESTAMP] = self._session_ts + if len(init_page) == 0: + message = ( + "Cannot init search iterator because init page contains no matched rows, " + "please check the radius and range_filter set up by searchParams" + ) + log.error(message) + self._cache_id = NO_CACHE_ID + self._init_success = False + return + self._cache_id = iterator_cache.cache(init_page, NO_CACHE_ID) + self.__set_up_range_parameters(init_page) + self.__update_filtered_ids(init_page) + self._init_success = True + + def __update_width(self, page: SearchPage): + first_hit, last_hit = page[0], page[-1] + if metrics_positive_related(self._param[METRIC_TYPE]): + self._width = last_hit.distance - first_hit.distance + else: + self._width = first_hit.distance - last_hit.distance + if self._width == 0.0: + self._width = 0.05 + # enable a minimum value for width to avoid radius and range_filter equal error + + def __set_up_range_parameters(self, page: SearchPage): + self.__update_width(page) + self._tail_band = page[-1].distance + log.debug( + f"set up init parameter for searchIterator width:{self._width} tail_band:{self._tail_band}" + ) + + def __check_reached_limit(self) -> bool: + if self._limit == UNLIMITED or self._returned_count < self._limit: + return False + log.debug( + f"reached search limit:{self._limit}, returned_count:{self._returned_count}, directly return" + ) + return True + + def __check_set_params(self, param: Dict): + if param is None: + self._param = {} + else: + self._param = deepcopy(param) + if PARAMS not in self._param: + self._param[PARAMS] = {} + + def __check_for_special_index_param(self): + if ( + EF in self._param[PARAMS] + and self._param[PARAMS][EF] < self._iterator_params[BATCH_SIZE] + ): + raise MilvusException( + message="When using hnsw index, provided ef must be larger than or equal to batch size" + ) + + def __setup__pk_prop(self): + fields = self._schema[FIELDS] + for field in fields: + if field.get(IS_PRIMARY): + if field["type"] == DataType.VARCHAR: + self._pk_str = True + else: + self._pk_str = False + self._pk_field_name = field["name"] + break + if self._pk_field_name is None or self._pk_field_name == "": + raise ParamError(message="schema must contain pk field, broke") + + def __check_metrics(self): + if self._param[METRIC_TYPE] is None or self._param[METRIC_TYPE] == "": + raise ParamError(message="must specify metrics type for search iterator") + + """we use search && range search to implement search iterator, + so range search parameters are disabled to clients""" + + def __check_rm_range_search_parameters(self): + if ( + (PARAMS in self._param) + and (RADIUS in self._param[PARAMS]) + and (RANGE_FILTER in self._param[PARAMS]) + ): + radius = self._param[PARAMS][RADIUS] + range_filter = self._param[PARAMS][RANGE_FILTER] + if metrics_positive_related(self._param[METRIC_TYPE]) and radius <= range_filter: + raise MilvusException( + message=f"for metrics:{self._param[METRIC_TYPE]}, radius must be " + f"larger than range_filter, please adjust your parameter" + ) + if not metrics_positive_related(self._param[METRIC_TYPE]) and radius >= range_filter: + raise MilvusException( + message=f"for metrics:{self._param[METRIC_TYPE]}, radius must be " + f"smaller than range_filter, please adjust your parameter" + ) + + def __check_offset(self): + if self._kwargs.get(OFFSET, 0) != 0: + raise ParamError(message="Not support offset when searching iteration") + + def __update_filtered_ids(self, res: SearchPage): + if len(res) == 0: + return + last_hit = res[-1] + if last_hit is None: + return + if last_hit.distance != self._filtered_distance: + self._filtered_ids = [] # distance has changed, clear filter_ids array + self._filtered_distance = last_hit.distance # renew the distance for filtering + for hit in res: + if hit.distance == last_hit.distance: + self._filtered_ids.append(hit.id) + if len(self._filtered_ids) > MAX_FILTERED_IDS_COUNT_ITERATION: + raise MilvusException( + message=f"filtered ids length has accumulated to more than " + f"{MAX_FILTERED_IDS_COUNT_ITERATION!s}, " + f"there is a danger of overly memory consumption" + ) + + def __is_cache_enough(self, count: int) -> bool: + cached_page = iterator_cache.fetch_cache(self._cache_id) + return cached_page is not None and len(cached_page) >= count + + def __extract_page_from_cache(self, count: int) -> SearchPage: + cached_page = iterator_cache.fetch_cache(self._cache_id) + if cached_page is None or len(cached_page) < count: + raise ParamError( + message=f"Wrong, try to extract {count} result from cache, " + f"more than {len(cached_page)} there must be sth wrong with code" + ) + + ret_page_res = cached_page[0:count] + ret_page = SearchPage(ret_page_res) + left_cache_page = SearchPage(cached_page[count:]) + iterator_cache.cache(left_cache_page, self._cache_id) + return ret_page + + def __push_new_page_to_cache(self, page: SearchPage) -> int: + if page is None: + raise ParamError(message="Cannot push None page into cache") + cached_page: SearchPage = iterator_cache.fetch_cache(self._cache_id) + if cached_page is None: + iterator_cache.cache(page, self._cache_id) + cached_page = page + else: + cached_page.merge(page.get_res()) + return len(cached_page) + + def next(self): + # 0. check reached limit + if not self._init_success or self.__check_reached_limit(): + return SearchPage(None) + ret_len = self._iterator_params[BATCH_SIZE] + if self._limit is not UNLIMITED: + left_len = self._limit - self._returned_count + ret_len = min(left_len, ret_len) + + # 1. if cached page is sufficient, directly return + if self.__is_cache_enough(ret_len): + ret_page = self.__extract_page_from_cache(ret_len) + self._returned_count += len(ret_page) + return ret_page + + # 2. if cached page not enough, try to fill the result by probing with constant width + # until finish filling or exceeding max trial time: 10 + new_page = self.__try_search_fill() + cached_page_len = self.__push_new_page_to_cache(new_page) + ret_len = min(cached_page_len, ret_len) + ret_page = self.__extract_page_from_cache(ret_len) + if len(ret_page) == self._iterator_params[BATCH_SIZE]: + self.__update_width(ret_page) + + # 3. update filter ids to avoid returning result repeatedly + self._returned_count += ret_len + return ret_page + + def __try_search_fill(self) -> SearchPage: + final_page = SearchPage(None) + try_time = 0 + coefficient = 1 + while True: + next_params = self.__next_params(coefficient) + next_expr = self.__filtered_duplicated_result_expr(self._expr) + new_page = self.__execute_next_search(next_params, next_expr, True) + self.__update_filtered_ids(new_page) + try_time += 1 + if len(new_page) > 0: + final_page.merge(new_page.get_res()) + self._tail_band = new_page[-1].distance + if len(final_page) >= self._iterator_params[BATCH_SIZE]: + break + if try_time > MAX_TRY_TIME: + log.warning(f"Search probe exceed max try times:{MAX_TRY_TIME} directly break") + break + # if there's a ring containing no vectors matched, then we need to extend + # the ring continually to avoid empty ring problem + coefficient += 1 + return final_page + + def __execute_next_search( + self, next_params: dict, next_expr: str, to_extend_batch: bool + ) -> SearchPage: + log.debug(f"search_iterator_next_expr:{next_expr}, next_params:{next_params}") + res = self._conn.search( + self._iterator_params["collection_name"], + self._iterator_params["data"], + self._iterator_params["ann_field"], + next_params, + extend_batch_size(self._iterator_params[BATCH_SIZE], next_params, to_extend_batch), + next_expr, + self._iterator_params["partition_names"], + self._iterator_params["output_fields"], + self._iterator_params["round_decimal"], + timeout=self._iterator_params["timeout"], + schema=self._schema, + **self._kwargs, + ) + return SearchPage(res[0], res.get_session_ts()) + + # at present, the range_filter parameter means 'larger/less and equal', + # so there would be vectors with same distances returned multiple times in different pages + # we need to refine and remove these results before returning + def __filtered_duplicated_result_expr(self, expr: str): + if len(self._filtered_ids) == 0: + return expr + + filtered_ids_str = "" + for filtered_id in self._filtered_ids: + if self._pk_str: + filtered_ids_str += f'"{filtered_id}",' + else: + filtered_ids_str += f"{filtered_id}," + filtered_ids_str = filtered_ids_str[0:-1] + + if len(filtered_ids_str) > 0: + if expr is not None and len(expr) > 0: + filter_expr = f" and {self._pk_field_name} not in [{filtered_ids_str}]" + return "(" + expr + ")" + filter_expr + return f"{self._pk_field_name} not in [{filtered_ids_str}]" + return expr + + def __next_params(self, coefficient: int): + coefficient = max(1, coefficient) + next_params = deepcopy(self._param) + if metrics_positive_related(self._param[METRIC_TYPE]): + next_radius = self._tail_band + self._width * coefficient + if RADIUS in self._param[PARAMS] and next_radius > self._param[PARAMS][RADIUS]: + next_params[PARAMS][RADIUS] = self._param[PARAMS][RADIUS] + else: + next_params[PARAMS][RADIUS] = next_radius + else: + next_radius = self._tail_band - self._width * coefficient + if RADIUS in self._param[PARAMS] and next_radius < self._param[PARAMS][RADIUS]: + next_params[PARAMS][RADIUS] = self._param[PARAMS][RADIUS] + else: + next_params[PARAMS][RADIUS] = next_radius + next_params[PARAMS][RANGE_FILTER] = self._tail_band + log.debug( + f"next round search iteration radius:{next_params[PARAMS][RADIUS]}," + f"range_filter:{next_params[PARAMS][RANGE_FILTER]}," + f"coefficient:{coefficient}" + ) + + return next_params + + def close(self): + iterator_cache.release_cache(self._cache_id) + + +class IteratorCache: + def __init__(self) -> None: + self._cache_id = 0 + self._cache_map = {} + + def cache(self, result: Any, cache_id: int): + if cache_id == NO_CACHE_ID: + self._cache_id += 1 + cache_id = self._cache_id + self._cache_map[cache_id] = result + return cache_id + + def fetch_cache(self, cache_id: int): + return self._cache_map.get(cache_id, None) + + def release_cache(self, cache_id: int): + if self._cache_map.get(cache_id, None) is not None: + self._cache_map.pop(cache_id) + + +NO_CACHE_ID = -1 +# Singleton Mode in Python +iterator_cache = IteratorCache() diff --git a/pymilvus/orm/mutation.py b/pymilvus/orm/mutation.py index 6bd026f03..d9518cb7f 100644 --- a/pymilvus/orm/mutation.py +++ b/pymilvus/orm/mutation.py @@ -10,61 +10,61 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. +from typing import Any + class MutationResult: - def __init__(self, mr): + def __init__(self, mr: Any) -> None: self._mr = mr - self._primary_keys = list() - self._insert_cnt = 0 - self._delete_cnt = 0 - self._upsert_cnt = 0 - self._timestamp = 0 - self._pack(mr) @property def primary_keys(self): - return self._primary_keys + return self._mr.primary_keys if self._mr else [] @property def insert_count(self): - return self._insert_cnt + return self._mr.insert_count if self._mr else 0 @property def delete_count(self): - return self._delete_cnt + return self._mr.delete_count if self._mr else 0 @property def upsert_count(self): - return self._upsert_cnt + return self._mr.upsert_count if self._mr else 0 @property def timestamp(self): - return self._timestamp + return self._mr.timestamp if self._mr else 0 + + @property + def succ_count(self): + return self._mr.succ_count if self._mr else 0 + + @property + def err_count(self): + return self._mr.err_count if self._mr else 0 + + @property + def succ_index(self): + return self._mr.succ_index if self._mr else [] + + @property + def err_index(self): + return self._mr.err_index if self._mr else [] - def __str__(self): + # The unit of this cost is vcu, similar to token + @property + def cost(self): + return self._mr.cost if self._mr else 0 + + def __str__(self) -> str: """ Return the information of mutation result :return str: The information of mutation result. """ - return "(insert count: {}, delete count: {}, upsert count: {}, timestamp: {})".\ - format(self._insert_cnt, self._delete_cnt, self._upsert_cnt, self._timestamp) + return self._mr.__str__() if self._mr else "" __repr__ = __str__ - - # TODO - # def error_code(self): - # pass - # - # def error_reason(self): - # pass - - def _pack(self, mr): - if mr is None: - return - self._primary_keys = mr.primary_keys - self._insert_cnt = mr.insert_count - self._delete_cnt = mr.delete_count - self._upsert_cnt = mr.upsert_count - self._timestamp = mr.timestamp diff --git a/pymilvus/orm/partition.py b/pymilvus/orm/partition.py index 7705aa570..c8f593752 100644 --- a/pymilvus/orm/partition.py +++ b/pymilvus/orm/partition.py @@ -10,58 +10,73 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. -import json +from typing import Dict, List, Optional, TypeVar, Union + +import orjson +import pandas as pd + +from pymilvus.client import utils +from pymilvus.client.abstract import BaseRanker +from pymilvus.client.search_result import SearchResult +from pymilvus.client.types import Replica +from pymilvus.exceptions import MilvusException +from pymilvus.settings import Config -from .exceptions import CollectionNotExistException, PartitionNotExistException, ExceptionsMessage -from .prepare import Prepare -from .search import SearchResult from .mutation import MutationResult -from .future import SearchFuture, MutationFuture + +Collection = TypeVar("Collection") +Partition = TypeVar("Partition") class Partition: - # TODO(yukun): Need a place to store the description - def __init__(self, collection, name, description="", **kwargs): + def __init__( + self, + collection: Union[Collection, str], + name: str, + description: str = "", + **kwargs, + ) -> Partition: + # ruff: noqa: PLC0415 from .collection import Collection - if not isinstance(collection, Collection): - raise CollectionNotExistException(0, ExceptionsMessage.CollectionType) - self._collection = collection + + if isinstance(collection, Collection): + self._collection = collection + elif isinstance(collection, str): + self._collection = Collection(collection) + else: + msg = "Collection must be of type pymilvus.Collection or String" + raise MilvusException(message=msg) + self._name = name self._description = description - self._kwargs = kwargs - conn = self._get_connection() if kwargs.get("construct_only", False): return - has = conn.has_partition(self._collection.name, self._name) - if not has: - conn.create_partition(self._collection.name, self._name) - def __repr__(self): - return json.dumps({ - 'name': self.name, - 'collection_name': self._collection.name, - 'description': self.description, - }) + if not self._collection.has_partition(self.name, **kwargs): + conn = self._get_connection() + conn.create_partition(self._collection.name, self.name, **kwargs) + + def __repr__(self) -> str: + return orjson.dumps( + { + "name": self.name, + "collection_name": self._collection.name, + "description": self.description, + } + ).decode(Config.EncodeProtocol) def _get_connection(self): return self._collection._get_connection() @property def description(self) -> str: - """ - Return the description text. - - :return str: Partition description text, return when operation is successful + """str: discription of the partition. - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + Examples: + >>> from pymilvus import connections, Collection, Partition >>> connections.connect() - >>> schema = CollectionSchema([ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) - ... ]) - >>> collection = Collection("test_partition_description", schema) + >>> collection = Collection("test_partition_description") >>> partition = Partition(collection, "comedy", "comedy films") >>> partition.description 'comedy films' @@ -70,18 +85,12 @@ def description(self) -> str: @property def name(self) -> str: - """ - Return the partition name. + """str: name of the partition - :return str: Partition name, return when operation is successful - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + Examples: + >>> from pymilvus import connections, Collection, Partition >>> connections.connect() - >>> schema = CollectionSchema([ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) - ... ]) - >>> collection = Collection("test_partition_name", schema) + >>> collection = Collection("test_partition_name") >>> partition = Partition(collection, "comedy", "comedy films") >>> partition.name 'comedy' @@ -90,22 +99,12 @@ def name(self) -> str: @property def is_empty(self) -> bool: - """ - Returns whether the partition is empty - - :return bool: Whether the partition is empty - * True: The partition is empty. - * False: The partition is not empty. + """bool: whether the partition is empty - :example: - - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + Examples: + >>> from pymilvus import connections, Collection, Partition >>> connections.connect() - >>> schema = CollectionSchema([ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) - ... ]) - >>> collection = Collection("test_partition_is_empty", schema) + >>> collection = Collection("test_partition_is_empty") >>> partition = Partition(collection, "comedy", "comedy films") >>> partition.is_empty True @@ -114,14 +113,12 @@ def is_empty(self) -> bool: @property def num_entities(self) -> int: - """ - Return the number of entities. + """int: number of entities in the partition - :return int: Number of entities in this partition. - - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + Examples: + >>> from pymilvus import connections >>> connections.connect() + >>> from pymilvus import Collection, Partition, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -137,53 +134,63 @@ def num_entities(self) -> int: 10 """ conn = self._get_connection() - conn.flush([self._collection.name]) - stats = conn.get_partition_stats(db_name="", collection_name=self._collection.name, partition_name=self._name) + stats = conn.get_partition_stats( + collection_name=self._collection.name, partition_name=self.name + ) result = {stat.key: stat.value for stat in stats} result["row_count"] = int(result["row_count"]) return result["row_count"] - def drop(self, timeout=None, **kwargs): + def flush(self, timeout: Optional[float] = None, **kwargs): + """Seal all segment in the collection of this partition. + Inserts after flushing will be written into new segments. + Only sealed segments can be indexed. + + Args: + timeout (float, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the server + responds or an error occurs. """ - Drop the partition, as well as its corresponding index files. + conn = self._get_connection() + conn.flush([self._collection.name], timeout=timeout, **kwargs) + + def drop(self, timeout: Optional[float] = None, **kwargs): + """Drop the partition, the same as Collection.drop_partition - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + Args: + timeout (``float``, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the server + responds or an error occurs. - :raises PartitionNotExistException: - When partitoin does not exist + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + Examples: + >>> from pymilvus import connections, Collection, Partition >>> connections.connect() - >>> schema = CollectionSchema([ - ... FieldSchema("film_id", DataType.INT64, is_primary=True), - ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) - ... ]) - >>> collection = Collection("test_partition_drop", schema) + >>> collection = Collection("test_partition_drop") >>> partition = Partition(collection, "comedy", "comedy films") >>> partition.drop() """ conn = self._get_connection() - if conn.has_partition(self._collection.name, self._name, timeout=timeout) is False: - raise PartitionNotExistException(0, ExceptionsMessage.PartitionNotExist) - return conn.drop_partition(self._collection.name, self._name, timeout=timeout, **kwargs) + return conn.drop_partition(self._collection.name, self.name, timeout=timeout, **kwargs) - def load(self, timeout=None, **kwargs): - """ - Load the partition from disk to memory. + def load(self, replica_number: Optional[int] = None, timeout: Optional[float] = None, **kwargs): + """Load the partition data into memory. - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + Args: + replica_number (``int``, optional): The replica number to load, defaults to None. + timeout (``float``, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. - :raises InvalidArgumentException: - If argument is not valid + Raises: + MilvusException: If anything goes wrong - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + Examples: + >>> from pymilvus import connections >>> connections.connect() + >>> from pymilvus import Collection, Partition, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -192,28 +199,30 @@ def load(self, timeout=None, **kwargs): >>> partition = Partition(collection, "comedy", "comedy films") >>> partition.load() """ - # TODO(yukun): If field_names is not None and not equal schema.field_names, - # raise Exception Not Supported, - # if index_names is not None, raise Exception Not Supported conn = self._get_connection() - if conn.has_partition(self._collection.name, self._name): - return conn.load_partitions(self._collection.name, [self._name], timeout=timeout, **kwargs) - raise PartitionNotExistException(0, ExceptionsMessage.PartitionNotExist) - - def release(self, timeout=None, **kwargs): - """ - Release the partition from memory. - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :raises PartitionNotExistException: - When partitoin does not exist - - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + return conn.load_partitions( + collection_name=self._collection.name, + partition_names=[self.name], + replica_number=replica_number, + timeout=timeout, + **kwargs, + ) + + def release(self, timeout: Optional[float] = None, **kwargs): + """Release the partition data from memory. + + Args: + timeout (``float``, optional): an optional duration of time in seconds to allow + for the RPCs. If timeout is not set, the client keeps waiting until the + server responds or an error occurs. + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import connections >>> connections.connect() + >>> from pymilvus import Collection, Partition, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -224,38 +233,39 @@ def release(self, timeout=None, **kwargs): >>> partition.release() """ conn = self._get_connection() - if conn.has_partition(self._collection.name, self._name): - return conn.release_partitions(self._collection.name, [self._name], timeout=timeout, **kwargs) - raise PartitionNotExistException(0, ExceptionsMessage.PartitionNotExist) - - def insert(self, data, timeout=None, **kwargs): - """ - Insert data into partition. - - :param data: The specified data to insert, the dimension of data needs to align with column - number - :type data: list-like(list, tuple) object or pandas.DataFrame - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :param kwargs: - * *timeout* (``float``) -- - An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - - :return: A MutationResult object contains a property named `insert_count` represents how many - entities have been inserted into milvus and a property named `primary_keys` is a list of primary - keys of the inserted entities. - :rtype: MutationResult - - :raises PartitionNotExistException: - When partitoin does not exist - - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType + return conn.release_partitions( + collection_name=self._collection.name, + partition_names=[self.name], + timeout=timeout, + **kwargs, + ) + + def insert( + self, + data: Union[List, pd.DataFrame, utils.SparseMatrixInputType], + timeout: Optional[float] = None, + **kwargs, + ) -> MutationResult: + """Insert data into the partition, the same as Collection.insert(data, [partition]) + + Args: + data (``list/tuple/pandas.DataFrame/sparse types``): The specified data to insert + partition_name (``str``): The partition name which the data will be inserted to, + if partition name is not passed, then the data will be inserted to default partition + timeout (``float``, optional): A duration of time in seconds to allow for the RPC + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + Returns: + MutationResult: contains 2 properties `insert_count`, and, `primary_keys` + `insert_count`: how may entites have been inserted into Milvus, + `primary_keys`: list of primary keys of the inserted entities + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import connections >>> connections.connect() + >>> from pymilvus import Collection, Partition, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -266,135 +276,203 @@ def insert(self, data, timeout=None, **kwargs): ... [i for i in range(10)], ... [[float(i) for i in range(2)] for _ in range(10)], ... ] - >>> partition.insert(data) - >>> partition.num_entities + >>> res = partition.insert(data) + >>> res.insert_count 10 """ - conn = self._get_connection() - if conn.has_partition(self._collection.name, self._name) is False: - raise PartitionNotExistException(0, ExceptionsMessage.PartitionNotExist) - entities = Prepare.prepare_insert_data(data, self._collection.schema) - res = conn.bulk_insert(self._collection.name, entities=entities, - partition_name=self._name, timeout=timeout, orm=True, **kwargs) - if kwargs.get("_async", False): - return MutationFuture(res) - return MutationResult(res) - - def delete(self, expr, timeout=None, **kwargs): - """ - Delete entities with an expression condition. - And return results to show how many entities will be deleted. + return self._collection.insert(data, self.name, timeout=timeout, **kwargs) - :param expr: The expression to specify entities to be deleted - :type expr: str + def delete(self, expr: str, timeout: Optional[float] = None, **kwargs): + """Delete entities with an expression condition. - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float + Args: + expr (``str``): The specified data to insert. + partition_names (``List[str]``): Name of partitions to delete entities. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server responds + or an error occurs. - :return: A MutationResult object contains a property named `delete_count` represents how many - entities will be deleted. - :rtype: MutationResult + Returns: + MutationResult: contains `delete_count` properties represents + how many entities might be deleted. - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok + Raises: + MilvusException: If anything goes wrong. - :example: - >>> from pymilvus import connections, Collection, Partition, FieldSchema, CollectionSchema, DataType - >>> connections.connect() + Examples: + >>> from pymilvus import Collection, Partition, FieldSchema, CollectionSchema, DataType + >>> schema = CollectionSchema([ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", DataType.FLOAT_VECTOR, dim=2) + ... ]) + >>> test_collection = Collection("test_partition_delete", schema) + >>> test_partition = Partition(test_collection, "comedy films") + >>> data = [ + ... [i for i in range(10)], + ... [[float(i) for i in range(2)] for _ in range(10)], + ... ] + >>> test_partition.insert(data) + (insert count: 10, delete count: 0, upsert count: 0, timestamp: 431044482906718212) + >>> test_partition.delete("film_id in [0, 1]") + (insert count: 0, delete count: 2, upsert count: 0, timestamp: 431044582560759811) + """ + return self._collection.delete(expr, self.name, timeout=timeout, **kwargs) + + def upsert( + self, + data: Union[List, pd.DataFrame, utils.SparseMatrixInputType], + timeout: Optional[float] = None, + **kwargs, + ) -> MutationResult: + """Upsert data into the collection. + + Args: + data (``list/tuple/pandas.DataFrame/sparse types``): The specified data to upsert + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server responds + or an error occurs. + **kwargs (``dict``): Optional upsert params + + * *partial_update* (``bool``, optional): Whether this is a partial update operation. + If True, only the specified fields will be updated while others remain unchanged + Default is False. + + Returns: + MutationResult: contains 2 properties `upsert_count`, and, `primary_keys` + `upsert_count`: how may entites have been upserted at Milvus, + `primary_keys`: list of primary keys of the upserted entities + Raises: + MilvusException: If anything goes wrong. + + Examples: + >>> from pymilvus import Collection, Partition, FieldSchema, CollectionSchema, DataType >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) ... ]) - >>> collection = Collection("test_partition_insert", schema) + >>> collection = Collection("test_partition_upsert", schema) >>> partition = Partition(collection, "comedy", "comedy films") >>> data = [ ... [i for i in range(10)], ... [[float(i) for i in range(2)] for _ in range(10)], ... ] - >>> partition.insert(data) - >>> partition.num_entities - >>> partition.num_entities - - >>> expr = "film_id in [ 0, 1 ]" - >>> res = partition.delete(expr) - >>> assert len(res) == 2 - >>> print(f"- Deleted entities: {res}") - - Delete results: [0, 1] + >>> res = partition.upsert(data) + >>> res.upsert_count + 10 """ + return self._collection.upsert(data, self.name, timeout=timeout, **kwargs) - conn = self._get_connection() - res = conn.delete(collection_name=self._collection.name, expr=expr, - partition_name=self._partition_name, timeout=timeout, **kwargs) - if kwargs.get("_async", False): - return MutationFuture(res) - return MutationResult(res) - - def search(self, data, anns_field, param, limit, expr=None, output_fields=None, timeout=None, round_decimal=-1, - **kwargs): - """ - Vector similarity search with an optional boolean expression as filters. - - :param data: The vectors of search data, the length of data is number of query (nq), the - dim of every vector in data must be equal to vector field's of collection. - :type data: list[list[float]] - :param anns_field: The vector field used to search of collection. - :type anns_field: str - :param param: The parameters of search, such as nprobe, etc. - :type param: dict - :param limit: The max number of returned record, we also called this parameter as topk. - :param round_decimal: The specified number of decimal places of returned distance - :type round_decimal: int - :param expr: The boolean expression used to filter attribute. - :type expr: str - :param output_fields: The fields to return in the search result, not supported now. - :type output_fields: list[str] - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur. - :type timeout: float - :param kwargs: - * *_async* (``bool``) -- - Indicate if invoke asynchronously. When value is true, method returns a - SearchFuture object; otherwise, method returns results from server directly. - * *_callback* (``function``) -- - The callback function which is invoked after server response successfully. It only - takes effect when _async is set to True. - * *consistency_level* (``str/int``) -- - Which consistency level to use when searching in the partition. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter will overwrite the same parameter specified when user created the collection, - if no consistency level was specified, search will use the consistency level when you create the collection. - * *guarantee_timestamp* (``int``) -- - This function instructs Milvus to see all operations performed before a provided timestamp. If no - such timestamp is provided, then Milvus will search all operations performed to date. - Note: only used in Customized consistency level. - * *graceful_time* (``int``) -- - Only used in bounded consistency level. If graceful_time is set, PyMilvus will use current timestamp minus - the graceful_time as the `guarantee_timestamp`. This option is 5s by default if not set. - * *travel_timestamp* (``int``) -- - Users can specify a timestamp in a search to get results based on a data view - at a specified point in time. - - :return: SearchResult: - SearchResult is iterable and is a 2d-array-like class, the first dimension is - the number of vectors to query (nq), the second dimension is the number of limit(topk). - :rtype: SearchResult - - :raises RpcError: If gRPC encounter an error. - :raises ParamError: If parameters are invalid. - :raises BaseException: If the return result from server is not ok. - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + def search( + self, + data: Union[List, utils.SparseMatrixInputType], + anns_field: str, + param: Dict, + limit: int, + expr: Optional[str] = None, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + round_decimal: int = -1, + **kwargs, + ) -> SearchResult: + """Conducts a vector similarity search with an optional boolean expression as filter. + + Args: + data (``List[List[float]]`` or sparse types): The vectors of search data. + the length of data is number of query (nq), + and the dim of every vector in data must be equal to the vector field of collection. + anns_field (``str``): The name of the vector field used to search of collection. + param (``dict[str, Any]``): + + The parameters of search. The followings are valid keys of param. + + * *nprobe*, *ef*, *search_k*, etc + Corresponding search params for a certain index. + + * *metric_type* (``str``) + similar metricy types, the value must be of type str. + + * *offset* (``int``, optional) + offset for pagination. + + * *limit* (``int``, optional) + limit for the search results and pagination. + + example for param:: + + { + "nprobe": 128, + "metric_type": "L2", + "offset": 10, + "limit": 10, + } + + limit (``int``): The max number of returned record, also known as `topk`. + expr (``str``): The boolean expression used to filter attribute. Default to None. + + example for expr:: + + "id_field >= 0", "id_field in [1, 2, 3, 4]" + + output_fields (``List[str]``, optional): + The name of fields to return in the search result. Can only get scalar fields. + round_decimal (``int``, optional): The specified number of decimal places of + returned distance......... Defaults to -1 means no round to returned distance. + **kwargs (``dict``): Optional search params + + * *_async* (``bool``, optional) + Indicate if invoke asynchronously. + Returns a SearchFuture if True, else returns results from server directly. + + * *_callback* (``function``, optional) + The callback function which is invoked after server response successfully. + It functions only if _async is set to True. + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + * *guarantee_timestamp* (``int``, optional) + Instructs Milvus to see all operations performed before this timestamp. + By default Milvus will search all operations performed to date. + + Note: only valid in Customized consistency level. + + * *graceful_time* (``int``, optional) + Search will use the (current_timestamp - the graceful_time) as the + `guarantee_timestamp`. By default with 5s. + + Note: only valid in Bounded consistency level + + Returns: + SearchResult: + Returns ``SearchResult`` if `_async` is False , otherwise ``SearchFuture`` + + .. _Metric type documentations: + https://milvus.io/docs/v2.2.x/metric.md + .. _Index documentations: + https://milvus.io/docs/v2.2.x/index.md + .. _How guarantee ts works: + https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> import random - >>> connections.connect() - >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) ... ]) >>> collection = Collection("test_collection_search", schema) + >>> collection.create_index( + ... "films", + ... {"index_type": "FLAT", "metric_type": "L2", "params": {}}) >>> partition = Partition(collection, "comedy", "comedy films") >>> # insert >>> data = [ @@ -402,8 +480,6 @@ def search(self, data, anns_field, param, limit, expr=None, output_fields=None, ... [[random.random() for _ in range(2)] for _ in range(10)], ... ] >>> partition.insert(data) - >>> partition.num_entities - 10 >>> partition.load() >>> # search >>> search_param = { @@ -419,65 +495,221 @@ def search(self, data, anns_field, param, limit, expr=None, output_fields=None, >>> assert len(hits) == 2 >>> print(f"- Total hits: {len(hits)}, hits ids: {hits.ids} ") - Total hits: 2, hits ids: [8, 5] - >>> print(f"- Top1 hit id: {hits[0].id}, distance: {hits[0].distance}, score: {hits[0].score} ") - - Top1 hit id: 8, distance: 0.10143111646175385, score: 0.10143111646175385 + >>> print(f"- Top1 hit id: {hits[0].id}, score: {hits[0].score} ") + - Top1 hit id: 8, score: 0.10143111646175385 """ - conn = self._get_connection() - res = conn.search(self._collection.name, data, anns_field, param, limit, - expr, [self._name], output_fields, timeout, round_decimal, **kwargs) - if kwargs.get("_async", False): - return SearchFuture(res) - return SearchResult(res) - def query(self, expr, output_fields=None, timeout=None, **kwargs): + return self._collection.search( + data=data, + anns_field=anns_field, + param=param, + limit=limit, + expr=expr, + partition_names=[self.name], + output_fields=output_fields, + round_decimal=round_decimal, + timeout=timeout, + **kwargs, + ) + + def hybrid_search( + self, + reqs: List, + rerank: BaseRanker, + limit: int, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + round_decimal: int = -1, + **kwargs, + ): + """Conducts multi vector similarity search with a rerank for rearrangement. + + Args: + reqs (``List[AnnSearchRequest]``): The vector search requests. + rerank (``BaseRanker``): The reranker for rearrange nummer of limit results. + limit (``int``): The max number of returned record, also known as `topk`. + + output_fields (``List[str]``, optional): + The name of fields to return in the search result. Can only get scalar fields. + round_decimal (``int``, optional): + The specified number of decimal places of returned distance. + Defaults to -1 means no round to returned distance. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server + responds or an error occurs. + **kwargs (``dict``): Optional search params + + * *_async* (``bool``, optional) + Indicate if invoke asynchronously. + Returns a SearchFuture if True, else returns results from server directly. + + * *_callback* (``function``, optional) + The callback function which is invoked after server response successfully. + It functions only if _async is set to True. + + * *offset* (``int``, optinal) + offset for pagination. + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + * *guarantee_timestamp* (``int``, optional) + Instructs Milvus to see all operations performed before this timestamp. + By default Milvus will search all operations performed to date. + + Note: only valid in Customized consistency level. + + * *graceful_time* (``int``, optional) + Search will use the (current_timestamp - the graceful_time) as the + `guarantee_timestamp`. By default with 5s. + + Note: only valid in Bounded consistency level + + Returns: + SearchResult: + Returns ``SearchResult`` if `_async` is False , otherwise ``SearchFuture`` + + .. _Metric type documentations: + https://milvus.io/docs/v2.2.x/metric.md + .. _Index documentations: + https://milvus.io/docs/v2.2.x/index.md + .. _How guarantee ts works: + https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import (Collection, FieldSchema, CollectionSchema, DataType + >>> AnnSearchRequest, RRFRanker, WeightedRanker) + >>> import random + >>> schema = CollectionSchema([ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2), + ... FieldSchema("poster", dtype=DataType.FLOAT_VECTOR, dim=2), + ... ]) + >>> collection = Collection("test_collection_search", schema) + >>> collection.create_index( + ... "films", + ... {"index_type": "FLAT", "metric_type": "L2", "params": {}}) + >>> collection.create_index( + ... "poster", + ... {"index_type": "FLAT", "metric_type": "L2", "params": {}}) + >>> partition = Partition(collection, "comedy", "comedy films") + >>> # insert + >>> data = [ + ... [i for i in range(10)], + ... [[random.random() for _ in range(2)] for _ in range(10)], + ... [[random.random() for _ in range(2)] for _ in range(10)], + ... ] + >>> partition.insert(data) + >>> partition.load() + >>> # search + >>> search_param1 = { + ... "data": [[1.0, 1.0]], + ... "anns_field": "films", + ... "param": {"metric_type": "L2"}, + ... "limit": 2, + ... "expr": "film_id > 0", + ... } + >>> req1 = AnnSearchRequest(**search_param1) + >>> search_param2 = { + ... "data": [[2.0, 2.0]], + ... "anns_field": "poster", + ... "param": {"metric_type": "L2", "offset": 1}, + ... "limit": 2, + ... "expr": "film_id > 0", + ... } + >>> req2 = AnnSearchRequest(**search_param2) + >>> res = partition.hybrid_search([req1, req2], WeightedRanker(0.9, 0.1), 2) + >>> assert len(res) == 1 + >>> hits = res[0] + >>> assert len(hits) == 2 + >>> print(f"- Total hits: {len(hits)}, hits ids: {hits.ids} ") + - Total hits: 2, hits ids: [8, 5] + >>> print(f"- Top1 hit id: {hits[0].id}, score: {hits[0].score} ") + - Top1 hit id: 8, score: 0.10143111646175385 """ - Query with a set of criteria, and results in a list of records that match the query exactly. - - :param expr: The query expression - :type expr: str - - :param output_fields: A list of fields to return - :type output_fields: list[str] - - :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout - is set to None, client waits until server response or error occur - :type timeout: float - - :param kwargs: - * *consistency_level* (``str/int``) -- - Which consistency level to use during a query on the collection. For details, see - https://github.com/milvus-io/milvus/blob/master/docs/developer_guides/how-guarantee-ts-works.md. - Note: this parameter will overwrite the same parameter specified when user created the collection, - if no consistency level was specified, query will use the consistency level when you create the collection. - * *guarantee_timestamp* (``int``) -- - This function instructs Milvus to see all operations performed before a provided timestamp. If no - such timestamp is specified, Milvus will query all operations performed to date. - Note: only used in Customized consistency level. - * *graceful_time* (``int``) -- - Only used in bounded consistency level. If graceful_time is set, PyMilvus will use current timestamp minus - the graceful_time as the `guarantee_timestamp`. This option is 5s by default if not set. - * *travel_timestamp* (``int``) -- - Users can specify a timestamp in a search to get results based on a data view - at a specified point in time. - - :return: A list that contains all results - :rtype: list - - :raises RpcError: If gRPC encounter an error - :raises ParamError: If parameters are invalid - :raises BaseException: If the return result from server is not ok - - :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType + + return self._collection.hybrid_search( + reqs=reqs, + rerank=rerank, + limit=limit, + partition_names=[self.name], + output_fields=output_fields, + round_decimal=round_decimal, + timeout=timeout, + **kwargs, + ) + + def query( + self, + expr: str, + output_fields: Optional[List[str]] = None, + timeout: Optional[float] = None, + **kwargs, + ): + """Query with expressions + + Args: + expr (``str``): The query expression. + output_fields(``List[str]``): A list of field names to return. Defaults to None. + timeout (``float``, optional): A duration of time in seconds to allow for the RPC. + If timeout is set to None, the client keeps waiting until the server responds + or an error occurs. + **kwargs (``dict``, optional): + + * *consistency_level* (``str/int``, optional) + Which consistency level to use when searching in the collection. + + Options of consistency level: Strong, Bounded, Eventually, Session, Customized. + + Note: this parameter overwrites the same one specified when creating collection, + if no consistency level was specified, search will use the + consistency level when you create the collection. + + * *guarantee_timestamp* (``int``, optional) + Instructs Milvus to see all operations performed before this timestamp. + By default Milvus will search all operations performed to date. + + Note: only valid in Customized consistency level. + + * *graceful_time* (``int``, optional) + Search will use the (current_timestamp - the graceful_time) as the + `guarantee_timestamp`. By default with 5s. + + Note: only valid in Bounded consistency level + + * *offset* (``int``) + Combined with limit to enable pagination + + * *limit* (``int``) + Combined with limit to enable pagination + + Returns: + List, contains all results + + Raises: + MilvusException: If anything goes wrong + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType >>> import random - >>> connections.connect() - >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("film_date", DataType.INT64), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) ... ]) >>> collection = Collection("test_collection_query", schema) + >>> collection.create_index( + ... "films", + ... {"index_type": "FLAT", "metric_type": "L2", "params": {}}) >>> partition = Partition(collection, "comedy", "comedy films") >>> # insert >>> data = [ @@ -486,8 +718,6 @@ def query(self, expr, output_fields=None, timeout=None, **kwargs): ... [[random.random() for _ in range(2)] for _ in range(10)], ... ] >>> partition.insert(data) - >>> partition.num_entities - 10 >>> partition.load() >>> # query >>> expr = "film_id in [ 0, 1 ]" @@ -496,6 +726,22 @@ def query(self, expr, output_fields=None, timeout=None, **kwargs): >>> print(f"- Query results: {res}") - Query results: [{'film_id': 0, 'film_date': 2000}, {'film_id': 1, 'film_date': 2001}] """ - conn = self._get_connection() - res = conn.query(self._collection.name, expr, output_fields, [self._name], timeout, **kwargs) - return res + + return self._collection.query( + expr=expr, + output_fields=output_fields, + partition_names=[self.name], + timeout=timeout, + **kwargs, + ) + + def get_replicas(self, timeout: Optional[float] = None, **kwargs) -> Replica: + """Get the current loaded replica information + + Args: + timeout (``float``, optional): An optional duration of time in seconds to allow for + the RPC. When timeout is set to None, client waits until server response or error occur. + Returns: + Replica: All the replica information. + """ + return self._collection.get_replicas(timeout=timeout, **kwargs) diff --git a/pymilvus/orm/prepare.py b/pymilvus/orm/prepare.py index f0c5d981e..44080b68d 100644 --- a/pymilvus/orm/prepare.py +++ b/pymilvus/orm/prepare.py @@ -9,65 +9,148 @@ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express # or implied. See the License for the specific language governing permissions and limitations under # the License. -import copy -import numpy -import pandas +from typing import List, Tuple, Union -from .exceptions import DataNotMatchException, DataTypeNotSupportException, ExceptionsMessage +import numpy as np +import pandas as pd + +from pymilvus.client.types import DataType +from pymilvus.exceptions import ( + DataNotMatchException, + DataTypeNotSupportException, + ExceptionsMessage, + ParamError, +) + +from .schema import CollectionSchema class Prepare: @classmethod - def prepare_insert_data(cls, data, schema): - if not isinstance(data, (list, tuple, pandas.DataFrame)): - raise DataTypeNotSupportException(0, ExceptionsMessage.DataTypeNotSupport) + def prepare_data( + cls, + data: Union[List, Tuple, pd.DataFrame], + schema: CollectionSchema, + is_insert: bool = True, + ) -> List: + if not isinstance(data, (list, tuple, pd.DataFrame)): + raise DataTypeNotSupportException(message=ExceptionsMessage.DataTypeNotSupport) fields = schema.fields - entities = [] - raw_lengths = [] - if isinstance(data, pandas.DataFrame): - if schema.auto_id: - if schema.primary_field.name in data: - if len(fields) != len(data.columns): - raise DataNotMatchException(0, ExceptionsMessage.FieldsNumInconsistent) - if not data[schema.primary_field.name].isnull().all(): - raise DataNotMatchException(0, ExceptionsMessage.AutoIDWithData) + entities = [] # Entities + + if isinstance(data, pd.DataFrame): + if ( + schema.auto_id + and schema.primary_field.name in data + and is_insert + and not data[schema.primary_field.name].isnull().all() + ): + raise DataNotMatchException(message=ExceptionsMessage.AutoIDWithData) + # TODO(SPARSE): support pd.SparseDtype for sparse float vector field + for field in fields: + if field.is_primary and field.auto_id and is_insert: + continue + if field.is_function_output: + continue + values = [] + if field.name in list(data.columns): + values = list(data[field.name]) + entities.append({"name": field.name, "type": field.dtype, "values": values}) + return entities + + tmp_fields = list( + filter( + lambda field: not (field.is_primary and field.auto_id and is_insert) + and not field.is_function_output, + fields, + ) + ) + + vec_dtype_checker = { + DataType.FLOAT_VECTOR: lambda ndarr: ndarr.dtype in ("float32", "float64"), + DataType.FLOAT16_VECTOR: lambda ndarr: ndarr.dtype in ("float16",), + DataType.BFLOAT16_VECTOR: lambda ndarr: ndarr.dtype in ("bfloat16",), + } + + wrong_field_type = "Wrong type for vector field: {}, expect={}, got={}" + wrong_ndarr_type = "Wrong type for np.ndarray for vector field: {}, expect={}, got={}" + for i, field in enumerate(tmp_fields): + try: + f_data = data[i] + # the last missing part of data is also completed in order according to the schema + except IndexError: + entities.append({"name": field.name, "type": field.dtype, "values": []}) + + d = [] + if field.dtype == DataType.FLOAT_VECTOR: + is_valid_ndarray = vec_dtype_checker[field.dtype] + if isinstance(f_data, np.ndarray): + if not is_valid_ndarray(f_data): + raise ParamError( + message=wrong_ndarr_type.format( + field.name, "np.float32/np.float64", f_data.dtype + ) + ) + d = f_data.tolist() + + elif isinstance(f_data[0], np.ndarray): + for ndarr in f_data: + if not is_valid_ndarray(ndarr): + raise ParamError( + message=wrong_ndarr_type.format( + field.name, "np.float32/np.float64", ndarr.dtype + ) + ) + d.append(ndarr.tolist()) + else: - if len(fields) != len(data.columns)+1: - raise DataNotMatchException(0, ExceptionsMessage.FieldsNumInconsistent) + d = f_data if f_data is not None else [] + + elif field.dtype == DataType.FLOAT16_VECTOR: + is_valid_ndarray = vec_dtype_checker[field.dtype] + if isinstance(f_data[0], np.ndarray): + for ndarr in f_data: + if not is_valid_ndarray(ndarr): + raise ParamError( + message=wrong_ndarr_type.format( + field.name, "np.float16", ndarr.dtype + ) + ) + d.append(ndarr.view(np.uint8).tobytes()) + else: + raise ParamError( + message=wrong_field_type.format( + field.name, + "List", + f"List{type(f_data[0])})", + ) + ) + + elif field.dtype == DataType.BFLOAT16_VECTOR: + is_valid_ndarray = vec_dtype_checker[field.dtype] + if isinstance(f_data[0], np.ndarray): + for ndarr in f_data: + if not is_valid_ndarray(ndarr): + raise ParamError( + message=wrong_ndarr_type.format( + field.name, "np.bfloat16", ndarr.dtype + ) + ) + d.append(ndarr.view(np.uint8).tobytes()) + else: + raise ParamError( + message=wrong_field_type.format( + field.name, + "List", + f"List{type(f_data[0])})", + ) + ) + else: - if len(fields) != len(data.columns): - raise DataNotMatchException(0, ExceptionsMessage.FieldsNumInconsistent) - for i, field in enumerate(fields): - if field.is_primary and field.auto_id: - continue - entities.append({"name": field.name, - "type": field.dtype, - "values": list(data[field.name])}) - raw_lengths.append(len(data[field.name])) - else: - if schema.auto_id: - if len(data) + 1 != len(fields): - raise DataNotMatchException(0, ExceptionsMessage.FieldsNumInconsistent) - - tmp_fields = copy.deepcopy(fields) - for i, field in enumerate(tmp_fields): - if field.is_primary and field.auto_id: - tmp_fields.pop(i) - - for i, field in enumerate(tmp_fields): - if isinstance(data[i], numpy.ndarray): - raise DataTypeNotSupportException(0, ExceptionsMessage.NdArrayNotSupport) - - entities.append({ - "name": field.name, - "type": field.dtype, - "values": data[i]}) - raw_lengths.append(len(data[i])) - - lengths = list(set(raw_lengths)) - if len(lengths) > 1: - raise DataNotMatchException(0, ExceptionsMessage.DataLengthsInconsistent) + d = f_data if f_data is not None else [] + + entities.append({"name": field.name, "type": field.dtype, "values": d}) return entities diff --git a/pymilvus/orm/role.py b/pymilvus/orm/role.py new file mode 100644 index 000000000..21e1b935f --- /dev/null +++ b/pymilvus/orm/role.py @@ -0,0 +1,350 @@ +# Copyright (C) 2019-2021 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. + +from typing import Optional + +from .connections import connections + +INCLUDE_USER_INFO, NOT_INCLUDE_USER_INFO = True, False + + +class Role: + """Role, can be granted privileges which are allowed to execute some objects' apis.""" + + def __init__(self, name: str, using: str = "default", **kwargs) -> None: + """Constructs a role by name + :param name: role name. + :type name: str + """ + self._name = name + self._using = using + self._kwargs = kwargs + + def _get_connection(self): + return connections._fetch_handler(self._using) + + @property + def name(self): + return self._name + + def create(self): + """Create a role + It will success if the role isn't existed, otherwise fail. + + :example: + >>> from pymilvus import connections, utility + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(name=role_name) + >>> role.create() + >>> roles = utility.list_roles() + >>> print(f"roles in Milvus: {roles}") + """ + return self._get_connection().create_role(self._name) + + def drop(self): + """Drop a role + It will success if the role is existed, otherwise fail. + + :example: + >>> from pymilvus import connections, utility + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(name=role_name) + >>> role.drop() + >>> roles = utility.list_roles() + >>> print(f"roles in Milvus: {roles}") + """ + return self._get_connection().drop_role(self._name) + + def add_user(self, username: str): + """Add user to role + The user will get permissions that the role are allowed to perform operations. + :param username: user name. + :type username: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(name=role_name) + >>> role.add_user(username) + >>> users = role.get_users() + >>> print(f"users added to the role: {users}") + """ + return self._get_connection().add_user_to_role(username, self._name) + + def remove_user(self, username: str): + """Remove user from role + The user will remove permissions that the role are allowed to perform operations. + :param username: user name. + :type username: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(name=role_name) + >>> role.remove_user(username) + >>> users = role.get_users() + >>> print(f"users added to the role: {users}") + """ + return self._get_connection().remove_user_from_role(username, self._name) + + def get_users(self): + """Get all users who are added to the role. + :return a RoleInfo object which contains a RoleItem group + According to the RoleItem, you can get a list of usernames. + + RoleInfo groups: + - UserItem: , + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(name=role_name) + >>> users = role.get_users() + >>> print(f"users added to the role: {users}") + """ + roles = self._get_connection().select_one_role(self._name, INCLUDE_USER_INFO) + if len(roles.groups) == 0: + return [] + return roles.groups[0].users + + def is_exist(self): + """Check whether the role is existed. + :return a bool value + It will be True if the role is existed, otherwise False. + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(name=role_name) + >>> is_exist = role.is_exist() + >>> print(f"the role: {is_exist}") + """ + roles = self._get_connection().select_one_role(self._name, NOT_INCLUDE_USER_INFO) + return len(roles.groups) != 0 + + def grant(self, object: str, object_name: str, privilege: str, db_name: str = ""): + """Grant a privilege for the role + :param object: object type. + :type object: str + :param object_name: identifies a specific object name. + :type object_name: str + :param privilege: privilege name. + :type privilege: str + :param db_name: db name. + :type db_name: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.grant("Collection", collection_name, "Insert") + """ + return self._get_connection().grant_privilege( + self._name, object, object_name, privilege, db_name + ) + + def revoke(self, object: str, object_name: str, privilege: str, db_name: str = ""): + """Revoke a privilege for the role + Args: + object(str): object type. + object_name(str): identifies a specific object name. + privilege(str): privilege name. + db_name(str): db name. + + Examples: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.revoke("Collection", collection_name, "Insert") + """ + return self._get_connection().revoke_privilege( + self._name, object, object_name, privilege, db_name + ) + + def grant_v2(self, privilege: str, collection_name: str, db_name: Optional[str] = None): + """Grant a privilege for the role + :param privilege: privilege name. + :type privilege: str + :param collection_name: collection name. + :type collection_name: str + :param db_name: db name. Optional. If None, use the default db. + :type db_name: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.grant_v2("Insert", collection_name, db_name=db_name) + """ + return self._get_connection().grant_privilege_v2( + self._name, + privilege, + collection_name, + db_name=db_name, + ) + + def revoke_v2(self, privilege: str, collection_name: str, db_name: Optional[str] = None): + """Revoke a privilege for the role + :param privilege: privilege name. + :type privilege: str + :param collection_name: collection name. + :type collection_name: str + :param db_name: db name. Optional. If None, use the default db. + :type db_name: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.revoke_v2("Insert", collection_name, db_name=db_name) + """ + return self._get_connection().revoke_privilege_v2( + self._name, + privilege, + collection_name, + db_name=db_name, + ) + + def list_grant(self, object: str, object_name: str, db_name: str = ""): + """List a grant info for the role and the specific object + :param object: object type. + :type object: str + :param object_name: identifies a specific object name. + :type object_name: str + :param db_name: db name. + :type db_name: str + :return a GrantInfo object + :rtype GrantInfo + + GrantInfo groups: + - GrantItem: , , , + , + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.list_grant("Collection", collection_name) + """ + return self._get_connection().select_grant_for_role_and_object( + self._name, object, object_name, db_name + ) + + def list_grants(self, db_name: str = ""): + """List a grant info for the role + :param db_name: db name. + :type db_name: str + :return a GrantInfo object + :rtype GrantInfo + + GrantInfo groups: + - GrantItem: , , , + , + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.list_grants() + """ + return self._get_connection().select_grant_for_one_role(self._name, db_name) + + def create_privilege_group(self, privilege_group: str): + """Create a privilege group for the role + :param privilege_group: privilege group name. + :type privilege_group: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.create_privilege_group(privilege_group="privilege_group") + """ + return self._get_connection().create_privilege_group(privilege_group) + + def drop_privilege_group(self, privilege_group: str): + """Drop a privilege group for the role + :param privilege_group: privilege group name. + :type privilege_group: str + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.drop_privilege_group(privilege_group="privilege_group") + """ + return self._get_connection().drop_privilege_group(privilege_group) + + def list_privilege_groups(self): + """List all privilege groups for the role + :return a PrivilegeGroupInfo object + :rtype PrivilegeGroupInfo + + PrivilegeGroupInfo groups: + - PrivilegeGroupItem: , + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.list_privilege_groups() + """ + return self._get_connection().list_privilege_groups() + + def add_privileges_to_group(self, privilege_group: str, privileges: list): + """Add privileges to a privilege group for the role + :param privilege_group: privilege group name. + :type privilege_group: str + :param privileges: a list of privilege names. + :type privileges: list + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.add_privileges_to_group(privilege_group="privilege_group", + >>> privileges=["Insert","Release"]) + """ + return self._get_connection().add_privileges_to_group(privilege_group, privileges) + + def remove_privileges_from_group(self, privilege_group: str, privileges: list): + """Remove privileges from a privilege group for the role + :param privilege_group: privilege group name. + :type privilege_group: str + :param privileges: a list of privilege names. + :type privileges: list + + :example: + >>> from pymilvus import connections + >>> from pymilvus.orm.role import Role + >>> connections.connect() + >>> role = Role(role_name) + >>> role.remove_privileges_from_group(privilege_group="privilege_group", + >>> privileges=["Insert","Release"]) + """ + return self._get_connection().remove_privileges_from_group(privilege_group, privileges) diff --git a/pymilvus/orm/schema.py b/pymilvus/orm/schema.py index c62766a9a..0592764a3 100644 --- a/pymilvus/orm/schema.py +++ b/pymilvus/orm/schema.py @@ -11,95 +11,292 @@ # the License. import copy -from typing import List -import pandas -from pandas.api.types import is_list_like +from typing import Any, Dict, List, Optional, Union -from .constants import VECTOR_COMMON_TYPE_PARAMS -from .types import DataType, map_numpy_dtype_to_datatype, infer_dtype_bydata -from .exceptions import ( +import orjson +import pandas as pd +from pandas.api.types import is_list_like, is_scalar + +from pymilvus.client.types import FunctionType +from pymilvus.client.utils import convert_struct_fields_to_user_format +from pymilvus.exceptions import ( + AutoIDException, CannotInferSchemaException, + ClusteringKeyException, + DataNotMatchException, DataTypeNotSupportException, - PrimaryKeyException, + ExceptionsMessage, FieldsTypeException, FieldTypeException, - AutoIDException, - ExceptionsMessage + FunctionsTypeException, + ParamError, + PartitionKeyException, + PrimaryKeyException, + SchemaNotReadyException, +) +from pymilvus.grpc_gen import schema_pb2 as schema_types +from pymilvus.settings import Config + +from .constants import COMMON_TYPE_PARAMS +from .types import ( + DataType, + infer_dtype_by_scalar_data, + infer_dtype_bydata, + map_numpy_dtype_to_datatype, ) +def validate_primary_key(primary_field: Any): + if primary_field is None: + raise PrimaryKeyException(message=ExceptionsMessage.NoPrimaryKey) + + if primary_field.dtype not in [DataType.INT64, DataType.VARCHAR]: + raise PrimaryKeyException(message=ExceptionsMessage.PrimaryKeyType) + + +def validate_partition_key( + partition_key_field_name: Any, partition_key_field: Any, primary_field_name: Any +): + # not allow partition_key field is primary key field + if partition_key_field is not None: + if partition_key_field.name == primary_field_name: + PartitionKeyException(message=ExceptionsMessage.PartitionKeyNotPrimary) + + if partition_key_field.dtype not in [DataType.INT64, DataType.VARCHAR]: + raise PartitionKeyException(message=ExceptionsMessage.PartitionKeyType) + elif partition_key_field_name is not None: + raise PartitionKeyException( + message=ExceptionsMessage.PartitionKeyFieldNotExist % partition_key_field_name + ) + + +def validate_clustering_key(clustering_key_field_name: Any, clustering_key_field: Any): + if clustering_key_field is not None: + if clustering_key_field.dtype not in [ + DataType.INT8, + DataType.INT16, + DataType.INT32, + DataType.INT64, + DataType.FLOAT, + DataType.DOUBLE, + DataType.VARCHAR, + DataType.FLOAT_VECTOR, + ]: + raise ClusteringKeyException(message=ExceptionsMessage.ClusteringKeyType) + elif clustering_key_field_name is not None: + raise ClusteringKeyException( + message=ExceptionsMessage.ClusteringKeyFieldNotExist % clustering_key_field_name + ) + + class CollectionSchema: - def __init__(self, fields, description="", **kwargs): + def __init__( + self, + fields: List, + description: str = "", + struct_fields: Optional[List] = None, + functions: Optional[List] = None, + **kwargs, + ): + self._kwargs = copy.deepcopy(kwargs) + self._fields = [] + self._struct_fields = [] + self._description = description + # if "enable_dynamic_field" is not in kwargs, we keep None here + self._enable_dynamic_field = self._kwargs.get("enable_dynamic_field", None) + self._primary_field = None + self._partition_key_field = None + self._clustering_key_field = None + + self._functions = [] + if functions: + if not isinstance(functions, list): + raise FunctionsTypeException(message=ExceptionsMessage.FunctionsType) + for function in functions: + if not isinstance(function, Function): + raise SchemaNotReadyException(message=ExceptionsMessage.FunctionIncorrectType) + self._functions = functions + if not isinstance(fields, list): - raise FieldsTypeException(0, ExceptionsMessage.FieldsType) + raise FieldsTypeException(message=ExceptionsMessage.FieldsType) + for field in fields: + if not isinstance(field, FieldSchema): + raise FieldTypeException(message=ExceptionsMessage.FieldType) self._fields = [copy.deepcopy(field) for field in fields] - primary_field = kwargs.get("primary_field", None) + + if struct_fields is not None: + for struct in struct_fields: + if not isinstance(struct, StructFieldSchema): + raise FieldTypeException(message=ExceptionsMessage.FieldType) + self._struct_fields = [copy.deepcopy(struct) for struct in struct_fields] + + self._mark_output_fields() + self._check_kwargs() + if kwargs.get("check_fields", True): + self._check_fields() + + def _check_kwargs(self): + primary_field_name = self._kwargs.get("primary_field", None) + partition_key_field_name = self._kwargs.get("partition_key_field", None) + clustering_key_field_name = self._kwargs.get("clustering_key_field_name", None) + if primary_field_name is not None and not isinstance(primary_field_name, str): + raise PrimaryKeyException(message=ExceptionsMessage.PrimaryFieldType) + if partition_key_field_name is not None and not isinstance(partition_key_field_name, str): + raise PartitionKeyException(message=ExceptionsMessage.PartitionKeyFieldType) + if clustering_key_field_name is not None and not isinstance(clustering_key_field_name, str): + raise ClusteringKeyException(message=ExceptionsMessage.ClusteringKeyFieldType) + + if "auto_id" in self._kwargs and not isinstance(self._kwargs["auto_id"], bool): + raise AutoIDException(0, ExceptionsMessage.AutoIDType) + + def _check_fields(self): + primary_field_name = self._kwargs.get("primary_field", None) + partition_key_field_name = self._kwargs.get("partition_key_field", None) + clustering_key_field_name = self._kwargs.get("clustering_key_field", None) for field in self._fields: - if not isinstance(field, FieldSchema): - raise FieldTypeException(0, ExceptionsMessage.FieldType) - if primary_field == field.name: + if primary_field_name and primary_field_name == field.name: field.is_primary = True - self._primary_field = None - for field in self._fields: + + if partition_key_field_name and partition_key_field_name == field.name: + field.is_partition_key = True + if field.is_primary: - if primary_field is not None and primary_field != field.name: - raise PrimaryKeyException(0, ExceptionsMessage.PrimaryKeyOnlyOne) + if primary_field_name is not None and primary_field_name != field.name: + msg = ExceptionsMessage.PrimaryKeyOnlyOne % (primary_field_name, field.name) + raise PrimaryKeyException(message=msg) self._primary_field = field - primary_field = field.name + primary_field_name = field.name - if self._primary_field is None: - raise PrimaryKeyException(0, ExceptionsMessage.PrimaryKeyNotExist) + if field.is_partition_key: + if partition_key_field_name is not None and partition_key_field_name != field.name: + msg = ExceptionsMessage.PartitionKeyOnlyOne % ( + partition_key_field_name, + field.name, + ) + raise PartitionKeyException(message=msg) + self._partition_key_field = field + partition_key_field_name = field.name - if self._primary_field.dtype not in [DataType.INT64]: - raise PrimaryKeyException(0, ExceptionsMessage.PrimaryKeyType) + if clustering_key_field_name and clustering_key_field_name == field.name: + field.is_clustering_key = True - self._auto_id = kwargs.get("auto_id", None) - if "auto_id" in kwargs: - if not isinstance(self._auto_id, bool): - raise AutoIDException(0, ExceptionsMessage.AutoIDType) - if self._primary_field.auto_id is not None and self._primary_field.auto_id != self._auto_id: - raise AutoIDException(0, ExceptionsMessage.AutoIDInconsistent) - self._primary_field.auto_id = self._auto_id - else: - if self._primary_field.auto_id is None: - self._primary_field.auto_id = False - self._auto_id = self._primary_field.auto_id + if field.is_clustering_key: + if ( + clustering_key_field_name is not None + and clustering_key_field_name != field.name + ): + msg = ExceptionsMessage.ClusteringKeyOnlyOne % ( + clustering_key_field_name, + field.name, + ) + raise ClusteringKeyException(message=msg) + self._clustering_key_field = field + clustering_key_field_name = field.name - self._description = description - self._kwargs = copy.deepcopy(kwargs) + validate_primary_key(self._primary_field) + validate_partition_key( + partition_key_field_name, self._partition_key_field, self._primary_field.name + ) + validate_clustering_key(clustering_key_field_name, self._clustering_key_field) - def __repr__(self): - _dict = { - "auto_id": self.auto_id, - "description": self._description, - "fields": self._fields, - } - r = ["{\n"] - s = " {}: {}\n" - for k, v in _dict.items(): - r.append(s.format(k, v)) - r.append("}") - return "".join(r) - - def __len__(self): + auto_id = self._kwargs.get("auto_id", False) + if auto_id: + self._primary_field.auto_id = auto_id + + def _check_functions(self): + for function in self._functions: + for output_field_name in function.output_field_names: + output_field = next( + (field for field in self._fields if field.name == output_field_name), None + ) + if output_field is None: + raise ParamError( + message=f"{ExceptionsMessage.FunctionMissingOutputField}: {output_field_name}" + ) + + if output_field is not None and ( + output_field.is_primary + or output_field.is_partition_key + or output_field.is_clustering_key + ): + raise ParamError(message=ExceptionsMessage.FunctionInvalidOutputField) + + for input_field_name in function.input_field_names: + input_field = next( + (field for field in self._fields if field.name == input_field_name), None + ) + if input_field is None: + raise ParamError( + message=f"{ExceptionsMessage.FunctionMissingInputField}: {input_field_name}" + ) + + function.verify(self) + + def _mark_output_fields(self): + for function in self._functions: + for output_field_name in function.output_field_names: + output_field = next( + (field for field in self._fields if field.name == output_field_name), None + ) + if output_field is not None: + output_field.is_function_output = True + + def _check(self): + self._check_kwargs() + self._check_fields() + self._check_functions() + + def __repr__(self) -> str: + return str(self.to_dict()) + + def __len__(self) -> int: return len(self.fields) - def __eq__(self, other): - """ - The order of the fields of schema must be consistent. - """ + def __eq__(self, other: object): + """The order of the fields of schema must be consistent.""" return self.to_dict() == other.to_dict() @classmethod - def construct_from_dict(cls, raw): - fields = [FieldSchema.construct_from_dict(field_raw) for field_raw in raw['fields']] - return CollectionSchema(fields, raw.get('description', "")) + def construct_from_dict(cls, raw: Dict): + fields = [FieldSchema.construct_from_dict(field_raw) for field_raw in raw["fields"]] + + struct_fields = None + if raw.get("struct_fields"): + struct_fields = [] + for struct_field_raw in raw["struct_fields"]: + struct_fields.append(StructFieldSchema.construct_from_dict(struct_field_raw)) + + elif raw.get("struct_array_fields"): + converted_struct_fields = convert_struct_fields_to_user_format( + raw["struct_array_fields"] + ) + struct_fields = [] + for struct_field_dict in converted_struct_fields: + struct_fields.append(StructFieldSchema.construct_from_dict(struct_field_dict)) + + if "functions" in raw: + functions = [ + Function.construct_from_dict(function_raw) for function_raw in raw["functions"] + ] + else: + functions = [] + enable_dynamic_field = raw.get("enable_dynamic_field", False) + return CollectionSchema( + fields, + struct_fields=struct_fields, + description=raw.get("description", ""), + functions=functions, + enable_dynamic_field=enable_dynamic_field, + ) @property - # TODO: def primary_field(self): return self._primary_field + @property + def partition_key_field(self): + return self._partition_key_field + @property def fields(self): """ @@ -117,6 +314,20 @@ def fields(self): """ return self._fields + @property + def struct_fields(self): + return self._struct_fields + + @property + def functions(self): + """ + Returns the functions of the CollectionSchema. + + :return list: + List of Function, return when operation is successful. + """ + return self._functions + @property def description(self): """ @@ -150,96 +361,221 @@ def auto_id(self): >>> schema.auto_id False """ - return self._auto_id + if self.primary_field: + return self.primary_field.auto_id + return self._kwargs.get("auto_id", False) + + @auto_id.setter + def auto_id(self, value: bool): + if self.primary_field: + self.primary_field.auto_id = bool(value) + + @property + def enable_dynamic_field(self): + return bool(self._enable_dynamic_field) + + @enable_dynamic_field.setter + def enable_dynamic_field(self, value: bool): + self._enable_dynamic_field = bool(value) def to_dict(self): - _dict = { + res = { "auto_id": self.auto_id, "description": self._description, "fields": [s.to_dict() for s in self._fields], + "enable_dynamic_field": self.enable_dynamic_field, } - return _dict + if self._functions is not None and len(self._functions) > 0: + res["functions"] = [s.to_dict() for s in self._functions] + if self._struct_fields is not None and len(self._struct_fields) > 0: + res["struct_fields"] = [s.to_dict() for s in self._struct_fields] + return res + + def verify(self): + # final check, detect obvious problems + self._check() + + def add_field(self, field_name: str, datatype: DataType, **kwargs): + if ( + datatype == DataType.ARRAY + and "element_type" in kwargs + and kwargs["element_type"] == DataType.STRUCT + ): + if "struct_schema" not in kwargs: + raise ParamError(message="Param struct_schema is required when datatype is STRUCT") + struct_schema = kwargs.pop("struct_schema") + struct_schema.name = field_name + if "max_capacity" not in kwargs: + raise ParamError(message="Param max_capacity is required when datatype is STRUCT") + struct_schema.max_capacity = kwargs["max_capacity"] + + if "mmap_enabled" in kwargs: + struct_schema._type_params["mmap_enabled"] = kwargs["mmap_enabled"] + + self._struct_fields.append(struct_schema) + return self + + field = FieldSchema(field_name, datatype, **kwargs) + self._fields.append(field) + self._mark_output_fields() + return self + + def add_struct_field(self, struct_field_schema: "StructFieldSchema"): + self._struct_fields.append(struct_field_schema) + return self + + def add_function(self, function: "Function"): + if not isinstance(function, Function): + raise ParamError(message=ExceptionsMessage.FunctionIncorrectType) + self._functions.append(function) + self._mark_output_fields() + return self class FieldSchema: - def __init__(self, name, dtype, description="", **kwargs): + def __init__(self, name: str, dtype: DataType, description: str = "", **kwargs) -> None: self.name = name try: - DataType(dtype) + dtype = DataType(dtype) except ValueError: - raise DataTypeNotSupportException(0, ExceptionsMessage.FieldDtype) from None + raise DataTypeNotSupportException(message=ExceptionsMessage.FieldDtype) from None if dtype == DataType.UNKNOWN: - raise DataTypeNotSupportException(0, ExceptionsMessage.FieldDtype) + raise DataTypeNotSupportException(message=ExceptionsMessage.FieldDtype) self._dtype = dtype self._description = description self._type_params = {} self._kwargs = copy.deepcopy(kwargs) if not isinstance(kwargs.get("is_primary", False), bool): - raise PrimaryKeyException(0, ExceptionsMessage.IsPrimaryType) + raise PrimaryKeyException(message=ExceptionsMessage.IsPrimaryType) self.is_primary = kwargs.get("is_primary", False) - self.auto_id = kwargs.get("auto_id", None) + self.is_dynamic = kwargs.get("is_dynamic", False) + self.nullable = kwargs.get("nullable", False) + self.auto_id = kwargs.get("auto_id", False) if "auto_id" in kwargs: if not isinstance(self.auto_id, bool): - raise AutoIDException(0, ExceptionsMessage.AutoIDType) + raise AutoIDException(message=ExceptionsMessage.AutoIDType) if not self.is_primary and self.auto_id: - raise PrimaryKeyException(0, ExceptionsMessage.AutoIDOnlyOnPK) + raise PrimaryKeyException(message=ExceptionsMessage.AutoIDOnlyOnPK) + + if not isinstance(kwargs.get("is_partition_key", False), bool): + raise PartitionKeyException(message=ExceptionsMessage.IsPartitionKeyType) + if not isinstance(kwargs.get("is_clustering_key", False), bool): + raise ClusteringKeyException(message=ExceptionsMessage.IsClusteringKeyType) + self.is_partition_key = kwargs.get("is_partition_key", False) + self.is_clustering_key = kwargs.get("is_clustering_key", False) + self.default_value = kwargs.get("default_value") + if "default_value" in kwargs and self.default_value is None and not self.nullable: + raise ParamError(message=ExceptionsMessage.DefaultValueInvalid) + if isinstance(self.default_value, schema_types.ValueField): + if self.default_value.WhichOneof("data") is None: + self.default_value = None + else: + self.default_value = infer_default_value_bydata(kwargs.get("default_value")) + self.element_type = kwargs.get("element_type") + if "mmap_enabled" in kwargs: + self._type_params["mmap_enabled"] = kwargs["mmap_enabled"] + + for key in ["analyzer_params", "multi_analyzer_params"]: + if key in self._kwargs and isinstance(self._kwargs[key], dict): + self._kwargs[key] = orjson.dumps(self._kwargs[key]).decode(Config.EncodeProtocol) self._parse_type_params() + self.is_function_output = False - def __repr__(self): - r = ["{\n"] - s = " {}: {}\n" - for k, v in self.to_dict().items(): - r.append(s.format(k, v)) - r.append(" }") - return "".join(r) + def __repr__(self) -> str: + return str(self.to_dict()) - def __deepcopy__(self, memodict=None): + def __deepcopy__(self, memodict: Optional[Dict] = None): if memodict is None: memodict = {} return self.construct_from_dict(self.to_dict()) def _parse_type_params(self): # update self._type_params according to self._kwargs - if self._dtype not in (DataType.BINARY_VECTOR, DataType.FLOAT_VECTOR): + if self._dtype not in ( + DataType.BINARY_VECTOR, + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.VARCHAR, + DataType.ARRAY, + DataType.SPARSE_FLOAT_VECTOR, + DataType.INT8_VECTOR, + DataType._ARRAY_OF_VECTOR, + ): return if not self._kwargs: return - # currently only support ndim if self._kwargs: - for k in VECTOR_COMMON_TYPE_PARAMS: + for k in COMMON_TYPE_PARAMS: if k in self._kwargs: if self._type_params is None: self._type_params = {} + if isinstance(self._kwargs[k], str): + if self._kwargs[k].lower() == "true": + self._type_params[k] = True + continue + if self._kwargs[k].lower() == "false": + self._type_params[k] = False + continue self._type_params[k] = self._kwargs[k] @classmethod - def construct_from_dict(cls, raw): + def construct_from_dict(cls, raw: Dict): kwargs = {} kwargs.update(raw.get("params", {})) - kwargs['is_primary'] = raw.get("is_primary", False) - if raw.get("auto_id", None) is not None: - kwargs['auto_id'] = raw.get("auto_id", None) - return FieldSchema(raw['name'], raw['type'], raw['description'], **kwargs) + kwargs["is_primary"] = raw.get("is_primary", False) + if raw.get("auto_id") is not None: + kwargs["auto_id"] = raw.get("auto_id") + kwargs["is_partition_key"] = raw.get("is_partition_key", False) + kwargs["is_clustering_key"] = raw.get("is_clustering_key", False) + if raw.get("default_value") is not None: + kwargs["default_value"] = raw.get("default_value") + kwargs["is_dynamic"] = raw.get("is_dynamic", False) + kwargs["nullable"] = raw.get("nullable", False) + kwargs["element_type"] = raw.get("element_type") + is_function_output = raw.get("is_function_output", False) + fs = FieldSchema(raw["name"], raw["type"], raw.get("description", ""), **kwargs) + fs.is_function_output = is_function_output + return fs def to_dict(self): - _dict = dict() - _dict["name"] = self.name - _dict["description"] = self._description - _dict["type"] = self.dtype + _dict = { + "name": self.name, + "description": self._description, + "type": self.dtype, + } if self._type_params: _dict["params"] = copy.deepcopy(self.params) if self.is_primary: _dict["is_primary"] = True _dict["auto_id"] = self.auto_id + if self.is_partition_key: + _dict["is_partition_key"] = True + if self.default_value is not None: + if self.default_value.WhichOneof("data") is None: + self.default_value = None + _dict["default_value"] = self.default_value + if self.is_dynamic: + _dict["is_dynamic"] = self.is_dynamic + if self.nullable: + _dict["nullable"] = self.nullable + if ( + self.dtype == DataType.ARRAY or self._dtype == DataType._ARRAY_OF_VECTOR + ) and self.element_type: + _dict["element_type"] = self.element_type + if self.is_clustering_key: + _dict["is_clustering_key"] = True + if self.is_function_output: + _dict["is_function_output"] = True return _dict - def __getattr__(self, item): + def __getattr__(self, item: str): if self._type_params and item in self._type_params: return self._type_params[item] return None - def __eq__(self, other): + def __eq__(self, other: object): if not isinstance(other, FieldSchema): return False return self.to_dict() == other.to_dict() @@ -273,63 +609,557 @@ def params(self): >>> field = FieldSchema("int64", DataType.INT64, description="int64", is_primary=False) >>> field.params {} - >>> fvec_field = FieldSchema("fvec", DataType.FLOAT_VECTOR, description="float vector", is_primary=False, dim=128) + >>> fvec_field = FieldSchema("fvec", DataType.FLOAT_VECTOR, is_primary=False, dim=128) >>> fvec_field.params {'dim': 128} """ return self._type_params @property - def dtype(self): + def dtype(self) -> DataType: return self._dtype -def parse_fields_from_data(datas): - if isinstance(datas, pandas.DataFrame): - return parse_fields_from_dataframe(datas) +def isVectorDataType(datatype: DataType) -> bool: + return datatype in ( + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.INT8_VECTOR, + DataType.BINARY_VECTOR, + DataType.SPARSE_FLOAT_VECTOR, + ) + + +class StructFieldSchema: + def __init__(self): + self.name = "" + self._kwargs = {} + self._fields = [] + self._description = "" + self._type_params = {} + # max_capacity will be set when added to CollectionSchema + self.max_capacity = None + + def _check_kwargs(self): + """Check struct-level kwargs.""" + + def _check_fields(self): + """Check struct fields restrictions.""" + if not self._fields: + raise ParamError(message="Struct field must have at least one field") + + for field in self._fields: + if field.is_primary: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot be primary key" + ) + + if field.is_partition_key: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot be partition key" + ) + + if field.is_clustering_key: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot be clustering key" + ) + + if field.is_dynamic: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot be dynamic field" + ) + + if field.nullable: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot be nullable" + ) + + if field.auto_id: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot have auto_id" + ) + + if hasattr(field, "default_value") and field.default_value is not None: + raise ParamError( + message=f"Field '{field.name}' in struct '{self.name}' cannot have default value" + ) + + # Check field name uniqueness + field_names = [f.name for f in self._fields] + if len(field_names) != len(set(field_names)): + duplicate_names = [name for name in field_names if field_names.count(name) > 1] + raise ParamError( + message=f"Duplicate field names in struct '{self.name}': {set(duplicate_names)}" + ) + + def add_field(self, field_name: str, datatype: DataType, **kwargs): + if datatype in {DataType.ARRAY, DataType._ARRAY_OF_VECTOR, DataType.STRUCT}: + raise ParamError( + message="Struct field schema does not support Array, ArrayOfVector or Struct" + ) + + field = FieldSchema(field_name, datatype, **kwargs) + self._fields.append(field) + return self + + @property + def fields(self): + return self._fields + + @property + def description(self): + return self._description + + @property + def params(self): + return self._type_params + + @property + def dtype(self) -> DataType: + return DataType.STRUCT + + def to_dict(self): + """Convert StructFieldSchema to dictionary representation.""" + struct_dict = { + "name": self.name, + "description": self._description, + "fields": [field.to_dict() for field in self._fields], + } + # Include max_capacity if it's set + if self.max_capacity is not None: + struct_dict["max_capacity"] = self.max_capacity + # Include type_params if not empty + if self._type_params: + struct_dict["params"] = copy.deepcopy(self._type_params) + return struct_dict + + @classmethod + def construct_from_dict(cls, raw: Dict): + """Construct StructFieldSchema from dictionary. + + The input can be either: + 1. User-friendly format (from convert_struct_fields_to_user_format) + 2. Direct struct field format with sub-fields + """ + # Create empty instance + instance = cls() + + # Set name and description + instance.name = raw.get("name", "") + instance._description = raw.get("description", "") + + # Extract max_capacity if present + if "max_capacity" in raw: + instance.max_capacity = raw["max_capacity"] + elif ( + "params" in raw and isinstance(raw["params"], dict) and "max_capacity" in raw["params"] + ): + instance.max_capacity = raw["params"]["max_capacity"] + + # Extract type_params from params dict + if "params" in raw and isinstance(raw["params"], dict): + for key, value in raw["params"].items(): + if key != "max_capacity": # max_capacity is already handled above + instance._type_params[key] = value + + # Build fields list + fields = [] + if "struct_fields" in raw: + # User format from convert_struct_fields_to_user_format + for field_dict in raw["struct_fields"]: + field_kwargs = {} + if field_dict.get("params"): + field_kwargs.update(field_dict["params"]) + field = FieldSchema( + name=field_dict["name"], + dtype=field_dict["type"], + description=field_dict.get("description", ""), + **field_kwargs, + ) + fields.append(field) + elif "fields" in raw: + # Direct format with FieldSchema dicts + for field_raw in raw["fields"]: + if isinstance(field_raw, dict): + fields.append(FieldSchema.construct_from_dict(field_raw)) + elif isinstance(field_raw, FieldSchema): + fields.append(field_raw) + + instance._fields = [copy.deepcopy(field) for field in fields] + + return instance + + +class Function: + def __init__( + self, + name: str, + function_type: FunctionType, + input_field_names: Union[str, List[str]], + output_field_names: Optional[Union[str, List[str]]] = None, + description: str = "", + params: Optional[Dict] = None, + ): + if not isinstance(name, str): + raise ParamError( + message=f"The name of the function should be a string, but got {type(name)}" + ) + if not isinstance(description, str): + raise ParamError( + message=f"The description of the function should be a string, but got {type(description)}" + ) + if not isinstance(input_field_names, (str, list)): + raise ParamError( + message=f"The input field names of the function should be a string or a list of strings, but got {type(input_field_names)}" + ) + self._name = name + self._description = description + input_field_names = ( + [input_field_names] if isinstance(input_field_names, str) else input_field_names + ) + if output_field_names is None: + output_field_names = [] + if not isinstance(output_field_names, (str, list)): + raise ParamError( + message=f"The output field names of the function should be a string or a list of strings, but got {type(output_field_names)}" + ) + output_field_names = ( + [output_field_names] if isinstance(output_field_names, str) else output_field_names + ) + try: + self._type = FunctionType(function_type) + except ValueError as err: + raise ParamError(message=ExceptionsMessage.UnknownFunctionType) from err + + for field_name in list(input_field_names) + list(output_field_names): + if not isinstance(field_name, str): + raise ParamError(message=ExceptionsMessage.FunctionIncorrectInputOutputType) + if len(input_field_names) != len(set(input_field_names)): + raise ParamError(message=ExceptionsMessage.FunctionDuplicateInputs) + if len(output_field_names) != len(set(output_field_names)): + raise ParamError(message=ExceptionsMessage.FunctionDuplicateOutputs) + + if set(input_field_names) & set(output_field_names): + raise ParamError(message=ExceptionsMessage.FunctionCommonInputOutput) + + self._input_field_names = input_field_names + self._output_field_names = output_field_names + self._params = params if params is not None else {} + if not isinstance(self._params, dict): + raise ParamError(message="The parameters of the function should be a dictionary.") + + @property + def name(self): + return self._name + + @property + def description(self): + return self._description + + @property + def type(self): + return self._type + + @property + def input_field_names(self): + return self._input_field_names + + @property + def output_field_names(self): + return self._output_field_names + + @property + def params(self): + return self._params + + def _check_bm25_function(self, schema: CollectionSchema): + if len(self._input_field_names) != 1 or len(self._output_field_names) != 1: + raise ParamError(message=ExceptionsMessage.BM25FunctionIncorrectInputOutputCount) + + for field in schema.fields: + if field.name == self._input_field_names[0] and field.dtype != DataType.VARCHAR: + raise ParamError(message=ExceptionsMessage.BM25FunctionIncorrectInputFieldType) + if ( + field.name == self._output_field_names[0] + and field.dtype != DataType.SPARSE_FLOAT_VECTOR + ): + raise ParamError(message=ExceptionsMessage.BM25FunctionIncorrectOutputFieldType) + + def _check_text_embedding_function(self, schema: CollectionSchema): + if len(self._input_field_names) != 1 or len(self._output_field_names) != 1: + raise ParamError( + message=ExceptionsMessage.TextEmbeddingFunctionIncorrectInputOutputCount + ) + + for field in schema.fields: + if field.name == self._input_field_names[0] and field.dtype != DataType.VARCHAR: + raise ParamError( + message=ExceptionsMessage.TextEmbeddingFunctionIncorrectInputFieldType + ) + if field.name == self._output_field_names[0] and field.dtype not in [ + DataType.FLOAT_VECTOR, + DataType.INT8_VECTOR, + ]: + raise ParamError( + message=ExceptionsMessage.TextEmbeddingFunctionIncorrectOutputFieldType + ) + + def verify(self, schema: CollectionSchema): + if self._type == FunctionType.BM25: + self._check_bm25_function(schema) + elif self._type == FunctionType.TEXTEMBEDDING: + self._check_text_embedding_function(schema) + elif self._type == FunctionType.RANKER: + # We will not check the ranker function here. + pass + elif self._type == FunctionType.UNKNOWN: + raise ParamError(message=ExceptionsMessage.UnknownFunctionType) + + @classmethod + def construct_from_dict(cls, raw: Dict): + return Function( + raw["name"], + raw["type"], + list(raw["input_field_names"]), + list(raw["output_field_names"]), + raw["description"], + raw["params"], + ) + + def __repr__(self) -> str: + return str(self.to_dict()) + + def to_dict(self): + return { + "name": self._name, + "description": self._description, + "type": self._type, + "input_field_names": self._input_field_names, + "output_field_names": self._output_field_names, + "params": self._params, + } + + def __eq__(self, value: object) -> bool: + if not isinstance(value, Function): + return False + return self.to_dict() == value.to_dict() + + +class FunctionScore: + def __init__( + self, + functions: Union[Function, List[Function]], + params: Optional[Dict] = None, + ): + if isinstance(functions, Function): + self._functions = [functions] + else: + self._functions = functions + + self._params = params + + @property + def params(self): + return self._params + + @property + def functions(self): + return self._functions + + +def is_valid_insert_data(data: Union[pd.DataFrame, list, dict]) -> bool: + """DataFrame, list, dict are valid insert data""" + return isinstance(data, (pd.DataFrame, list, dict)) + + +def is_row_based(data: Union[Dict, List[Dict]]) -> bool: + """Dict or List[Dict] are row-based""" + return isinstance(data, dict) or ( + isinstance(data, list) and len(data) > 0 and isinstance(data[0], Dict) + ) + + +def check_is_row_based(data: Union[List[List], List[Dict], Dict, pd.DataFrame]) -> bool: + if not isinstance(data, (pd.DataFrame, list, dict)): + raise DataTypeNotSupportException( + message="The type of data should be list or pandas.DataFrame or dict" + ) + + if isinstance(data, pd.DataFrame): + return False + + if isinstance(data, dict): + return True + + if isinstance(data, list): + if len(data) == 0: + return False + if isinstance(data[0], Dict): + return True + + return False + + +def _check_insert_data(data: Union[List[List], pd.DataFrame]): + if not isinstance(data, (pd.DataFrame, list)): + raise DataTypeNotSupportException( + message="The type of data should be list or pandas.DataFrame" + ) + is_dataframe = isinstance(data, pd.DataFrame) + for col in data: + if not is_dataframe and not is_list_like(col): + raise DataTypeNotSupportException(message="The data should be a list of list") + + +def _check_data_schema_cnt(fields: List, data: Union[List[List], pd.DataFrame]): + field_cnt = len([f for f in fields if not f.is_function_output]) + is_dataframe = isinstance(data, pd.DataFrame) + data_cnt = len(data.columns) if is_dataframe else len(data) + if field_cnt != data_cnt: + message = ( + f"The data doesn't match with schema fields, expect {field_cnt} list, got {len(data)}" + ) + if is_dataframe: + i_name = [f.name for f in fields] + t_name = list(data.columns) + message = f"The fields don't match with schema fields, expected: {i_name}, got {t_name}" + + raise DataNotMatchException(message=message) + + if is_dataframe: + for x, y in zip(list(data.columns), fields): + if x != y.name: + raise DataNotMatchException( + message=f"The name of field doesn't match, expected: {y.name}, got {x}" + ) + + +def check_insert_schema(schema: CollectionSchema, data: Union[List[List], pd.DataFrame]): + if schema is None: + raise SchemaNotReadyException(message="Schema shouldn't be None") + if schema.auto_id and isinstance(data, pd.DataFrame) and schema.primary_field.name in data: + if not data[schema.primary_field.name].isnull().all(): + msg = f"Expect no data for auto_id primary field: {schema.primary_field.name}" + raise DataNotMatchException(message=msg) + columns = list(data.columns) + columns.remove(schema.primary_field) + data = data[columns] + + tmp_fields = list( + filter( + lambda field: not (field.is_primary and field.auto_id) and not field.is_function_output, + schema.fields, + ) + ) + + _check_data_schema_cnt(tmp_fields, data) + _check_insert_data(data) + + +def check_upsert_schema(schema: CollectionSchema, data: Union[List[List], pd.DataFrame]): + if schema is None: + raise SchemaNotReadyException(message="Schema shouldn't be None") + if isinstance(data, pd.DataFrame): + if schema.primary_field.name not in data or data[schema.primary_field.name].isnull().all(): + raise DataNotMatchException(message=ExceptionsMessage.UpsertPrimaryKeyEmpty) + columns = list(data.columns) + data = data[columns] + + _check_data_schema_cnt(copy.deepcopy(schema.fields), data) + _check_insert_data(data) + + +def construct_fields_from_dataframe(df: pd.DataFrame) -> List[FieldSchema]: + col_names, data_types, column_params_map = prepare_fields_from_dataframe(df) fields = [] - if not isinstance(datas, list): - raise DataTypeNotSupportException(0, ExceptionsMessage.DataTypeNotSupport) - for d in datas: - if not is_list_like(d): - raise DataTypeNotSupportException(0, ExceptionsMessage.DataTypeNotSupport) - d_type = infer_dtype_bydata(d[0]) - fields.append(FieldSchema("", d_type)) + for name, dtype in zip(col_names, data_types): + type_params = column_params_map.get(name, {}) + field_schema = FieldSchema(name, dtype, **type_params) + fields.append(field_schema) + return fields -def parse_fields_from_dataframe(dataframe) -> List[FieldSchema]: - if not isinstance(dataframe, pandas.DataFrame): - return None - d_types = list(dataframe.dtypes) +def prepare_fields_from_dataframe(df: pd.DataFrame): + # TODO: infer pd.SparseDtype as DataType.SPARSE_FLOAT_VECTOR + d_types = list(df.dtypes) data_types = list(map(map_numpy_dtype_to_datatype, d_types)) - col_names = list(dataframe.columns) + col_names = list(df.columns) column_params_map = {} if DataType.UNKNOWN in data_types: - if len(dataframe) == 0: - raise CannotInferSchemaException(0, ExceptionsMessage.DataFrameInvalid) - values = dataframe.head(1).values[0] + if len(df) == 0: + raise CannotInferSchemaException(message=ExceptionsMessage.DataFrameInvalid) + values = df.head(1).to_numpy()[0] for i, dtype in enumerate(data_types): if dtype == DataType.UNKNOWN: new_dtype = infer_dtype_bydata(values[i]) - if new_dtype in (DataType.BINARY_VECTOR, DataType.FLOAT_VECTOR): + if new_dtype in ( + DataType.BINARY_VECTOR, + DataType.FLOAT_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.INT8_VECTOR, + ): vector_type_params = {} if new_dtype == DataType.BINARY_VECTOR: - vector_type_params['dim'] = len(values[i]) * 8 + vector_type_params["dim"] = len(values[i]) * 8 + elif new_dtype in (DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR): + vector_type_params["dim"] = int(len(values[i]) // 2) + elif new_dtype == DataType.INT8_VECTOR: + vector_type_params["dim"] = len(values[i]) else: - vector_type_params['dim'] = len(values[i]) + vector_type_params["dim"] = len(values[i]) column_params_map[col_names[i]] = vector_type_params data_types[i] = new_dtype if DataType.UNKNOWN in data_types: - raise CannotInferSchemaException(0, ExceptionsMessage.DataFrameInvalid) + raise CannotInferSchemaException(message=ExceptionsMessage.DataFrameInvalid) - fields = [] - for name, dtype in zip(col_names, data_types): - type_params = column_params_map.get(name, {}) - field_schema = FieldSchema(name, dtype, **type_params) - fields.append(field_schema) + return col_names, data_types, column_params_map - return fields + +def check_schema(schema: CollectionSchema): + if schema is None: + raise SchemaNotReadyException(message=ExceptionsMessage.NoSchema) + if len(schema.fields) < 1: + raise SchemaNotReadyException(message=ExceptionsMessage.EmptySchema) + vector_fields = [] + for field in schema.fields: + if field.dtype in ( + DataType.FLOAT_VECTOR, + DataType.BINARY_VECTOR, + DataType.FLOAT16_VECTOR, + DataType.BFLOAT16_VECTOR, + DataType.SPARSE_FLOAT_VECTOR, + DataType.INT8_VECTOR, + ): + vector_fields.append(field.name) + if len(vector_fields) < 1: + raise SchemaNotReadyException(message=ExceptionsMessage.NoVector) + + +def infer_default_value_bydata(data: Any): + if data is None: + return None + default_data = schema_types.ValueField() + d_type = DataType.UNKNOWN + if is_scalar(data): + d_type = infer_dtype_by_scalar_data(data) + if d_type is DataType.BOOL: + default_data.bool_data = data + elif d_type in (DataType.INT8, DataType.INT16, DataType.INT32): + default_data.int_data = data + elif d_type is DataType.INT64: + default_data.long_data = data + elif d_type is DataType.FLOAT: + default_data.float_data = data + elif d_type is DataType.DOUBLE: + default_data.double_data = data + elif d_type is DataType.VARCHAR: + default_data.string_data = data + else: + raise ParamError(message=f"Default value unsupported data type: {d_type}") + return default_data diff --git a/pymilvus/orm/search.py b/pymilvus/orm/search.py deleted file mode 100644 index a7d1227ea..000000000 --- a/pymilvus/orm/search.py +++ /dev/null @@ -1,272 +0,0 @@ -# Copyright (C) 2019-2021 Zilliz. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. - -import abc -from ..client.abstract import Entity - - -class _IterableWrapper: - def __init__(self, iterable_obj): - self._iterable = iterable_obj - - def __iter__(self): - return self - - def __next__(self): - return self.on_result(self._iterable.__next__()) - - def __getitem__(self, item): - s = self._iterable.__getitem__(item) - if isinstance(item, slice): - _start = item.start or 0 - i_len = self._iterable.__len__() - _end = min(item.stop, i_len) if item.stop else i_len - - elements = [] - for i in range(_start, _end): - elements.append(self.on_result(s[i])) - return elements - return s - - def __len__(self): - return self._iterable.__len__() - - @abc.abstractmethod - def on_result(self, res): - raise NotImplementedError - - -# TODO: how to add docstring to method of subclass and don't change the implementation? -# for example like below: -# class Hits(_IterableWrapper): -# __init__.__doc__ = """doc of __init__""" -# __iter__.__doc__ = """doc of __iter__""" -# __next__.__doc__ = """doc of __next__""" -# __getitem__.__doc__ = """doc of __getitem__""" -# __len__.__doc__ = """doc of __len__""" -# -# def on_result(self, res): -# return Hit(res) - - -class DocstringMeta(type): - def __new__(cls, name, bases, attrs): - doc_meta = attrs.pop("docstring", None) - new_cls = super(DocstringMeta, cls).__new__(cls, name, bases, attrs) - if doc_meta: - for member_name, member in attrs.items(): - if member_name in doc_meta: - member.__doc__ = doc_meta[member_name] - return new_cls - - -# for example: -# class Hits(_IterableWrapper, metaclass=DocstringMeta): -# docstring = { -# "__init__": """doc of __init__""", -# "__iter__": """doc of __iter__""", -# "__next__": """doc of __next__""", -# "__getitem__": """doc of __getitem__""", -# "__len__": """doc of __len__""", -# } -# -# def on_result(self, res): -# return Hit(res) - - -class Hit: - def __init__(self, hit): - """ - Construct a Hit object from response. A hit represent a record corresponding to the query. - """ - self._hit = hit - - @property - def id(self) -> int: - """ - Return the id of the hit record. - - :return int: - The id of the hit record. - """ - return self._hit.id - - @property - def entity(self) -> Entity: - """ - Return the Entity of the hit record. - - :return pymilvus Entity object: - The entity content of the hit record. - """ - return self._hit.entity - - @property - def distance(self) -> float: - """ - Return the distance between the hit record and the query. - - :return float: - The distance of the hit record. - """ - return self._hit.distance - - @property - def score(self) -> float: - """ - Return the calculated score of the hit record, now the score is equal to distance. - - :return float: - The score of the hit record. - """ - return self._hit.score - - def __str__(self): - """ - Return the information of hit record. - - :return str: - The information of hit record. - """ - return "(distance: {}, id: {})".format(self._hit.distance, self._hit.id) - - __repr__ = __str__ - - -class Hits: - def __init__(self, hits): - """ - Construct a Hits object from response. - """ - self._hits = hits - - def __iter__(self): - """ - Iterate the Hits object. Every iteration returns a Hit which represent a record - corresponding to the query. - """ - return self - - def __next__(self): - """ - Iterate the Hits object. Every iteration returns a Hit which represent a record - corresponding to the query. - """ - return Hit(self._hits.__next__()) - - def __getitem__(self, item): - """ - Return the kth Hit corresponding to the query. - - :return Hit: - The kth specified by item Hit corresponding to the query. - """ - s = self._hits.__getitem__(item) - if isinstance(item, slice): - _start = item.start or 0 - i_len = self._hits.__len__() - _end = min(item.stop, i_len) if item.stop else i_len - - elements = [] - for i in range(_start, _end): - elements.append(self.on_result(s[i])) - return elements - return self.on_result(s) - - def __len__(self) -> int: - """ - Return the number of hit record. - - :return int: - The number of hit record. - """ - return self._hits.__len__() - - def __str__(self): - return str(list(map(str, self.__getitem__(slice(0, 10))))) - - def on_result(self, res): - return Hit(res) - - @property - def ids(self) -> list: - """ - Return the ids of all hit record. - - :return list[int]: - The ids of all hit record. - """ - return self._hits.ids - - @property - def distances(self) -> list: - """ - Return the distances of all hit record. - - :return list[float]: - The distances of all hit record. - """ - return self._hits.distances - - -class SearchResult: - def __init__(self, query_result=None): - """ - Construct a search result from response. - """ - self._qs = query_result - - def __iter__(self): - """ - Iterate the Search Result. Every iteration returns a Hits corresponding to a query. - """ - return self - - def __next__(self): - """ - Iterate the Search Result. Every iteration returns a Hits corresponding to a query. - """ - return self.on_result(self._qs.__next__()) - - def __getitem__(self, item): - """ - Return the Hits corresponding to the nth query. - - :return Hits: - The hits corresponding to the nth(item) query. - """ - s = self._qs.__getitem__(item) - if isinstance(item, slice): - _start = item.start or 0 - i_len = self._qs.__len__() - _end = min(item.stop, i_len) if item.stop else i_len - - elements = [] - for i in range(_start, _end): - elements.append(self.on_result(s[i])) - return elements - return self.on_result(s) - - def __len__(self) -> int: - """ - Return the number of query of Search Result. - - :return int: - The number of query of search result. - """ - return self._qs.__len__() - - def __str__(self): - return str(list(map(str, self.__getitem__(slice(0, 10))))) - - def on_result(self, res): - return Hits(res) diff --git a/pymilvus/orm/types.py b/pymilvus/orm/types.py index 767f3d074..d136a19ee 100644 --- a/pymilvus/orm/types.py +++ b/pymilvus/orm/types.py @@ -10,17 +10,21 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. -import logging +from typing import Any -from pandas.api.types import infer_dtype, is_list_like, is_scalar, is_float, is_array_like import numpy as np +from pandas.api.types import ( + infer_dtype, + is_array_like, + is_float, + is_list_like, + is_scalar, +) -from ..client.types import DataType - -LOGGER = logging.getLogger(__name__) +from pymilvus.client.types import DataType dtype_str_map = { - "string": DataType.STRING, + "string": DataType.VARCHAR, "floating": DataType.FLOAT, "integer": DataType.INT64, "mixed-integer": DataType.INT64, @@ -50,36 +54,33 @@ "float16": DataType.FLOAT, "float32": DataType.FLOAT, "float64": DataType.DOUBLE, + "string": DataType.VARCHAR, + "str": DataType.VARCHAR, } -def is_integer_datatype(data_type): +def is_integer_datatype(data_type: DataType): return data_type in (DataType.INT8, DataType.INT16, DataType.INT32, DataType.INT64) -def is_float_datatype(data_type): +def is_float_datatype(data_type: DataType): return data_type in (DataType.FLOAT,) -def is_numeric_datatype(data_type): +def is_numeric_datatype(data_type: DataType): return is_float_datatype(data_type) or is_integer_datatype(data_type) -# pylint: disable=too-many-return-statements -def infer_dtype_by_scaladata(data): - if isinstance(data, float): +def infer_dtype_by_scalar_data(data: Any): + if isinstance(data, list): + return DataType.ARRAY + if isinstance(data, np.float32): + return DataType.FLOAT + if isinstance(data, (float, np.float64, np.double)) or is_float(data): return DataType.DOUBLE if isinstance(data, bool): return DataType.BOOL - if isinstance(data, int): - return DataType.INT64 - if isinstance(data, str): - return DataType.STRING - if isinstance(data, np.float64): - return DataType.DOUBLE - if isinstance(data, np.float32): - return DataType.FLOAT - if isinstance(data, np.int64): + if isinstance(data, (int, np.int64)): return DataType.INT64 if isinstance(data, np.int32): return DataType.INT32 @@ -87,23 +88,21 @@ def infer_dtype_by_scaladata(data): return DataType.INT16 if isinstance(data, np.int8): return DataType.INT8 - if isinstance(data, np.bool8): - return DataType.BOOL - if isinstance(data, np.bool_): - return DataType.BOOL + if isinstance(data, str): + return DataType.VARCHAR if isinstance(data, bytes): return DataType.BINARY_VECTOR - if is_float(data): - return DataType.DOUBLE return DataType.UNKNOWN -def infer_dtype_bydata(data): +def infer_dtype_bydata(data: Any): d_type = DataType.UNKNOWN if is_scalar(data): - d_type = infer_dtype_by_scaladata(data) - return d_type + return infer_dtype_by_scalar_data(data) + + if isinstance(data, dict): + return DataType.JSON if is_list_like(data) or is_array_like(data): failed = False @@ -113,12 +112,7 @@ def infer_dtype_bydata(data): failed = True if not failed: d_type = dtype_str_map.get(type_str, DataType.UNKNOWN) - if is_numeric_datatype(d_type): - d_type = DataType.FLOAT_VECTOR - else: - d_type = DataType.UNKNOWN - - return d_type + return DataType.FLOAT_VECTOR if is_numeric_datatype(d_type) else DataType.UNKNOWN if d_type == DataType.UNKNOWN: try: @@ -127,7 +121,7 @@ def infer_dtype_bydata(data): elem = None if elem is not None and is_scalar(elem): - d_type = infer_dtype_by_scaladata(elem) + d_type = infer_dtype_by_scalar_data(elem) if d_type == DataType.UNKNOWN: _dtype = getattr(data, "dtype", None) @@ -138,7 +132,7 @@ def infer_dtype_bydata(data): return d_type -def map_numpy_dtype_to_datatype(d_type): +def map_numpy_dtype_to_datatype(d_type: DataType): d_type_str = str(d_type) return numpy_dtype_str_map.get(d_type_str, DataType.UNKNOWN) diff --git a/pymilvus/orm/utility.py b/pymilvus/orm/utility.py index 539cdf481..7792e9c92 100644 --- a/pymilvus/orm/utility.py +++ b/pymilvus/orm/utility.py @@ -10,21 +10,28 @@ # or implied. See the License for the specific language governing permissions and limitations under # the License. -from . import constants -from .connections import connections -from .exceptions import ResultError +from datetime import datetime, timedelta, timezone +from typing import List, Mapping, Optional + +from pymilvus.client.types import ( + BulkInsertState, + ResourceGroupConfig, +) +from pymilvus.client.utils import hybridts_to_unixtime as _hybridts_to_unixtime +from pymilvus.client.utils import mkts_from_datetime as _mkts_from_datetime +from pymilvus.client.utils import mkts_from_hybridts as _mkts_from_hybridts +from pymilvus.client.utils import mkts_from_unixtime as _mkts_from_unixtime +from pymilvus.exceptions import MilvusException -from ..client.utils import mkts_from_hybridts as _mkts_from_hybridts -from ..client.utils import mkts_from_unixtime as _mkts_from_unixtime -from ..client.utils import mkts_from_datetime as _mkts_from_datetime -from ..client.utils import hybridts_to_unixtime as _hybridts_to_unixtime +from .connections import connections -def mkts_from_hybridts(hybridts, milliseconds=0., delta=None): - """ - Generate a hybrid timestamp based on an existing hybrid timestamp, timedelta and incremental time internval. +def mkts_from_hybridts(hybridts: int, milliseconds: float = 0.0, delta: Optional[timedelta] = None): + """Generate a hybrid timestamp based on an existing hybrid timestamp, + timedelta and incremental time internval. - :param hybridts: The original hybrid timestamp used to generate a new hybrid timestamp. Non-negative interger range from 0 to 18446744073709551615. + :param hybridts: The original hybrid timestamp used to generate a new hybrid timestamp. + Non-negative interger range from 0 to 18446744073709551615. :type hybridts: int :param milliseconds: Incremental time interval. The unit of time is milliseconds. @@ -38,12 +45,11 @@ def mkts_from_hybridts(hybridts, milliseconds=0., delta=None): Hybrid timetamp is a non-negative interger range from 0 to 18446744073709551615. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_vector], description="get collection entities num") + >>> field_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_vector]) >>> collection = Collection(name="test_collection", schema=schema) >>> import pandas as pd >>> int64_series = pd.Series(data=list(range(10, 20)), index=list(range(10)))i @@ -55,12 +61,13 @@ def mkts_from_hybridts(hybridts, milliseconds=0., delta=None): return _mkts_from_hybridts(hybridts, milliseconds=milliseconds, delta=delta) -def mkts_from_unixtime(epoch, milliseconds=0., delta=None): +def mkts_from_unixtime(epoch: float, milliseconds: float = 0.0, delta: Optional[timedelta] = None): """ Generate a hybrid timestamp based on Unix Epoch time, timedelta and incremental time internval. - :param epoch: The known Unix Epoch time used to generate a hybrid timestamp. The Unix Epoch time is the number of seconds - that have elapsed since January 1, 1970 (midnight UTC/GMT). + :param epoch: The known Unix Epoch time used to generate a hybrid timestamp. + The Unix Epoch time is the number of seconds that have elapsed + since January 1, 1970 (midnight UTC/GMT). :type epoch: float :param milliseconds: Incremental time interval. The unit of time is milliseconds. @@ -82,7 +89,9 @@ def mkts_from_unixtime(epoch, milliseconds=0., delta=None): return _mkts_from_unixtime(epoch, milliseconds=milliseconds, delta=delta) -def mkts_from_datetime(d_time, milliseconds=0., delta=None): +def mkts_from_datetime( + d_time: datetime, milliseconds: float = 0.0, delta: Optional[timedelta] = None +): """ Generate a hybrid timestamp based on datetime, timedelta and incremental time internval. @@ -108,14 +117,15 @@ def mkts_from_datetime(d_time, milliseconds=0., delta=None): return _mkts_from_datetime(d_time, milliseconds=milliseconds, delta=delta) -def hybridts_to_datetime(hybridts, tz=None): +def hybridts_to_datetime(hybridts: int, tz: Optional[timezone] = None): """ Convert a hybrid timestamp to the datetime according to timezone. - :param hybridts: The known hybrid timestamp to convert to datetime. Non-negative interger range from 0 to 18446744073709551615. + :param hybridts: The known hybrid timestamp to convert to datetime. + Non-negative interger range from 0 to 18446744073709551615. :type hybridts: int - :param tz: Timezone defined by a fixed offset from UTC. If argument tz is None or not specified, the - hybridts is converted to the platform’s local date and time. + :param tz: Timezone defined by a fixed offset from UTC. If argument tz is None or not specified, + the hybridts is converted to the platform`s local date and time. :type tz: datetime.timezone :return datetime: @@ -130,22 +140,25 @@ def hybridts_to_datetime(hybridts, tz=None): >>> ts = utility.mkts_from_unixtime(epoch_t) >>> d = utility.hybridts_to_datetime(ts) """ - import datetime - if tz is not None and not isinstance(tz, datetime.timezone): - raise Exception("parameter tz should be type of datetime.timezone") + + if tz is not None and not isinstance(tz, timezone): + msg = "parameter tz should be type of datetime.timezone" + raise MilvusException(message=msg) epoch = _hybridts_to_unixtime(hybridts) - return datetime.datetime.fromtimestamp(epoch, tz=tz) + return datetime.fromtimestamp(epoch, tz=tz) -def hybridts_to_unixtime(hybridts): +def hybridts_to_unixtime(hybridts: int): """ Convert a hybrid timestamp to UNIX Epoch time ignoring the logic part. - :param hybridts: The known hybrid timestamp to convert to UNIX Epoch time. Non-negative interger range from 0 to 18446744073709551615. + :param hybridts: The known hybrid timestamp to convert to UNIX Epoch time. + Non-negative interger range from 0 to 18446744073709551615. :type hybridts: int :return float: - The Unix Epoch time is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT). + The Unix Epoch time is the number of seconds that have elapsed since + January 1, 1970 (midnight UTC/GMT). :example: >>> import time @@ -158,13 +171,17 @@ def hybridts_to_unixtime(hybridts): return _hybridts_to_unixtime(hybridts) -def _get_connection(alias): +def _get_connection(alias: str): return connections._fetch_handler(alias) -def loading_progress(collection_name, partition_names=None, using="default"): - """ - Show #loaded entities vs #total entities. +def loading_progress( + collection_name: str, + partition_names: Optional[List[str]] = None, + using: str = "default", + timeout: Optional[float] = None, +): + """Show loading progress of sealed segments in percentage. :param collection_name: The name of collection is loading :type collection_name: str @@ -173,31 +190,87 @@ def loading_progress(collection_name, partition_names=None, using="default"): :type partition_names: str list :return dict: - Loading progress is a dict contains num of loaded entities and num of total entities. - {'num_loaded_entities':loaded_segments_nums, 'num_total_entities': total_segments_nums} - :raises PartitionNotExistException: If partition doesn't exist. + {'loading_progress': '100%'} + :raises MilvusException: If anything goes wrong. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") - >>> _DIM = 128 - >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_vector], description="get collection entities num") - >>> collection = Collection(name="test_collection", schema=schema) + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> import pandas as pd - >>> int64_series = pd.Series(data=list(range(10, 20)), index=list(range(10)))i - >>> float_vector_series = [[random.random() for _ in range _DIM] for _ in range (10)] - >>> data = pd.DataFrame({"int64" : int64_series, "float_vector": float_vector_series}) + >>> import random + >>> fields = [ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", DataType.FLOAT_VECTOR, dim=8), + ... ] + >>> schema = CollectionSchema(fields) + >>> collection = Collection("test_loading_progress", schema) + >>> data = pd.DataFrame({ + ... "film_id" : pd.Series(data=list(range(10, 20)), index=list(range(10))), + ... "films": [[random.random() for _ in range(8)] for _ in range (10)], + ... }) >>> collection.insert(data) - >>> collection.load() # load collection to memory - >>> utility.loading_progress("test_collection") + >>> collection.create_index( + ... "films", + ... {"index_type": "IVF_FLAT", "params": {"nlist": 8}, "metric_type": "L2"}) + >>> collection.load(_async=True) + >>> utility.loading_progress("test_loading_progress") + {'loading_progress': '100%'} """ - if not partition_names or len(partition_names) == 0: - return _get_connection(using).load_collection_progress(collection_name) - return _get_connection(using).load_partitions_progress(collection_name, partition_names) + progress = _get_connection(using).get_loading_progress( + collection_name, partition_names, timeout=timeout + ) + return { + "loading_progress": f"{progress:.0f}%", + } + + +def load_state( + collection_name: str, + partition_names: Optional[List[str]] = None, + using: str = "default", + timeout: Optional[float] = None, +): + """Show load state of collection or partitions. + :param collection_name: The name of collection is loading + :type collection_name: str + + :param partition_names: The names of partitions is loading + :type partition_names: str list + + :return LoadState: + The current state of collection or partitions. + + :example: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility + >>> from pymilvus.client.types import LoadState + >>> import pandas as pd + >>> import random + >>> assert utility.load_state("test_load_state") == LoadState.NotExist + >>> fields = [ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", DataType.FLOAT_VECTOR, dim=8), + ... ] + >>> schema = CollectionSchema(fields) + >>> collection = Collection("test_load_state", schema) + >>> assert utility.load_state("test_load_state") == LoadState.NotLoad + >>> data = pd.DataFrame({ + ... "film_id" : pd.Series(data=list(range(10, 20)), index=list(range(10))), + ... "films": [[random.random() for _ in range(8)] for _ in range (10)], + ... }) + >>> collection.insert(data) + >>> collection.create_index( + ... "films", + ... {"index_type": "IVF_FLAT", "params": {"nlist": 8}, "metric_type": "L2"}) + >>> collection.load(_async=True) + >>> assert utility.load_state("test_load_state") == LoadState.Loaded + """ + return _get_connection(using).get_load_state(collection_name, partition_names, timeout=timeout) -def wait_for_loading_complete(collection_name, partition_names=None, timeout=None, using="default"): +def wait_for_loading_complete( + collection_name: str, + partition_names: Optional[List[str]] = None, + timeout: Optional[float] = None, + using: str = "default", +): """ Block until loading is done or Raise Exception after timeout. @@ -210,16 +283,14 @@ def wait_for_loading_complete(collection_name, partition_names=None, timeout=Non :param timeout: The timeout for this method, unit: second :type timeout: int - :raises CollectionNotExistException: If collection doesn't exist. - :raises PartitionNotExistException: If partition doesn't exist. + :raises MilvusException: If anything goes wrong. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="get collection entities num") + >>> field_fvec = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_fvec]) >>> collection = Collection(name="test_collection", schema=schema) >>> import pandas as pd >>> int64_series = pd.Series(data=list(range(10, 20)), index=list(range(10)))i @@ -230,11 +301,18 @@ def wait_for_loading_complete(collection_name, partition_names=None, timeout=Non >>> utility.wait_for_loading_complete("test_collection") """ if not partition_names or len(partition_names) == 0: - return _get_connection(using).wait_for_loading_collection(collection_name, timeout) - return _get_connection(using).wait_for_loading_partitions(collection_name, partition_names, timeout) - - -def index_building_progress(collection_name, index_name="", using="default"): + return _get_connection(using).wait_for_loading_collection(collection_name, timeout=timeout) + return _get_connection(using).wait_for_loading_partitions( + collection_name, partition_names, timeout=timeout + ) + + +def index_building_progress( + collection_name: str, + index_name: str = "", + using: str = "default", + timeout: Optional[float] = None, +): """ Show # indexed entities vs. # total entities. @@ -254,35 +332,40 @@ def index_building_progress(collection_name, index_name="", using="default"): :raises CollectionNotExistException: If collection doesn't exist. :raises IndexNotExistException: If index doesn't exist. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") - >>> _DIM = 128 - >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="test") - >>> collection = Collection(name="test_collection", schema=schema) + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility + >>> fields = [ + ... FieldSchema("int64", DataType.INT64, is_primary=True, auto_id=True), + ... FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=128), + ... ] + >>> schema = CollectionSchema(fields, description="test index_building_progress") + >>> c = Collection(name="test_index_building_progress", schema=schema) + >>> import random - >>> import numpy as np - >>> import pandas as pd >>> vectors = [[random.random() for _ in range(_DIM)] for _ in range(5000)] - >>> int64_series = pd.Series(data=list(range(5000, 10000)), index=list(range(5000))) - >>> vectors = [[random.random() for _ in range(_DIM)] for _ in range (5000)] - >>> data = pd.DataFrame({"int64" : int64_series, "float_vector": vectors}) - >>> collection.insert(data) - >>> collection.load() # load collection to memory - >>> index_param = { - >>> "metric_type": "L2", - >>> "index_type": "IVF_FLAT", - >>> "params": {"nlist": 1024} - >>> } - >>> collection.create_index("float_vector", index_param) - >>> utility.index_building_progress("test_collection", "") - >>> utility.loading_progress("test_collection") + >>> c.insert([vectors]) + >>> c.load() + >>> index_params = { + ... "metric_type": "L2", + ... "index_type": "IVF_FLAT", + ... "params": {"nlist": 1024} + ... } + >>> index = c.create_index( + ... field_name="float_vector", + ... index_params=index_params, + ... index_name="ivf_flat") + >>> utility.index_building_progress("test_collection", c.name) """ - return _get_connection(using).get_index_build_progress(collection_name, index_name) + return _get_connection(using).get_index_build_progress( + collection_name=collection_name, index_name=index_name, timeout=timeout + ) -def wait_for_index_building_complete(collection_name, index_name="", timeout=None, using="default"): +def wait_for_index_building_complete( + collection_name: str, + index_name: str = "", + timeout: Optional[float] = None, + using: str = "default", +): """ Block until building is done or Raise Exception after timeout. @@ -299,12 +382,11 @@ def wait_for_index_building_complete(collection_name, index_name="", timeout=Non :raises IndexNotExistException: If index doesn't exist. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="test") + >>> field_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_vector], description="test") >>> collection = Collection(name="test_collection", schema=schema) >>> import random >>> import numpy as np @@ -325,10 +407,12 @@ def wait_for_index_building_complete(collection_name, index_name="", timeout=Non >>> utility.loading_progress("test_collection") """ - return _get_connection(using).wait_for_creating_index(collection_name, index_name, timeout)[0] + return _get_connection(using).wait_for_creating_index( + collection_name, index_name, timeout=timeout + )[0] -def has_collection(collection_name, using="default"): +def has_collection(collection_name: str, using: str = "default", timeout: Optional[float] = None): """ Checks whether a specified collection exists. @@ -339,19 +423,23 @@ def has_collection(collection_name, using="default"): Whether the collection exists. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="test") + >>> field_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_vector], description="test") >>> collection = Collection(name="test_collection", schema=schema) >>> utility.has_collection("test_collection") """ - return _get_connection(using).has_collection(collection_name) + return _get_connection(using).has_collection(collection_name, timeout=timeout) -def has_partition(collection_name, partition_name, using="default"): +def has_partition( + collection_name: str, + partition_name: str, + using: str = "default", + timeout: Optional[float] = None, +) -> bool: """ Checks if a specified partition exists in a collection. @@ -365,19 +453,18 @@ def has_partition(collection_name, partition_name, using="default"): Whether the partition exist. :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="test") + >>> field_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_vector], description="test") >>> collection = Collection(name="test_collection", schema=schema) >>> utility.has_partition("_default") """ - return _get_connection(using).has_partition(collection_name, partition_name) + return _get_connection(using).has_partition(collection_name, partition_name, timeout=timeout) -def drop_collection(collection_name, timeout=None, using="default"): +def drop_collection(collection_name: str, timeout: Optional[float] = None, using: str = "default"): """ Drop a collection by name @@ -388,8 +475,7 @@ def drop_collection(collection_name, timeout=None, using="default"): :type timeout: float :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> schema = CollectionSchema(fields=[ ... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True), ... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128), @@ -401,10 +487,51 @@ def drop_collection(collection_name, timeout=None, using="default"): >>> utility.has_collection("drop_collection_test") >>> False """ - return _get_connection(using).drop_collection(collection_name, timeout) + return _get_connection(using).drop_collection(collection_name, timeout=timeout) + + +def rename_collection( + old_collection_name: str, + new_collection_name: str, + new_db_name: str = "", + timeout: Optional[float] = None, + using: str = "default", +): + """ + Rename a collection to new collection name + + :param old_collection_name: A string representing old name of the renamed collection + :type old_collection_name: str + + :param new_collection_name: A string representing new name of the renamed collection + :type new_collection_name: str + + :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout + is set to None, client waits until server response or error occur. + :type timeout: float + + :example: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility + >>> schema = CollectionSchema(fields=[ + ... FieldSchema("int64", DataType.INT64, description="int64", is_primary=True), + ... FieldSchema("float_vector", DataType.FLOAT_VECTOR, is_primary=False, dim=128), + ... ]) + >>> collection = Collection(name="old_collection", schema=schema) + >>> utility.rename_collection("old_collection", "new_collection") + >>> True + >>> utility.drop_collection("new_collection") + >>> utility.has_collection("new_collection") + >>> False + """ + return _get_connection(using).rename_collections( + old_name=old_collection_name, + new_name=new_collection_name, + new_db_name=new_db_name, + timeout=timeout, + ) -def list_collections(timeout=None, using="default") -> list: +def list_collections(timeout: Optional[float] = None, using: str = "default") -> list: """ Returns a list of all collection names. @@ -412,103 +539,36 @@ def list_collections(timeout=None, using="default") -> list: is set to None, client waits until server response or error occur. :type timeout: float + :param using: An optional alias for the database host. Default value is "default". + :type using: str + :return list[str]: List of collection names, return when operation is successful :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="test") + >>> field_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_vector], description="test") >>> collection = Collection(name="test_collection", schema=schema) >>> utility.list_collections() """ - return _get_connection(using).list_collections() - - -def calc_distance(vectors_left, vectors_right, params=None, timeout=None, using="default"): - """ - Calculate distance between two vector arrays. - - :param vectors_left: The vectors on the left of operator. - :type vectors_left: dict - `{"ids": [1, 2, 3, .... n], "collection": "c_1", "partition": "p_1", "field": "v_1"}` - or - `{"float_vectors": [[1.0, 2.0], [3.0, 4.0], ... [9.0, 10.0]]}` - or - `{"bin_vectors": [b'\x94', b'N', ... b'\xca']}` - - :param vectors_right: The vectors on the right of operator. - :type vectors_right: dict - `{"ids": [1, 2, 3, .... n], "collection": "col_1", "partition": "p_1", "field": "v_1"}` - or - `{"float_vectors": [[1.0, 2.0], [3.0, 4.0], ... [9.0, 10.0]]}` - or - `{"bin_vectors": [b'\x94', b'N', ... b'\xca']}` - - :param params: key-value pair parameters - Key: "metric_type"/"metric" Value: "L2"/"IP"/"HAMMING"/"TANIMOTO", default is "L2", - Key: "sqrt" Value: true or false, default is false Only for "L2" distance - Key: "dim" Value: set this value if dimension is not a multiple of 8, - otherwise the dimension will be calculted by list length, - only for "HAMMING" and "TANIMOTO" - :type params: dict - Examples of supported metric_type: - `{"metric_type": "L2", "sqrt": true}` - `{"metric_type": "IP"}` - `{"metric_type": "HAMMING", "dim": 17}` - `{"metric_type": "TANIMOTO"}` - Note: metric type are case insensitive - - :return: 2-d array distances - :rtype: list[list[int]] for "HAMMING" or list[list[float]] for others - Assume the vectors_left: L_1, L_2, L_3 - Assume the vectors_right: R_a, R_b - Distance between L_n and R_m we called "D_n_m" - The returned distances are arranged like this: - [[D_1_a, D_1_b], - [D_2_a, D_2_b], - [D_3_a, D_3_b]] - - Note: if some vectors doesn't exist in collection, the returned distance is "-1.0" - - :example: - >>> vectors_l = [[random.random() for _ in range(64)] for _ in range(5)] - >>> vectors_r = [[random.random() for _ in range(64)] for _ in range(10)] - >>> op_l = {"float_vectors": vectors_l} - >>> op_r = {"float_vectors": vectors_r} - >>> params = {"metric": "L2", "sqrt": True} - >>> results = utility.calc_distance(vectors_left=op_l, vectors_right=op_r, params=params) - """ - res = _get_connection(using).calc_distance(vectors_left, vectors_right, params, timeout) - - def vector_count(op): - x = 0 - if constants.CALC_DIST_IDS in op: - x = len(op[constants.CALC_DIST_IDS]) - elif constants.CALC_DIST_FLOAT_VEC in op: - x = len(op[constants.CALC_DIST_FLOAT_VEC]) - elif constants.CALC_DIST_BIN_VEC in op: - x = len(op[constants.CALC_DIST_BIN_VEC]) - return x - - n = vector_count(vectors_left) - m = vector_count(vectors_right) - if len(res) != n * m: - raise ResultError("Returned distance array is illegal") - - # transform 1-d distances to 2-d distances - res_2_d = [] - for i in range(n): - res_2_d.append(res[i * m:i * m + m]) - return res_2_d - - -def load_balance(src_node_id, dst_node_ids=None, sealed_segment_ids=None, timeout=None, using="default"): - """ - Do load balancing operation from source query node to destination query node. + return _get_connection(using).list_collections(timeout=timeout) + + +def load_balance( + collection_name: str, + src_node_id: int, + dst_node_ids: Optional[List[int]] = None, + sealed_segment_ids: Optional[List[int]] = None, + timeout: Optional[float] = None, + using: str = "default", +): + """Do load balancing operation from source query node to destination query node. + + :param collection_name: The collection to balance. + :type collection_name: str :param src_node_id: The source query node id to balance. :type src_node_id: int @@ -533,16 +593,22 @@ def load_balance(src_node_id, dst_node_ids=None, sealed_segment_ids=None, timeou >>> src_node_id = 0 >>> dst_node_ids = [1] >>> sealed_segment_ids = [] - >>> res = utility.load_balance(src_node_id, dst_node_ids, sealed_segment_ids) + >>> res = utility.load_balance("test", src_node_id, dst_node_ids, sealed_segment_ids) """ if dst_node_ids is None: dst_node_ids = [] if sealed_segment_ids is None: sealed_segment_ids = [] - return _get_connection(using).load_balance(src_node_id, dst_node_ids, sealed_segment_ids, timeout) + return _get_connection(using).load_balance( + collection_name, src_node_id, dst_node_ids, sealed_segment_ids, timeout=timeout + ) -def get_query_segment_info(collection_name, timeout=None, using="default"): +def get_query_segment_info( + collection_name: str, + timeout: Optional[float] = None, + using: str = "default", +): """ Notifies Proxy to return segments information from query nodes. @@ -556,12 +622,11 @@ def get_query_segment_info(collection_name, timeout=None, using="default"): :rtype: QuerySegmentInfo :example: - >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, connections, utility - >>> connections.connect(alias="default") + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> _DIM = 128 >>> field_int64 = FieldSchema("int64", DataType.INT64, description="int64", is_primary=True) - >>> field_float_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, description="float_vector", is_primary=False, dim=_DIM) - >>> schema = CollectionSchema(fields=[field_int64, field_float_vector], description="get collection entities num") + >>> field_vector = FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=_DIM) + >>> schema = CollectionSchema(fields=[field_int64, field_vector]) >>> collection = Collection(name="test_get_segment_info", schema=schema) >>> import pandas as pd >>> int64_series = pd.Series(data=list(range(10, 20)), index=list(range(10)))i @@ -574,8 +639,13 @@ def get_query_segment_info(collection_name, timeout=None, using="default"): return _get_connection(using).get_query_segment_info(collection_name, timeout=timeout) -def create_alias(collection_name: str, alias: str, timeout=None, using="default"): - """ Specify alias for a collection. +def create_alias( + collection_name: str, + alias: str, + timeout: Optional[float] = None, + using: str = "default", +): + """Specify alias for a collection. Alias cannot be duplicated, you can't assign the same alias to different collections. But you can specify multiple aliases for a collection, for example: before create_alias("collection_1", "bob"): @@ -594,8 +664,7 @@ def create_alias(collection_name: str, alias: str, timeout=None, using="default" :raises BaseException: If the alias failed to create. :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility - >>> connections.connect() + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -607,8 +676,8 @@ def create_alias(collection_name: str, alias: str, timeout=None, using="default" return _get_connection(using).create_alias(collection_name, alias, timeout=timeout) -def drop_alias(alias: str, timeout=None, using="default"): - """ Delete the alias. +def drop_alias(alias: str, timeout: Optional[float] = None, using: str = "default"): + """Delete the alias. No need to provide collection name because an alias can only be assigned to one collection and the server knows which collection it belongs. For example: @@ -628,8 +697,7 @@ def drop_alias(alias: str, timeout=None, using="default"): :raises BaseException: If the alias doesn't exist. :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility - >>> connections.connect() + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -642,8 +710,13 @@ def drop_alias(alias: str, timeout=None, using="default"): return _get_connection(using).drop_alias(alias, timeout=timeout) -def alter_alias(collection_name: str, alias: str, timeout=None, using="default"): - """ Change the alias of a collection to another collection. +def alter_alias( + collection_name: str, + alias: str, + timeout: Optional[float] = None, + using: str = "default", +): + """Change the alias of a collection to another collection. Raise error if the alias doesn't exist. Alias cannot be duplicated, you can't assign same alias to different collections. This api can change alias owner collection, for example: @@ -668,8 +741,7 @@ def alter_alias(collection_name: str, alias: str, timeout=None, using="default") :raises BaseException: If the alias failed to alter. :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility - >>> connections.connect() + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> schema = CollectionSchema([ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) @@ -682,15 +754,14 @@ def alter_alias(collection_name: str, alias: str, timeout=None, using="default") return _get_connection(using).alter_alias(collection_name, alias, timeout=timeout) -def list_aliases(collection_name: str, timeout=None, using="default"): - """ Returns alias list of the collection. +def list_aliases(collection_name: str, timeout: Optional[float] = None, using: str = "default"): + """Returns alias list of the collection. :return list of str: The collection aliases, returned when the operation succeeds. :example: - >>> from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType, utility - >>> connections.connect() + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility >>> fields = [ ... FieldSchema("film_id", DataType.INT64, is_primary=True), ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) @@ -701,4 +772,540 @@ def list_aliases(collection_name: str, timeout=None, using="default"): >>> utility.list_aliases(collection.name) ['tom'] """ - pass + conn = _get_connection(using) + resp = conn.list_aliases(collection_name, timeout=timeout) + return resp["aliases"] + + +def do_bulk_insert( + collection_name: str, + files: List[str], + partition_name: Optional[str] = None, + timeout: Optional[float] = None, + using: str = "default", + **kwargs, +) -> int: + """do_bulk_insert inserts entities through files, currently supports row-based json file. + User need to create the json file with a specified json format which is described in + the official user guide. + + Let's say a collection has two fields: "id" and "vec"(dimension=8), + the row-based json format is: + + {"rows": [ + {"id": "0", "vec": [0.190, 0.046, 0.143, 0.972, 0.592, 0.238, 0.266, 0.995]}, + {"id": "1", "vec": [0.149, 0.586, 0.012, 0.673, 0.588, 0.917, 0.949, 0.944]}, + ...... + ] + } + + The json file must be uploaded to root path of MinIO/S3 storage which is + accessed by milvus server. For example: + + the milvus.yml specify the MinIO/S3 storage bucketName as "a-bucket", + user can upload his json file to a-bucket/xxx.json, + then call do_bulk_insert(files=["a-bucket/xxx.json"]) + + :param collection_name: the name of the collection + :type collection_name: str + + :param partition_name: the name of the partition + :type partition_name: str + + :param files: related path of the file to be imported, for row-based json file, + only allow one file each invocation. + :type files: list[str] + + :param timeout: The timeout for this method, unit: second + :type timeout: int + + :param kwargs: other infos + + :return: id of the task + :rtype: int + + :raises BaseException: If collection_name doesn't exist. + :raises BaseException: If the files input is illegal. + + :example: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility + >>> schema = CollectionSchema([ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=2) + ... ]) + >>> collection = Collection("test_collection_bulk_insert", schema) + >>> task_id = utility.do_bulk_insert(collection_name=collection.name, files=['data.json']) + >>> print(task_id) + """ + return _get_connection(using).do_bulk_insert( + collection_name, partition_name, files, timeout=timeout, **kwargs + ) + + +def get_bulk_insert_state( + task_id: int, + timeout: Optional[float] = None, + using: str = "default", + **kwargs, +) -> BulkInsertState: + """get_bulk_insert_state returns state of a certain task_id + + :param task_id: the task id returned by bulk_insert + :type task_id: int + + :return: BulkInsertState + :rtype: BulkInsertState + + :example: + >>> from pymilvus import connections, utility, BulkInsertState + >>> connections.connect() + >>> # the id is returned by do_bulk_insert() + >>> state = utility.get_bulk_insert_state(task_id=id) + >>> if state.state == BulkInsertState.ImportFailed or \ + ... state.state == BulkInsertState.ImportFailedAndCleaned: + >>> print("task id:", state.task_id, "failed, reason:", state.failed_reason) + """ + return _get_connection(using).get_bulk_insert_state(task_id, timeout=timeout, **kwargs) + + +def list_bulk_insert_tasks( + limit: int = 0, + collection_name: Optional[str] = None, + timeout: Optional[float] = None, + using: str = "default", + **kwargs, +) -> list: + """list_bulk_insert_tasks lists all bulk load tasks + + :param limit: maximum number of tasks returned, list all tasks if the value is 0, + else return the latest tasks + :type limit: int + + :param collection_name: target collection name, list all tasks if the name is empty + :type collection_name: str + + :return: list[BulkInsertState] + :rtype: list[BulkInsertState] + + :example: + >>> from pymilvus import connections, utility, BulkInsertState + >>> connections.connect() + >>> tasks = utility.list_bulk_insert_tasks(collection_name=collection_name) + >>> print(tasks) + """ + return _get_connection(using).list_bulk_insert_tasks( + limit, collection_name, timeout=timeout, **kwargs + ) + + +def reset_password( + user: str, + old_password: str, + new_password: str, + using: str = "default", + timeout: Optional[float] = None, +): + """ + Reset the user & password of the connection. + You must provide the original password to check if the operation is valid. + Note: after this operation, the connection is also ready to use. + + :param user: the user of the Milvus connection. + :type user: str + :param old_password: the original password of the Milvus connection. + :type old_password: str + :param new_password: the newly password of this user. + :type new_password: str + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.reset_password(user, old_password, new_password) + >>> users = utility.list_usernames() + >>> print(f"users in Milvus: {users}") + """ + return _get_connection(using).reset_password(user, old_password, new_password, timeout=timeout) + + +def create_user( + user: str, + password: str, + using: str = "default", + timeout: Optional[float] = None, +): + """Create User using the given user and password. + :param user: the user name. + :type user: str + :param password: the password. + :type password: str + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.create_user(user, password) + >>> connections.connect(user=user, password=password) + >>> users = utility.list_usernames() + >>> print(f"users in Milvus: {users}") + """ + return _get_connection(using).create_user(user, password, timeout=timeout) + + +def update_password( + user: str, + old_password: str, + new_password: str, + using: str = "default", + timeout: Optional[float] = None, +): + """ + Update user password using the given user and password. + You must provide the original password to check if the operation is valid. + Note: after this operation, PyMilvus won't change the related header of this connection. + So if you update credential for this connection, the connection may be invalid. + + :param user: the user name. + :type user: str + :param old_password: the original password. + :type old_password: str + :param new_password: the newly password of this user. + :type new_password: str + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.update_password(user, old_password, new_password) + >>> connections.connect(user=user, password=new_password) + >>> users = utility.list_usernames() + >>> print(f"users in Milvus: {users}") + """ + return _get_connection(using).update_password(user, old_password, new_password, timeout=timeout) + + +def delete_user(user: str, using: str = "default", timeout: Optional[float] = None): + """Delete User corresponding to the username. + :param user: the user name. + :type user: str + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.delete_user(user) + >>> users = utility.list_usernames() + >>> print(f"users in Milvus: {users}") + """ + return _get_connection(using).delete_user(user, timeout=timeout) + + +def list_usernames(using: str = "default", timeout: Optional[float] = None): + """List all usernames. + :return list of str: + The usernames in Milvus instances. + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> users = utility.list_usernames() + >>> print(f"users in Milvus: {users}") + """ + return _get_connection(using).list_usernames(timeout=timeout) + + +def list_roles(include_user_info: bool, using: str = "default", timeout: Optional[float] = None): + """List All Role Info + :param include_user_info: whether to obtain the user information associated with roles + :type include_user_info: bool + :return RoleInfo + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> roles = utility.list_roles() + >>> print(f"roles in Milvus: {roles}") + """ + return _get_connection(using).select_all_role(include_user_info, timeout=timeout) + + +def list_user( + username: str, + include_role_info: bool, + using: str = "default", + timeout: Optional[float] = None, +): + """List One User Info + :param username: user name. + :type username: str + :param include_role_info: whether to obtain the role information associated with the user + :type include_role_info: bool + :return UserInfo + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> user = utility.list_user(username, include_role_info) + >>> print(f"user info: {user}") + """ + return _get_connection(using).select_one_user(username, include_role_info, timeout=timeout) + + +def list_users(include_role_info: bool, using: str = "default", timeout: Optional[float] = None): + """List All User Info + :param include_role_info: whether to obtain the role information associated with users + :type include_role_info: bool + :return UserInfo + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> users = utility.list_users(include_role_info) + >>> print(f"users info: {users}") + """ + return _get_connection(using).select_all_user(include_role_info, timeout=timeout) + + +def get_server_version(using: str = "default", timeout: Optional[float] = None) -> str: + """get the running server's version + + :returns: server's version + :rtype: str + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.get_server_version() + >>> "2.2.0" + """ + return _get_connection(using).get_server_version(timeout=timeout) + + +def create_resource_group( + name: str, using: str = "default", timeout: Optional[float] = None, **kwargs +): + """Create a resource group + It will success whether or not the resource group exists. + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.create_resource_group(name) + >>> rgs = utility.list_resource_groups() + >>> print(f"resource groups in Milvus: {rgs}") + """ + return _get_connection(using).create_resource_group(name, timeout, **kwargs) + + +def update_resource_groups( + configs: Mapping[str, ResourceGroupConfig], + using: str = "default", + timeout: Optional[float] = None, +): + """Update resource groups. + This function updates the resource groups based on the provided configurations. + + :param configs: A mapping of resource group names to their configurations. + :type configs: Mapping[str, ResourceGroupConfig] + :param using: The name of the connection to use. Defaults to "default". + :type using: (str, optional) + :param timeout: The timeout value in seconds. Defaults to None. + :type timeout: (float, optional) + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> configs = { + ... "resource_group_1": ResourceGroupConfig( + ... requests={"node_num": 1}, + ... limits={"node_num": 5}, + ... transfer_from=[{"resource_group": "resource_group_2"}], + ... transfer_to=[{"resource_group": "resource_group_2"}], + ... ), + ... "resource_group_2": ResourceGroupConfig( + ... requests={"node_num": 4}, + ... limits={"node_num": 4}, + ... transfer_from=[{"resource_group": "__default_resource_group"}], + ... transfer_to=[{"resource_group": "resource_group_1"}], + ... ), + ... } + >>> utility.update_resource_groups(configs) + """ + return _get_connection(using).update_resource_groups(configs, timeout) + + +def drop_resource_group(name: str, using: str = "default", timeout: Optional[float] = None): + """Drop a resource group + It will success if the resource group is existed and empty, otherwise fail. + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> utility.drop_resource_group(name) + >>> rgs = utility.list_resource_groups() + >>> print(f"resource groups in Milvus: {rgs}") + """ + return _get_connection(using).drop_resource_group(name, timeout) + + +def describe_resource_group(name: str, using: str = "default", timeout: Optional[float] = None): + """Drop a resource group + It will success if the resource group is existed and empty, otherwise fail. + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> rgInfo = utility.list_resource_groups(name) + >>> print(f"resource group info: {rgInfo}") + """ + return _get_connection(using).describe_resource_group(name, timeout) + + +def list_resource_groups(using: str = "default", timeout: Optional[float] = None): + """list all resource group names + + :return: all resource group names + :rtype: list[str] + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> rgs = utility.list_resource_groups() + >>> print(f"resource group names: {rgs}") + """ + return _get_connection(using).list_resource_groups(timeout) + + +def transfer_node( + source_group: str, + target_group: str, + num_nodes: int, + using: str = "default", + timeout: Optional[float] = None, +): + """transfer num_node from source resource group to target resource_group + + :param source_group: source resource group name + :type source_group: str + :param target_group: target resource group name + :type target_group: str + :param num_nodes: transfer node num + :type num_nodes: int + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> rgs = utility.transfer_node(source_group, target_group, num_nodes) + """ + return _get_connection(using).transfer_node(source_group, target_group, num_nodes, timeout) + + +def transfer_replica( + source_group: str, + target_group: str, + collection_name: str, + num_replicas: int, + using: str = "default", + timeout: Optional[float] = None, +): + """transfer num_replica from source resource group to target resource group + + :param source_group: source resource group name + :type source_group: str + :param target_group: target resource group name + :type target_group: str + :param collection_name: collection name which replica belong to + :type collection_name: str + :param num_replicas: transfer replica num + :type num_replicas: int + + :example: + >>> from pymilvus import connections, utility + >>> connections.connect() + >>> rgs = utility.transfer_replica(source, target, collection_name, num_replica) + """ + return _get_connection(using).transfer_replica( + source_group, target_group, collection_name, num_replicas, timeout + ) + + +def flush_all(using: str = "default", timeout: Optional[float] = None, **kwargs): + """Flush all collections. All insertions, deletions, and upserts before + `flush_all` will be synced. + + Args: + timeout (float): an optional duration of time in seconds to allow for the RPCs. + If timeout is not set, the client keeps waiting until the server responds or + an error occurs. + **kwargs (``dict``, optional): + * *db*(``string``) + database to flush. + * *_async*(``bool``) + Indicate if invoke asynchronously. Default `False`. + + Examples: + >>> from pymilvus import Collection, FieldSchema, CollectionSchema, DataType, utility + >>> fields = [ + ... FieldSchema("film_id", DataType.INT64, is_primary=True), + ... FieldSchema("films", dtype=DataType.FLOAT_VECTOR, dim=128) + ... ] + >>> schema = CollectionSchema(fields=fields) + >>> collection = Collection(name="test_collection_flush", schema=schema) + >>> collection.insert([[1, 2], [[1.0, 2.0], [3.0, 4.0]]]) + >>> utility.flush_all(_async=False) # synchronized flush_all + >>> # or use `future` to flush_all asynchronously + >>> future = utility.flush_all(_async=True) + >>> future.done() # flush_all finished + """ + return _get_connection(using).flush_all(timeout=timeout, **kwargs) + + +def get_server_type(using: str = "default"): + """Get the server type. Now, it will return "zilliz" if the connection related to + an instance on the zilliz cloud, otherwise "milvus" will be returned. + + :param using: Alias to the connection. Default connection is used if this is not specified. + :type using: str + + :return: The server type. + :rtype: str + """ + return _get_connection(using).get_server_type() + + +def list_indexes( + collection_name: str, + using: str = "default", + timeout: Optional[float] = None, + **kwargs, +): + """List all indexes of collection. If `field_name` is not specified, + return all the indexes of this collection, otherwise this interface will return + all indexes on this field of the collection. + + :param collection_name: The name of collection. + :type collection_name: str + + :param using: Alias to the connection. Default connection is used if this is not specified. + :type using: str + + :param timeout: An optional duration of time in seconds to allow for the RPC. When timeout + is set to None, client waits until server response or error occur + :type timeout: float/int + + :param kwargs: + * *field_name* (``str``) + The name of field. If no field name is specified, all indexes + of this collection will be returned. + :type kwargs: dict + + :return: The name list of all indexes. + :rtype: str list + """ + indexes = _get_connection(using).list_indexes(collection_name, timeout, **kwargs) + field_name = kwargs.get("field_name") + index_name_list = [] + for index in indexes: + if index is not None: + if field_name is None: + # list all indexes anyway. + index_name_list.append(index.index_name) + if field_name is not None and index.field_name == field_name: + # list all indexes of this field. + index_name_list.append(index.index_name) + return index_name_list diff --git a/pymilvus/settings.py b/pymilvus/settings.py index b8011bd83..f58211c48 100644 --- a/pymilvus/settings.py +++ b/pymilvus/settings.py @@ -1,78 +1,102 @@ import logging.config +import os +from dotenv import load_dotenv -class DefaultConfig: +load_dotenv() + + +class Config: + # legacy env MILVUS_DEFAULT_CONNECTION, not recommended + LEGACY_URI = str(os.getenv("MILVUS_DEFAULT_CONNECTION", "")) + MILVUS_URI = str(os.getenv("MILVUS_URI", LEGACY_URI)) + + MILVUS_CONN_ALIAS = str(os.getenv("MILVUS_CONN_ALIAS", "default")) + MILVUS_CONN_TIMEOUT = float(os.getenv("MILVUS_CONN_TIMEOUT", "10.0")) + + # legacy configs: + DEFAULT_USING = MILVUS_CONN_ALIAS + DEFAULT_CONNECT_TIMEOUT = MILVUS_CONN_TIMEOUT + + # TODO tidy the following configs GRPC_PORT = "19530" GRPC_ADDRESS = "127.0.0.1:19530" - GRPC_URI = "tcp://{}".format(GRPC_ADDRESS) + GRPC_URI = f"tcp://{GRPC_ADDRESS}" + + DEFAULT_HOST = "localhost" + DEFAULT_PORT = "19530" - HTTP_PORT = "19121" - HTTP_ADDRESS = "127.0.0.1:19121" - HTTP_URI = "http://{}".format(HTTP_ADDRESS) + WaitTimeDurationWhenLoad = 0.2 # in seconds + MaxVarCharLengthKey = "max_length" + MaxVarCharLength = 65535 + EncodeProtocol = "utf-8" + IndexName = "" - CALC_DIST_METRIC = "L2" # logging COLORS = { - 'HEADER': '\033[95m', - 'INFO': '\033[92m', - 'DEBUG': '\033[94m', - 'WARNING': '\033[93m', - 'ERROR': '\033[95m', - 'CRITICAL': '\033[91m', - 'ENDC': '\033[0m', + "HEADER": "\033[95m", + "INFO": "\033[92m", + "DEBUG": "\033[94m", + "WARNING": "\033[93m", + "ERROR": "\033[95m", + "CRITICAL": "\033[91m", + "ENDC": "\033[0m", } class ColorFulFormatColMixin: - def format_col(self, message_str, level_name): - if level_name in COLORS.keys(): - message_str = COLORS.get(level_name) + message_str + COLORS.get( - 'ENDC') + def format_col(self, message_str: str, level_name: str): + if level_name in COLORS: + message_str = COLORS.get(level_name) + message_str + COLORS.get("ENDC") return message_str class ColorfulFormatter(logging.Formatter, ColorFulFormatColMixin): - def format(self, record): - message_str = super(ColorfulFormatter, self).format(record) + def format(self, record: str): + message_str = super().format(record) return self.format_col(message_str, level_name=record.levelname) -LOG_LEVEL = 'WARNING' -# LOG_LEVEL = 'DEBUG' - -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', - 'level': LOG_LEVEL, +def init_log(log_level: str): + logging_config = { + "version": 1, + "disable_existing_loggers": False, + "formatters": { + "default": { + "format": "%(asctime)s [%(levelname)s][%(funcName)s]: %(message)s (%(filename)s:%(lineno)s)", + }, + "colorful_console": { + "format": "%(asctime)s | %(levelname)s: %(message)s (%(filename)s:%(lineno)s) (%(process)s)", + "()": ColorfulFormatter, + }, }, - }, - 'loggers': { - 'milvus': { - 'handlers': ['console'], - 'level': LOG_LEVEL, + "handlers": { + "console": { + "class": "logging.StreamHandler", + "formatter": "colorful_console", + }, + "no_color_console": { + "class": "logging.StreamHandler", + "formatter": "default", + }, }, - }, -} - -if LOG_LEVEL == 'DEBUG': - LOGGING['formatters'] = { - 'colorful_console': { - 'format': '[%(asctime)s-%(levelname)s-%(name)s]: %(message)s (%(filename)s:%(lineno)s)', - '()': ColorfulFormatter, + "loggers": { + "pymilvus": {"handlers": ["no_color_console"], "level": log_level, "propagate": False}, + "pymilvus.milvus_client": { + "handlers": ["no_color_console"], + "level": "INFO", + "propagate": False, + }, + "pymilvus.bulk_writer": { + "handlers": ["no_color_console"], + "level": "INFO", + "propagate": False, + }, }, } - LOGGING['handlers']['milvus_console'] = { - 'class': 'logging.StreamHandler', - 'formatter': 'colorful_console', - } - LOGGING['loggers']['milvus'] = { - 'handlers': ['milvus_console'], - 'level': LOG_LEVEL, - } + logging.config.dictConfig(logging_config) + -logging.config.dictConfig(LOGGING) +init_log("WARNING") diff --git a/pyproject.toml b/pyproject.toml index 1bf72df1f..83b9457b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,217 @@ [build-system] requires = [ - "setuptools >= 42", + "setuptools >= 78.1.1; python_version >= '3.9'", + "setuptools <= 75.3.2; python_version == '3.8'", "wheel", "gitpython", + "setuptools_scm[toml]>=6.2", ] build-backend = "setuptools.build_meta" + +[tool.setuptools] +packages = ["pymilvus"] + + +[project] +name="pymilvus" +authors = [ + {name='Milvus Team', email="milvus-team@zilliz.com"}, +] +requires-python = '>=3.8' +description = "Python Sdk for Milvus" +readme = "README.md" +dependencies=[ + "setuptools <= 75.3.2; python_version == '3.8'", + "setuptools >= 78.1.1; python_version >= '3.9'", + "grpcio>=1.66.2,!=1.68.0,!=1.68.1,!=1.69.0,!=1.70.0,!=1.70.1,!=1.71.0,!=1.72.1,!=1.73.0", + "orjson>=3.10.15", # orjson 3.10.15 is the last version to support python3.8 + "protobuf>=5.27.2", # aligned with grpcio-tools generated codes + "python-dotenv>=1.0.1, <2.0.0", + "pandas>=1.2.4", + "numpy<1.25.0;python_version<='3.8'", +] + +classifiers=[ + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "License :: OSI Approved :: Apache Software License", +] + +dynamic = ["version"] + +[project.urls] +"repository" = 'https://github.com/milvus-io/pymilvus' + +[project.optional-dependencies] +bulk_writer = [ + "requests", + "minio>=7.0.0", + "pyarrow>=12.0.0", + "azure-storage-blob", + "urllib3", +] + +model = [ + "pymilvus.model>=0.3.0", +] + +milvus_lite = [ + "milvus-lite>=2.4.0;sys_platform!='win32'", +] + +dev = [ + # Python3.13 supports starts from 1.66.2 + "grpcio==1.66.2", + "grpcio-tools==1.66.2", + "grpcio-testing==1.66.2", + "pytest>=5.3.4", + "pytest-cov>=5.0.0", + "pytest-timeout>=1.3.4", + "pytest-asyncio", + "ruff>=0.12.9,<1", + "black", + # develop bulk_writer + "requests", + "minio>=7.0.0", + "pyarrow>=12.0.0", + "azure-storage-blob", + "urllib3", + "scipy", +] + +[tool.setuptools.dynamic] +version = { attr = "_version_helper.version"} + +[tool.setuptools_scm] + +[tool.black] +line-length = 100 +target-version = ['py38'] +include = '\.pyi?$' +# 'extend-exclude' excludes files or directories in addition to the defaults +extend-exclude = ''' +# A regex preceded with ^/ will apply only to files and directories +# in the root of the project. +( + ^/foo.py # exclude a file named foo.py in the root of the project + | .*/grpc_gen/ +) +''' + +[tool.ruff] +lint.select = [ + "E", + "F", + "C90", + "I", + "N", + "B", "C", "G", + "A", + "ANN001", + "S", "T", "W", "ARG", "BLE", "COM", "DJ", "EM", "ERA", "EXE", "FBT", "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", "YTT" +] +lint.ignore = [ + "N818", + "DTZ", # datatime related + "BLE", # blind-except (BLE001) + "SLF", # SLF001 Private member accessed: `_fetch_handler` [E] + "PD003", + "TRY003", # [ruff] TRY003 Avoid specifying long messages outside the exception class [E] TODO + "PLR2004", # Magic value used in comparison, consider replacing 65535 with a constant variable [E] TODO + "TRY301", #[ruff] TRY301 Abstract `raise` to an inner function [E] + "FBT001", #[ruff] FBT001 Boolean positional arg in function definition [E] TODO + "FBT002", # [ruff] FBT002 Boolean default value in function definition [E] TODO + "PLR0911", # Too many return statements (15 > 6) [E] + "G004", # [ruff] G004 Logging statement uses f-string [E] + "S603", # [ruff] S603 `subprocess` call: check for execution of untrusted input [E] + "N802", #[ruff] N802 Function name `OK` should be lowercase [E] TODO + "PD011", # [ruff] PD011 Use `.to_numpy()` instead of `.values` [E] + "COM812", + "FBT003", # [ruff] FBT003 Boolean positional value in function call [E] TODO + "ARG002", + "E501", # black takes care of it + "ARG005", # [ruff] ARG005 Unused lambda argument: `disable` [E] + "TRY400", + "PLR0912", # TODO + "PLR0915", # To many statements TODO + "C901", # TODO + "PYI041", # TODO + "E402", + "PLW1641", # TODO Object does not implement `__hash__` method +] + +# Allow autofix for all enabled rules (when `--fix`) is provided. +lint.fixable = [ + "A", "B", "C", "D", "E", "F", "G", "I", "N", "Q", "S", "T", "W", + "ANN", "ARG", "BLE", "COM", "DJ", "DTZ", "EM", "ERA", "EXE", "FBT", + "ICN", "INP", "ISC", "NPY", "PD", "PGH", "PIE", "PL", "PT", "PTH", + "PYI", "RET", "RSE", "RUF", "SIM", "SLF", "TCH", "TID", "TRY", "UP", + "YTT", +] +lint.unfixable = [] + +show-fixes = true + +# Exclude a variety of commonly ignored directories. +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".mypy_cache", + ".nox", + ".pants.d", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "venv", + "grpc_gen", + "__pycache__", + "pymilvus/client/stub.py", +] + +# Same as Black. +line-length = 100 + +# Allow unused variables when underscore-prefixed. +lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$" + +# Assume Python 3.8 +target-version = "py38" + +[tool.ruff.lint.mccabe] +# Unlike Flake8, default to a complexity level of 10. +max-complexity = 18 + +[tool.ruff.lint.pycodestyle] +max-doc-length = 100 + +[tool.ruff.lint.pylint] +max-args = 20 +max-branches = 15 + +[tool.ruff.lint.flake8-builtins] +builtins-ignorelist = [ + "format", + "next", + "object", # TODO + "id", + "dict", # TODO + "filter", +] +builtins-allowed-modules = ["types"] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index f83c7e579..000000000 --- a/requirements.txt +++ /dev/null @@ -1,34 +0,0 @@ -build==0.4.0 -certifi==2021.5.30 -chardet==4.0.0 -grpcio==1.37.1 -grpcio-testing==1.37.1 -grpcio-tools==1.37.1 -idna==2.10 -mmh3>=2.0,<=3.0.0 -packaging==20.9 -pep517==0.10.0 -protobuf==3.17.1 -pyparsing==2.4.7 -six==1.16.0 -toml==0.10.2 -ujson>=2.0.0,<=5.1.0 -urllib3==1.26.5 -sklearn==0.0 -m2r==0.2.1 -mistune==0.8.4 -Sphinx==2.3.1 -sphinx-copybutton==0.3.1 -sphinx-rtd-theme==0.4.3 -sphinxcontrib-applehelp==1.0.1 -sphinxcontrib-devhelp==1.0.1 -sphinxcontrib-htmlhelp==1.0.2 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.2 -sphinxcontrib-serializinghtml==1.1.3 -sphinxcontrib-prettyspecialmethods -pytest==5.3.4 -pytest-cov==2.8.1 -pytest-timeout==1.3.4 -pylint==2.4.4 -pandas<=1.3.5 diff --git a/setup.py b/setup.py deleted file mode 100644 index 629b44743..000000000 --- a/setup.py +++ /dev/null @@ -1,38 +0,0 @@ -import pathlib -import setuptools -from datetime import datetime -import re - -HERE = pathlib.Path(__file__).parent - -README = (HERE / 'README.md').read_text() - -setuptools.setup( - name="pymilvus", - author='Milvus Team', - author_email='milvus-team@zilliz.com', - setup_requires=['setuptools_scm'], - use_scm_version={'local_scheme': 'no-local-version'}, - description="Python Sdk for Milvus", - long_description=README, - long_description_content_type='text/markdown', - url='https://github.com/milvus-io/pymilvus', - license="Apache-2.0", - packages=setuptools.find_packages(), - include_package_data=True, - install_requires=[ - "grpcio==1.37.1", - "grpcio-tools==1.37.1", - "ujson>=2.0.0,<=5.1.0", - "mmh3>=2.0,<=3.0.0", - "pandas==1.1.5; python_version<'3.7'", - "pandas>=1.2.4,<=1.3.5; python_version>'3.6'", - ], - classifiers=[ - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - ], - - python_requires='>=3.6' -) diff --git a/tests/conftest.py b/tests/conftest.py index 9e053200c..96bc0bc53 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,35 @@ +import logging import sys +from pathlib import Path -from os.path import dirname, abspath -sys.path.append(dirname(dirname(abspath(__file__)))) +import grpc_testing +import pytest + +# https://github.com/grpc/grpc/blob/5918f98ecbf5ace77f30fa97f7fc3e8bdac08e04/src/python/grpcio_tests/tests/testing/_client_test.py +from grpc.framework.foundation import logging_pool + +logging.getLogger("faker").setLevel(logging.WARNING) + +from os.path import abspath, dirname + +from pymilvus.grpc_gen import milvus_pb2 + +sys.path.append(Path(__file__).absolute().parent.parent) + + +descriptor = milvus_pb2.DESCRIPTOR.services_by_name['MilvusService'] + + +@pytest.fixture(scope="function") +def channel(request): + return grpc_testing.channel([descriptor], grpc_testing.strict_real_time()) + + +@pytest.fixture(scope="function") +def client_thread(request): + client_execution_thread_pool = logging_pool.pool(2) + + def teardown(): + client_execution_thread_pool.shutdown(wait=True) + + return client_execution_thread_pool diff --git a/tests/mock_milvus.py b/tests/mock_milvus.py deleted file mode 100644 index 03304946f..000000000 --- a/tests/mock_milvus.py +++ /dev/null @@ -1,158 +0,0 @@ -import logging -from mock_result import MockMutationResult - - -class MockMilvus: - def __init__(self, host=None, port=None, handler="GRPC", pool="SingletonThread", **kwargs): - self._collections = dict() - self._collection_partitions = dict() - self._collection_indexes = dict() - - def create_collection(self, collection_name, fields, timeout=None, **kwargs): - if collection_name in self._collections: - raise BaseException(1, f"Create collection failed: collection {collection_name} exist") - self._collections[collection_name] = fields - self._collection_partitions[collection_name] = {'_default'} - self._collection_indexes[collection_name] = [] - logging.debug(f"create_collection: {collection_name}") - - def drop_collection(self, collection_name, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - self._collections.pop(collection_name) - self._collection_partitions.pop(collection_name) - logging.debug(f"drop_collection: {collection_name}") - - def has_collection(self, collection_name, timeout=None): - logging.debug(f"has_collection: {collection_name}") - return collection_name in self._collections - - def describe_collection(self, collection_name, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - logging.debug(f"describe_collection: {collection_name}") - return self._collections[collection_name] - - def load_collection(self, collection_name, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - logging.debug(f"load_collection: {collection_name}") - - def release_collection(self, collection_name, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - logging.debug(f"release_collection: {collection_name}") - - def get_collection_stats(self, collection_name, timeout=None, **kwargs): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - logging.debug(f"get_collection_stats: {collection_name}") - return {'row_count': 0} - - def list_collections(self, timeout=None): - logging.debug(f"list_collections") - return list(self._collections.keys()) - - def create_partition(self, collection_name, partition_tag, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"create partition failed: can't find collection: {collection_name}") - if partition_tag in self._collection_partitions[collection_name]: - raise BaseException(1, f"create partition failed: partition name = {partition_tag} already exists") - logging.debug(f"create_partition: {collection_name}, {partition_tag}") - self._collection_partitions[collection_name].add(partition_tag) - - def drop_partition(self, collection_name, partition_tag, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"DropPartition failed: can't find collection: {collection_name}") - if partition_tag not in self._collection_partitions[collection_name]: - raise BaseException(1, f"DropPartition failed: partition {partition_tag} does not exist") - if partition_tag == "_default": - raise BaseException(1, f"DropPartition failed: default partition cannot be deleted") - logging.debug(f"drop_partition: {collection_name}, {partition_tag}") - self._collection_partitions[collection_name].remove(partition_tag) - - def has_partition(self, collection_name, partition_tag, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"HasPartition failed: can't find collection: {collection_name}") - logging.debug(f"has_partition: {collection_name}, {partition_tag}") - return partition_tag in self._collection_partitions[collection_name] - - def load_partitions(self, collection_name, partition_names, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - for partition_name in partition_names: - if partition_name not in self._collection_partitions[collection_name]: - raise BaseException(1, f"partitionID of partitionName:{partition_name} can not be find") - logging.debug(f"load_partition: {collection_name}, {partition_names}") - - def release_partitions(self, collection_name, partition_names, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - for partition_name in partition_names: - if partition_name not in self._collection_partitions[collection_name]: - raise BaseException(1, f"partitionID of partitionName:{partition_name} can not be find") - logging.debug(f"release_partition: {collection_name}, {partition_names}") - - def get_partition_stats(self, collection_name, partition_name, timeout=None, **kwargs): - if collection_name not in self._collections: - raise BaseException(1, f"describe collection failed: can't find collection: {collection_name}") - if partition_name not in self._collection_partitions[collection_name]: - raise BaseException(1, f"GetPartitionStatistics failed: partition {partition_name} does not exist") - logging.debug(f"get_partition_stats: {partition_name}") - return {'row_count': 0} - - def list_partitions(self, collection_name, timeout=None): - if collection_name not in self._collections: - raise BaseException(1, f"can't find collection: {collection_name}") - logging.debug(f"list_partitions: {collection_name}") - return [e for e in self._collection_partitions[collection_name]] - - def create_index(self, collection_name, field_name, params, timeout=None, **kwargs): - logging.debug(f"create_index: {collection_name}, {field_name}, {params}") - index = {"field_name": field_name, "params": params} - self._collection_indexes[collection_name].append(index) - - def drop_index(self, collection_name, field_name, timeout=None): - logging.debug(f"drop_index: {collection_name}, {field_name}") - self._collection_indexes[collection_name] = [] - - def describe_index(self, collection_name, index_name="", timeout=None): - logging.debug(f"describe_index: {collection_name}, {index_name}") - if self._collection_indexes.get(collection_name) is None: - return - indexes = self._collection_indexes[collection_name].copy() - if len(indexes) != 0: - return indexes[0] - - def insert(self, collection_name, entities, ids=None, partition_tag=None, timeout=None, **kwargs): - return MockMutationResult() - - def flush(self, collection_names=None, timeout=None, **kwargs): - pass - - def search(self, collection_name, dsl, partition_tags=None, fields=None, timeout=None, **kwargs): - pass - - def load_collection_progress(self, collection_name, timeout=None, **kwargs): - return {'num_loaded_entities': 3000, 'num_total_entities': 5000} - - def load_partitions_progress(self, collection_name, partition_names, timeout=None, **kwargs): - return {'num_loaded_entities': 3000, 'num_total_entities': 5000} - - def wait_for_loading_collection_complete(self, collection_name, timeout=None, **kwargs): - pass - - def wait_for_loading_partitions_complete(self, collection_name, partition_names, timeout=None, **kwargs): - pass - - def get_index_build_progress(self, collection_name, index_name, timeout=None, **kwargs): - return {'total_rows': 5000, 'indexed_rows': 3000} - - def wait_for_creating_index(self, collection_name, index_name, timeout=None, **kwargs): - return True, "" - - def close(self): - pass - - -Milvus = MockMilvus diff --git a/tests/mock_result.py b/tests/mock_result.py deleted file mode 100644 index f5499833d..000000000 --- a/tests/mock_result.py +++ /dev/null @@ -1,27 +0,0 @@ -class MockMutationResult: - def __init__(self): - self._primary_keys = [] - self._insert_cnt = 0 - self._delete_cnt = 0 - self._upsert_cnt = 0 - self._timestamp = 0 - - @property - def primary_keys(self): - return self._primary_keys - - @property - def insert_count(self): - return self._insert_cnt - - @property - def delete_count(self): - return self._delete_cnt - - @property - def upsert_count(self): - return self._upsert_cnt - - @property - def timestamp(self): - return self._timestamp diff --git a/tests/pytest.ini b/tests/pytest.ini index ad6a1a292..e1105352f 100644 --- a/tests/pytest.ini +++ b/tests/pytest.ini @@ -2,3 +2,8 @@ log_format = %(asctime)s %(levelname)s %(message)s log_date_format = %Y-%m-%d %H:%M:%S log_level = debug + +log_cli = 1 +log_cli_level = debug +log_cli_format = %(asctime) s [%(levelname)s] %(message) s (%(filename) s:%(lineno) s) +log_cli_date_format=%Y-%m-%d %H:%M:%S diff --git a/tests/ruff.toml b/tests/ruff.toml new file mode 100644 index 000000000..669a9cc59 --- /dev/null +++ b/tests/ruff.toml @@ -0,0 +1,55 @@ +# Ruff configuration specific to tests directory +# This extends the root configuration but with more relaxed rules for tests + +extend = "../pyproject.toml" + +[lint] +# Additional rules to ignore in tests +extend-ignore = [ + "S101", # Use of assert detected - OK in tests + "S105", # Possible hardcoded password - OK in tests + "S106", # Possible hardcoded password - OK in tests + "S108", + "N806", + "SIM118", + "SIM117", + "ARG001", # Unused function argument - common in fixtures + "ARG002", # Unused method argument - common in test fixtures + "PLR2004", # Magic value comparisons - common in tests + "PLR0913", # Too many arguments - OK for test fixtures + "ANN001", # Missing type annotation - optional in tests + "ANN002", # Missing type annotation for *args + "ANN003", # Missing type annotation for **kwargs + "ANN201", # Missing return type annotation + "ANN202", # Missing return type annotation + "ANN204", # Missing return type annotation for special method + "ANN205", # Missing return type annotation for staticmethod + "ANN206", # Missing return type annotation for classmethod + "D", # All docstring rules - optional in tests + "FBT", # Boolean trap - OK in tests + "PT", # pytest specific rules if too strict + "TRY002", # Create your own exception - OK in tests + "TRY003", # Long exception messages - OK in tests + "EM101", # Exception must not use string literal - OK in tests + "EM102", # Exception must not use f-string literal - OK in tests + "F403", + "C901", # Too complex - complexity is OK in test setup + "PLR0912", # Too many branches - OK in complex test scenarios + "PLR0915", # Too many statements - OK in test setup + "W505", + "S311", +] + +# You can also be more selective with rules +# select = [ +# "E", # pycodestyle errors +# "F", # pyflakes +# "I", # isort +# "N", # pep8-naming +# "UP", # pyupgrade +# ] + +[lint.per-file-ignores] +# Specific ignores for certain test files +"conftest.py" = ["E402", "F401", "F403"] # Import issues common in conftest +"test_*.py" = ["S101"] # assert is expected in test files diff --git a/tests/test_async_flush.py b/tests/test_async_flush.py new file mode 100644 index 000000000..5e594fcfe --- /dev/null +++ b/tests/test_async_flush.py @@ -0,0 +1,283 @@ +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest +from pymilvus.client.async_grpc_handler import AsyncGrpcHandler +from pymilvus.exceptions import MilvusException + + +class TestAsyncFlush: + """Test cases for async flush functionality""" + + @pytest.mark.asyncio + async def test_flush_waits_for_segments_to_be_flushed(self) -> None: + """ + Test that async flush() waits for all segments to be flushed before returning. + + This test verifies the fix for the bug where async flush() would return + immediately after the RPC call, without waiting for segments to be actually flushed. + """ + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + # Create handler with mocked channel + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Mock the async stub + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create mock flush response with segment IDs and flush timestamp + mock_flush_response = MagicMock() + mock_flush_status = MagicMock() + mock_flush_status.code = 0 + mock_flush_status.error_code = 0 + mock_flush_status.reason = "" + mock_flush_response.status = mock_flush_status + + # Mock collection segment IDs and flush timestamp + mock_seg_ids = MagicMock() + mock_seg_ids.data = [1, 2, 3] # Segment IDs + mock_flush_ts = 12345 # Flush timestamp + + mock_flush_response.coll_segIDs = {"test_collection": mock_seg_ids} + mock_flush_response.coll_flush_ts = {"test_collection": mock_flush_ts} + + mock_stub.Flush = AsyncMock(return_value=mock_flush_response) + + # Mock get_flush_state to return False first, then True (simulating flush completion) + call_count = 0 + async def mock_get_flush_state(*args, **kwargs): + nonlocal call_count + call_count += 1 + # Return False first time (not flushed), True second time (flushed) + return call_count > 1 + + handler.get_flush_state = AsyncMock(side_effect=mock_get_flush_state) + + # Mock Prepare.flush_param + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_pass_param'), \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}): + mock_prepare.flush_param.return_value = MagicMock() + + # Call flush + result = await handler.flush(["test_collection"], timeout=10) + + # Verify Flush RPC was called + mock_stub.Flush.assert_called_once() + + # Verify get_flush_state was called (waiting for flush to complete) + assert handler.get_flush_state.call_count >= 1, \ + "get_flush_state should be called to wait for segments to be flushed" + + # Verify the response is returned + assert result == mock_flush_response + + @pytest.mark.asyncio + async def test_flush_waits_for_multiple_collections(self) -> None: + """ + Test that async flush() waits for all collections' segments to be flushed. + """ + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create mock flush response for multiple collections + mock_flush_response = MagicMock() + mock_flush_status = MagicMock() + mock_flush_status.code = 0 + mock_flush_status.error_code = 0 + mock_flush_status.reason = "" + mock_flush_response.status = mock_flush_status + + # Mock segment IDs and flush timestamps for two collections + mock_seg_ids_1 = MagicMock() + mock_seg_ids_1.data = [1, 2] + mock_seg_ids_2 = MagicMock() + mock_seg_ids_2.data = [3, 4] + + mock_flush_response.coll_segIDs = { + "collection1": mock_seg_ids_1, + "collection2": mock_seg_ids_2 + } + mock_flush_response.coll_flush_ts = { + "collection1": 12345, + "collection2": 12346 + } + + mock_stub.Flush = AsyncMock(return_value=mock_flush_response) + + # Track which collections were checked + checked_collections = [] + + async def mock_get_flush_state(segment_ids, collection_name, flush_ts, timeout=None, **kwargs): + checked_collections.append(collection_name) + return True # Always return True (already flushed) + + handler.get_flush_state = AsyncMock(side_effect=mock_get_flush_state) + + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_pass_param'), \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}): + mock_prepare.flush_param.return_value = MagicMock() + + await handler.flush(["collection1", "collection2"], timeout=10) + + # Verify both collections were checked + assert "collection1" in checked_collections, \ + "collection1 should be checked for flush completion" + assert "collection2" in checked_collections, \ + "collection2 should be checked for flush completion" + assert handler.get_flush_state.call_count == 2, \ + "get_flush_state should be called for each collection" + + @pytest.mark.asyncio + async def test_flush_timeout(self) -> None: + """ + Test that async flush() raises timeout exception when segments don't flush in time. + """ + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create mock flush response + mock_flush_response = MagicMock() + mock_flush_status = MagicMock() + mock_flush_status.code = 0 + mock_flush_status.error_code = 0 + mock_flush_status.reason = "" + mock_flush_response.status = mock_flush_status + + mock_seg_ids = MagicMock() + mock_seg_ids.data = [1, 2, 3] + + mock_flush_response.coll_segIDs = {"test_collection": mock_seg_ids} + mock_flush_response.coll_flush_ts = {"test_collection": 12345} + + mock_stub.Flush = AsyncMock(return_value=mock_flush_response) + + # Mock get_flush_state to always return False (never flushed) + handler.get_flush_state = AsyncMock(return_value=False) + + # Mock time to simulate timeout + import time + original_time = time.time + start_time = 1000.0 + current_time = start_time + + def mock_time(): + nonlocal current_time + # Increment time by 0.6 seconds each call to exceed timeout + current_time += 0.6 + return current_time + + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_pass_param'), \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}), \ + patch('pymilvus.client.async_grpc_handler.time.time', side_effect=mock_time): + mock_prepare.flush_param.return_value = MagicMock() + + # Call flush with short timeout + with pytest.raises(MilvusException) as exc_info: + await handler.flush(["test_collection"], timeout=0.5) + + # Verify timeout exception was raised + assert "wait for flush timeout" in str(exc_info.value).lower(), \ + "Should raise timeout exception when flush takes too long" + + @pytest.mark.asyncio + async def test_flush_parameter_validation(self) -> None: + """ + Test that async flush() validates parameters correctly. + """ + # Setup mock channel + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Test empty collection names + with pytest.raises(Exception): # Should raise ParamError + await handler.flush([]) + + # Test None collection names + with pytest.raises(Exception): # Should raise ParamError + await handler.flush(None) # type: ignore + + # Test invalid type + with pytest.raises(Exception): # Should raise ParamError + await handler.flush("not_a_list") # type: ignore + + @pytest.mark.asyncio + async def test_get_flush_state(self) -> None: + """ + Test the get_flush_state() method. + """ + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create mock GetFlushState response + mock_response = MagicMock() + mock_status = MagicMock() + mock_status.code = 0 + mock_status.error_code = 0 + mock_status.reason = "" + mock_response.status = mock_status + mock_response.flushed = True + + mock_stub.GetFlushState = AsyncMock(return_value=mock_response) + + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}): + mock_prepare.get_flush_state_request.return_value = MagicMock() + + # Call get_flush_state + result = await handler.get_flush_state( + segment_ids=[1, 2, 3], + collection_name="test_collection", + flush_ts=12345, + timeout=10 + ) + + # Verify GetFlushState RPC was called + mock_stub.GetFlushState.assert_called_once() + + # Verify result + assert result is True, "get_flush_state should return the flushed status" + diff --git a/tests/test_async_grpc_handler.py b/tests/test_async_grpc_handler.py new file mode 100644 index 000000000..9f155e6d6 --- /dev/null +++ b/tests/test_async_grpc_handler.py @@ -0,0 +1,244 @@ +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest +from pymilvus.client.async_grpc_handler import AsyncGrpcHandler +from pymilvus.exceptions import MilvusException + + +class TestAsyncGrpcHandler: + """Test cases for AsyncGrpcHandler class""" + + @pytest.mark.asyncio + async def test_load_partitions_refresh_attribute(self) -> None: + """ + Test that load_partitions correctly accesses request.refresh instead of request.is_refresh. + This test verifies the fix for issue #2796. + """ + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + # Create handler with mocked channel + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Mock the async stub + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create a mock response for LoadPartitions + mock_response = MagicMock() + mock_status = MagicMock() + mock_status.code = 0 + mock_status.error_code = 0 + mock_status.reason = "" + mock_response.status = mock_status + mock_stub.LoadPartitions = AsyncMock(return_value=mock_response) + + # Mock wait_for_loading_partitions to avoid actual waiting + handler.wait_for_loading_partitions = AsyncMock() + + # Mock Prepare.load_partitions to return a request with refresh attribute + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_pass_param'), \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}): + # Create mock request with refresh attribute (not is_refresh) + mock_request = MagicMock() + mock_request.refresh = True # This is the correct attribute name + mock_prepare.load_partitions.return_value = mock_request + + # Call load_partitions + await handler.load_partitions( + collection_name="test_collection", + partition_names=["partition1", "partition2"], + replica_number=1, + timeout=30, + refresh=True + ) + + # Verify that Prepare.load_partitions was called correctly + mock_prepare.load_partitions.assert_called_once_with( + collection_name="test_collection", + partition_names=["partition1", "partition2"], + replica_number=1, + refresh=True + ) + + # Verify that wait_for_loading_partitions was called with is_refresh parameter + # correctly set from request.refresh (not request.is_refresh) + handler.wait_for_loading_partitions.assert_called_once_with( + collection_name="test_collection", + partition_names=["partition1", "partition2"], + is_refresh=True, # Should be the value from request.refresh + timeout=30, + refresh=True + ) + + @pytest.mark.asyncio + async def test_load_partitions_without_refresh(self) -> None: + """Test load_partitions when refresh parameter is not provided""" + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + # Create handler with mocked channel + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Mock the async stub + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create a mock response for LoadPartitions + mock_response = MagicMock() + mock_status = MagicMock() + mock_status.code = 0 + mock_status.error_code = 0 + mock_status.reason = "" + mock_response.status = mock_status + mock_stub.LoadPartitions = AsyncMock(return_value=mock_response) + + # Mock wait_for_loading_partitions + handler.wait_for_loading_partitions = AsyncMock() + + # Mock Prepare.load_partitions + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_pass_param'), \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}): + # Create mock request with default refresh value + mock_request = MagicMock() + mock_request.refresh = False # Default value when not specified + mock_prepare.load_partitions.return_value = mock_request + + # Call load_partitions without refresh parameter + await handler.load_partitions( + collection_name="test_collection", + partition_names=["partition1"], + timeout=30 + ) + + # Verify that wait_for_loading_partitions was called with is_refresh=False + handler.wait_for_loading_partitions.assert_called_once_with( + collection_name="test_collection", + partition_names=["partition1"], + is_refresh=False, # Should be False when not specified + timeout=30 + ) + + @pytest.mark.asyncio + async def test_wait_for_loading_partitions(self) -> None: + """Test wait_for_loading_partitions method""" + # Setup mock channel + mock_channel = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + # Create handler with mocked channel + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Mock get_loading_progress to return 100 immediately + handler.get_loading_progress = AsyncMock(return_value=100) + + # Call wait_for_loading_partitions + await handler.wait_for_loading_partitions( + collection_name="test_collection", + partition_names=["partition1", "partition2"], + is_refresh=True, + timeout=30 + ) + + # Verify that get_loading_progress was called + handler.get_loading_progress.assert_called_once_with( + "test_collection", + ["partition1", "partition2"], + timeout=30, + is_refresh=True + ) + + @pytest.mark.asyncio + async def test_wait_for_loading_partitions_timeout(self) -> None: + """Test that wait_for_loading_partitions raises exception on timeout""" + + # Setup mock channel + mock_channel = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + # Create handler with mocked channel + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Mock get_loading_progress to always return less than 100 + handler.get_loading_progress = AsyncMock(return_value=50) + + # Call wait_for_loading_partitions with very short timeout + with pytest.raises(MilvusException) as exc_info: + await handler.wait_for_loading_partitions( + collection_name="test_collection", + partition_names=["partition1"], + is_refresh=False, + timeout=0.001 # Very short timeout to trigger timeout error + ) + + assert "wait for loading partition timeout" in str(exc_info.value) + + @pytest.mark.asyncio + async def test_load_partitions_with_resource_groups(self) -> None: + """Test load_partitions with additional parameters like resource_groups""" + # Setup mock channel and stub + mock_channel = AsyncMock() + mock_channel.channel_ready = AsyncMock() + mock_channel.close = AsyncMock() + mock_channel._unary_unary_interceptors = [] + + # Create handler with mocked channel + handler = AsyncGrpcHandler(channel=mock_channel) + handler._is_channel_ready = True + + # Mock the async stub + mock_stub = AsyncMock() + handler._async_stub = mock_stub + + # Create a mock response for LoadPartitions + mock_response = MagicMock() + mock_status = MagicMock() + mock_status.code = 0 + mock_status.error_code = 0 + mock_status.reason = "" + mock_response.status = mock_status + mock_stub.LoadPartitions = AsyncMock(return_value=mock_response) + + # Mock wait_for_loading_partitions + handler.wait_for_loading_partitions = AsyncMock() + + # Mock Prepare.load_partitions + with patch('pymilvus.client.async_grpc_handler.Prepare') as mock_prepare, \ + patch('pymilvus.client.async_grpc_handler.check_pass_param'), \ + patch('pymilvus.client.async_grpc_handler.check_status'), \ + patch('pymilvus.client.async_grpc_handler._api_level_md', return_value={}): + # Create mock request + mock_request = MagicMock() + mock_request.refresh = False + mock_prepare.load_partitions.return_value = mock_request + + # Call load_partitions with resource_groups + await handler.load_partitions( + collection_name="test_collection", + partition_names=["partition1"], + replica_number=2, + resource_groups=["rg1", "rg2"], + timeout=30 + ) + + # Verify that Prepare.load_partitions was called with resource_groups + mock_prepare.load_partitions.assert_called_once_with( + collection_name="test_collection", + partition_names=["partition1"], + replica_number=2, + resource_groups=["rg1", "rg2"] + ) diff --git a/tests/test_async_milvus_client_reuse.py b/tests/test_async_milvus_client_reuse.py new file mode 100644 index 000000000..36ba196d6 --- /dev/null +++ b/tests/test_async_milvus_client_reuse.py @@ -0,0 +1,48 @@ +import asyncio +import pytest +from unittest.mock import patch, MagicMock +from pymilvus import AsyncMilvusClient + +class TestAsyncConnectionReuse: + def test_async_client_alias_different_loops(self): + """ + Test that AsyncMilvusClient generates different connection aliases + for different event loops to avoid reusing closed connections. + """ + uri = "http://localhost:19530" + + async def create_client(): + # Mock connections.connect to avoid real network connection + # Mock utility.get_server_type to avoid checking server version + with patch("pymilvus.orm.connections.Connections.connect") as mock_connect, \ + patch("pymilvus.orm.utility.get_server_type", return_value="milvus"): + + client = AsyncMilvusClient(uri=uri) + # Return the alias used and the current loop id + return client._using, id(asyncio.get_running_loop()) + + # Manually create loops to ensure we have distinct objects + loop1 = asyncio.new_event_loop() + loop2 = asyncio.new_event_loop() + + try: + # Run in loop 1 + alias1, loop1_id = loop1.run_until_complete(create_client()) + + # Run in loop 2 + alias2, loop2_id = loop2.run_until_complete(create_client()) + + print(f"Loop 1 ID: {loop1_id}, Alias 1: {alias1}") + print(f"Loop 2 ID: {loop2_id}, Alias 2: {alias2}") + + # Since loop1 and loop2 are both alive (referenced), they must have different IDs + assert loop1_id != loop2_id, "Two active loops must have different IDs" + assert alias1 != alias2, "Aliases should be different for different loops" + + # Check if loop ID is part of the alias + assert f"loop{loop1_id}" in alias1 + assert f"loop{loop2_id}" in alias2 + + finally: + loop1.close() + loop2.close() diff --git a/tests/test_bulk_writer_buffer.py b/tests/test_bulk_writer_buffer.py new file mode 100644 index 000000000..c228b2bc7 --- /dev/null +++ b/tests/test_bulk_writer_buffer.py @@ -0,0 +1,765 @@ +import json +import tempfile +from pathlib import Path +from unittest.mock import patch + +import numpy as np +import pytest +from pymilvus.bulk_writer.buffer import Buffer +from pymilvus.bulk_writer.constants import DYNAMIC_FIELD_NAME, BulkFileType +from pymilvus.client.types import DataType +from pymilvus.exceptions import MilvusException +from pymilvus.orm.schema import CollectionSchema, FieldSchema + + +class TestBuffer: + @pytest.fixture + def simple_schema(self): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512), + ] + return CollectionSchema(fields=fields) + + @pytest.fixture + def complex_schema(self): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="bool_field", dtype=DataType.BOOL), + FieldSchema(name="int8_field", dtype=DataType.INT8), + FieldSchema(name="int16_field", dtype=DataType.INT16), + FieldSchema(name="int32_field", dtype=DataType.INT32), + FieldSchema(name="float_field", dtype=DataType.FLOAT), + FieldSchema(name="double_field", dtype=DataType.DOUBLE), + FieldSchema(name="json_field", dtype=DataType.JSON), + FieldSchema(name="array_field", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + FieldSchema(name="binary_vector", dtype=DataType.BINARY_VECTOR, dim=128), + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=128), + FieldSchema(name="bfloat16_vector", dtype=DataType.BFLOAT16_VECTOR, dim=128), + FieldSchema(name="int8_vector", dtype=DataType.INT8_VECTOR, dim=128), + ] + return CollectionSchema(fields=fields) + + @pytest.fixture + def dynamic_schema(self): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + ] + return CollectionSchema(fields=fields, enable_dynamic_field=True) + + def test_buffer_init_numpy(self, simple_schema: CollectionSchema): + buffer = Buffer(simple_schema, BulkFileType.NUMPY) + assert buffer._file_type == BulkFileType.NUMPY + assert len(buffer._buffer) == 3 + assert "id" in buffer._buffer + assert "vector" in buffer._buffer + assert "text" in buffer._buffer + + def test_buffer_init_json(self, simple_schema: CollectionSchema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + assert buffer._file_type == BulkFileType.JSON + assert len(buffer._buffer) == 3 + + def test_buffer_init_parquet(self, simple_schema: CollectionSchema): + buffer = Buffer(simple_schema, BulkFileType.PARQUET) + assert buffer._file_type == BulkFileType.PARQUET + assert len(buffer._buffer) == 3 + + def test_buffer_init_csv(self, simple_schema: CollectionSchema): + buffer = Buffer(simple_schema, BulkFileType.CSV) + assert buffer._file_type == BulkFileType.CSV + assert len(buffer._buffer) == 3 + + def test_buffer_init_with_dynamic_field(self, dynamic_schema: CollectionSchema): + buffer = Buffer(dynamic_schema, BulkFileType.JSON) + assert DYNAMIC_FIELD_NAME in buffer._buffer + assert len(buffer._buffer) == 3 # id, vector, $meta + + def test_buffer_init_auto_id_field(self): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.JSON) + assert "id" not in buffer._buffer + assert "vector" in buffer._buffer + + def test_buffer_init_function_output_field(self): + # Test that fields marked with is_function_output=True are skipped in buffer + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + FieldSchema(name="output", dtype=DataType.FLOAT), + ] + # Manually mark the output field as function output + # (This would normally be done by CollectionSchema when functions are provided) + fields[2].is_function_output = True + + schema = CollectionSchema(fields=fields) + + # Verify that the field is marked as function output + output_field = None + for field in schema.fields: + if field.name == "output": + output_field = field + break + + assert output_field is not None + assert output_field.is_function_output is True + + # Create buffer and verify function output field is NOT included + buffer = Buffer(schema, BulkFileType.JSON) + assert "output" not in buffer._buffer + assert "id" in buffer._buffer + assert "vector" in buffer._buffer + + def test_buffer_init_only_auto_id_field(self): + # Test with only an auto_id primary field (which gets skipped in buffer) + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True), + ] + schema = CollectionSchema(fields=fields) + # Buffer should raise exception because no fields remain after filtering + with pytest.raises(MilvusException, match="fields list is empty"): + Buffer(schema, BulkFileType.JSON) + + def test_append_row_simple(self, simple_schema: CollectionSchema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + row = { + "id": 1, + "vector": [1.0] * 128, + "text": "test text" + } + buffer.append_row(row) + assert buffer.row_count == 1 + assert buffer._buffer["id"][0] == 1 + assert buffer._buffer["vector"][0] == [1.0] * 128 + assert buffer._buffer["text"][0] == "test text" + + def test_append_row_with_numpy(self, simple_schema: CollectionSchema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + row = { + "id": np.int64(1), + "vector": np.array([1.0] * 128, dtype=np.float32), + "text": "test text" + } + buffer.append_row(row) + assert buffer.row_count == 1 + assert buffer._buffer["id"][0] == 1 + assert len(buffer._buffer["vector"][0]) == 128 + + def test_append_row_dynamic_field(self, dynamic_schema: CollectionSchema): + buffer = Buffer(dynamic_schema, BulkFileType.JSON) + row = { + "id": 1, + "vector": [1.0] * 128, + "extra_field": "extra_value", + "another_field": 123 + } + buffer.append_row(row) + assert buffer.row_count == 1 + assert buffer._buffer[DYNAMIC_FIELD_NAME][0]["extra_field"] == "extra_value" + assert buffer._buffer[DYNAMIC_FIELD_NAME][0]["another_field"] == 123 + + def test_append_row_dynamic_field_dict(self, dynamic_schema: CollectionSchema): + buffer = Buffer(dynamic_schema, BulkFileType.JSON) + row = { + "id": 1, + "vector": [1.0] * 128, + DYNAMIC_FIELD_NAME: {"field1": "value1", "field2": 2} + } + buffer.append_row(row) + assert buffer.row_count == 1 + assert buffer._buffer[DYNAMIC_FIELD_NAME][0]["field1"] == "value1" + assert buffer._buffer[DYNAMIC_FIELD_NAME][0]["field2"] == 2 + + def test_append_row_invalid_dynamic_field(self, dynamic_schema: CollectionSchema): + buffer = Buffer(dynamic_schema, BulkFileType.JSON) + row = { + "id": 1, + "vector": [1.0] * 128, + DYNAMIC_FIELD_NAME: "not_a_dict" + } + with pytest.raises(MilvusException): + buffer.append_row(row) + + def test_persist_npy(self, simple_schema): + with tempfile.TemporaryDirectory() as temp_dir: + buffer = Buffer(simple_schema, BulkFileType.NUMPY) + buffer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + files = buffer.persist(temp_dir) + assert len(files) == 3 + # Check files were created + for f in files: + pf = Path(f) + assert pf.exists() + assert pf.suffix == '.npy' + + def test_persist_json_rows(self, simple_schema): + with tempfile.TemporaryDirectory() as temp_dir: + buffer = Buffer(simple_schema, BulkFileType.JSON) + buffer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + files = buffer.persist(temp_dir) + assert len(files) == 1 + assert files[0].endswith(".json") + # Verify file was created and contains correct data + file = Path(files[0]) + assert file.exists() + with file.open('r') as f: + data = json.load(f) + assert 'rows' in data + assert len(data['rows']) == 1 + assert data['rows'][0]['id'] == 1 + + @patch('pandas.DataFrame.to_parquet') + def test_persist_parquet(self, mock_to_parquet, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.PARQUET) + buffer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + files = buffer.persist("/tmp/test") + assert len(files) == 1 + assert files[0].endswith(".parquet") + assert mock_to_parquet.called + + @patch('pandas.DataFrame.to_csv') + def test_persist_csv(self, mock_to_csv, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.CSV) + buffer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + with patch.object(buffer, '_persist_csv', return_value=["/tmp/test.csv"]): + files = buffer.persist("/tmp/test") + assert len(files) == 1 + assert files[0].endswith(".csv") + + def test_persist_unsupported_type(self, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + buffer._file_type = 999 # Invalid type + buffer.append_row({"id": 1, "vector": [1.0] * 128, "text": "test"}) + + with pytest.raises(MilvusException): + buffer.persist("/tmp/test") + + def test_persist_mismatched_row_count(self, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + buffer._buffer["id"].append(1) + buffer._buffer["vector"].append([1.0] * 128) + # Missing text field value + + with pytest.raises(MilvusException): + buffer.persist("/tmp/test") + + def test_row_count_empty(self, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + assert buffer.row_count == 0 + + def test_row_count_multiple(self, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + for i in range(5): + buffer.append_row({ + "id": i, + "vector": [1.0] * 128, + "text": f"test {i}" + }) + assert buffer.row_count == 5 + + def test_complex_data_types(self, complex_schema): + buffer = Buffer(complex_schema, BulkFileType.JSON) + row = { + "id": 1, + "bool_field": True, + "int8_field": 127, + "int16_field": 32767, + "int32_field": 2147483647, + "float_field": 3.14, + "double_field": 2.718281828, + "json_field": {"key": "value"}, + "array_field": [1, 2, 3, 4, 5], + "vector": [1.0] * 128, + "binary_vector": [1] * 128, + "sparse_vector": {1: 0.5, 10: 0.3}, + "float16_vector": bytes([1] * 32), + "bfloat16_vector": bytes([1] * 32), + "int8_vector": [1] * 128, + } + buffer.append_row(row) + assert buffer.row_count == 1 + + @pytest.mark.xfail(reason='numpy.dtype("bfloat16") is not supported') + def test_persist_json_with_special_vectors(self, complex_schema): + with tempfile.TemporaryDirectory() as temp_dir: + buffer = Buffer(complex_schema, BulkFileType.JSON) + row = { + "id": 1, + "bool_field": True, + "int8_field": 127, + "int16_field": 32767, + "int32_field": 2147483647, + "float_field": 3.14, + "double_field": 2.718281828, + "json_field": {"key": "value"}, + "array_field": [1, 2, 3], + "vector": [1.0] * 128, + "binary_vector": [1] * 128, + "sparse_vector": {1: 0.5}, + "float16_vector": bytes([1] * 32), + "bfloat16_vector": bytes([1] * 32), + "int8_vector": [1] * 128, + } + buffer.append_row(row) + + files = buffer.persist(temp_dir) + assert len(files) == 1 + assert Path(files[0]).exists() + + def test_persist_with_kwargs(self, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.PARQUET) + buffer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + with patch('pandas.DataFrame.to_parquet') as mock_to_parquet: + files = buffer.persist( + "/tmp/test", + buffer_size=1024, + buffer_row_count=1, + row_group_bytes=32 * 1024 * 1024 + ) + assert len(files) == 1 + mock_to_parquet.assert_called_once() + + def test_raw_obj_conversion(self, simple_schema): + buffer = Buffer(simple_schema, BulkFileType.JSON) + + # Test numpy array conversion + arr = np.array([1, 2, 3]) + result = buffer._raw_obj(arr) + assert result == [1, 2, 3] + + # Test numpy scalar conversion + scalar = np.int64(42) + result = buffer._raw_obj(scalar) + assert result == 42 + + # Test regular object + obj = {"key": "value"} + result = buffer._raw_obj(obj) + assert result == {"key": "value"} + + +class TestBufferExtended: + """Extended tests to cover additional edge cases and error paths in buffer.py""" + + @pytest.fixture + def schema_with_array(self): + """Schema with array field for testing array error handling""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="array_field", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64), + ] + return CollectionSchema(fields=fields) + + @pytest.fixture + def schema_with_sparse(self): + """Schema with sparse vector field""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + ] + return CollectionSchema(fields=fields) + + def test_persist_npy_with_array_field_error(self, schema_with_array): + """Test that array field raises error in numpy format""" + buffer = Buffer(schema_with_array, BulkFileType.NUMPY) + buffer.append_row({ + "id": 1, + "array_field": [1, 2, 3, 4, 5] + }) + + with tempfile.TemporaryDirectory() as temp_dir, pytest.raises(MilvusException, match="doesn't support parsing array type"): + buffer.persist(temp_dir) + + def test_persist_npy_with_sparse_vector_error(self, schema_with_sparse): + """Test that sparse vector field raises error in numpy format""" + buffer = Buffer(schema_with_sparse, BulkFileType.NUMPY) + buffer.append_row({ + "id": 1, + "sparse_vector": {1: 0.5, 10: 0.3} + }) + + with tempfile.TemporaryDirectory() as temp_dir, pytest.raises(MilvusException, match="SPARSE_FLOAT_VECTOR"): + # The error happens because SPARSE_FLOAT_VECTOR is not in NUMPY_TYPE_CREATOR + # This causes a KeyError which is caught and re-raised as MilvusException + buffer.persist(temp_dir) + + def test_persist_npy_with_json_field(self): + """Test persisting JSON field as numpy""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="json_field", dtype=DataType.JSON), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.NUMPY) + buffer.append_row({ + "id": 1, + "json_field": {"key": "value", "nested": {"data": 123}} + }) + + with tempfile.TemporaryDirectory() as temp_dir: + files = buffer.persist(temp_dir) + assert len(files) == 2 + # Verify JSON field was persisted + json_file = next(f for f in files if "json_field" in f) + assert Path(json_file).exists() + + def test_persist_npy_with_float16_vectors(self): + """Test persisting float16 and bfloat16 vectors as numpy""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=4), + FieldSchema(name="bfloat16_vector", dtype=DataType.BFLOAT16_VECTOR, dim=4), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.NUMPY) + + # Add data with bytes for float16/bfloat16 vectors + float16_data = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float16).tobytes() + bfloat16_data = bytes([1, 2, 3, 4, 5, 6, 7, 8]) # 4 bfloat16 values = 8 bytes + + buffer.append_row({ + "id": 1, + "float16_vector": float16_data, + "bfloat16_vector": bfloat16_data, + }) + + with tempfile.TemporaryDirectory() as temp_dir: + files = buffer.persist(temp_dir) + assert len(files) == 3 + for f in files: + assert Path(f).exists() + + def test_persist_npy_with_none_values(self): + """Test persisting None values in numpy format""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="nullable_field", dtype=DataType.INT64), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.NUMPY) + buffer.append_row({"id": 1, "nullable_field": None}) + buffer.append_row({"id": 2, "nullable_field": 100}) + + with tempfile.TemporaryDirectory() as temp_dir: + files = buffer.persist(temp_dir) + assert len(files) == 2 + + @patch('numpy.save') + def test_persist_npy_exception_handling(self, mock_save): + """Test exception handling in numpy persist""" + mock_save.side_effect = Exception("Save failed") + + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.NUMPY) + buffer.append_row({"id": 1}) + + with tempfile.TemporaryDirectory() as temp_dir, pytest.raises(MilvusException, match="Failed to persist file"): + buffer.persist(temp_dir) + + def test_persist_npy_cleanup_on_partial_failure(self): + """Test that files are cleaned up if not all fields persist successfully""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=2), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.NUMPY) + buffer.append_row({"id": 1, "vector": [1.0, 2.0]}) + + with tempfile.TemporaryDirectory() as temp_dir, patch('numpy.save') as mock_save: + # Make the second save fail + mock_save.side_effect = [None, Exception("Second save failed")] + + with pytest.raises(MilvusException, match="Failed to persist file"): + buffer.persist(temp_dir) + + def test_persist_json_with_float16_vectors(self): + """Test JSON persist with float16 vectors only""" + # Skip bfloat16 as numpy doesn't have native support + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=4), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.JSON) + + float16_data = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float16).tobytes() + + buffer.append_row({ + "id": 1, + "float16_vector": float16_data, + }) + + with tempfile.TemporaryDirectory() as temp_dir: + files = buffer.persist(temp_dir) + assert len(files) == 1 + + # Verify the JSON content + with Path(files[0]).open('r') as f: + data = json.load(f) + assert 'rows' in data + assert len(data['rows']) == 1 + assert isinstance(data['rows'][0]['float16_vector'], list) + + @patch('pathlib.Path.open') + def test_persist_json_exception_handling(self, mock_open): + """Test exception handling in JSON persist""" + mock_open.side_effect = Exception("Failed to open file") + + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.JSON) + buffer.append_row({"id": 1}) + + with pytest.raises(MilvusException, match="Failed to persist file"): + buffer.persist("/tmp/test") + + def test_persist_parquet_with_json_and_sparse(self): + """Test Parquet persist with JSON and sparse vector fields""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="json_field", dtype=DataType.JSON), + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.PARQUET) + + buffer.append_row({ + "id": 1, + "json_field": {"key": "value"}, + "sparse_vector": {1: 0.5, 10: 0.3} + }) + + with tempfile.TemporaryDirectory() as temp_dir, patch('pandas.DataFrame.to_parquet') as mock_to_parquet: + # Pass buffer_size and buffer_row_count to avoid UnboundLocalError + files = buffer.persist(temp_dir, buffer_size=1024, buffer_row_count=1) + assert len(files) == 1 + mock_to_parquet.assert_called_once() + + def test_persist_parquet_with_float16_vectors(self): + """Test Parquet persist with float16 vectors only""" + # Skip bfloat16 as it has issues with numpy dtype + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=4), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.PARQUET) + + float16_data = np.array([1.0, 2.0, 3.0, 4.0], dtype=np.float16).tobytes() + + buffer.append_row({ + "id": 1, + "float16_vector": float16_data, + }) + + with tempfile.TemporaryDirectory() as temp_dir, patch('pandas.DataFrame.to_parquet') as mock_to_parquet: + # Pass buffer_size and buffer_row_count to avoid UnboundLocalError + files = buffer.persist(temp_dir, buffer_size=1024, buffer_row_count=1) + assert len(files) == 1 + mock_to_parquet.assert_called_once() + + def test_persist_parquet_with_array_field(self): + """Test Parquet persist with array field""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="array_field", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.PARQUET) + + buffer.append_row({ + "id": 1, + "array_field": [1, 2, 3, 4, 5] + }) + buffer.append_row({ + "id": 2, + "array_field": None # Test None value + }) + + with tempfile.TemporaryDirectory() as temp_dir, patch('pandas.DataFrame.to_parquet') as mock_to_parquet: + # Pass buffer_size and buffer_row_count to avoid UnboundLocalError + files = buffer.persist(temp_dir, buffer_size=1024, buffer_row_count=2) + assert len(files) == 1 + mock_to_parquet.assert_called_once() + + def test_persist_parquet_with_unknown_dtype(self): + """Test Parquet persist with fields having standard dtypes""" + # Using standard field types that work with parquet + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="field1", dtype=DataType.VARCHAR, max_length=100), + FieldSchema(name="field2", dtype=DataType.JSON), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.PARQUET) + + buffer.append_row({ + "id": 1, + "field1": "test_value", + "field2": {"key": "value"} + }) + + with tempfile.TemporaryDirectory() as temp_dir, patch('pandas.DataFrame.to_parquet') as mock_to_parquet: + # Pass buffer_size and buffer_row_count to avoid UnboundLocalError + files = buffer.persist(temp_dir, buffer_size=1024, buffer_row_count=1) + assert len(files) == 1 + mock_to_parquet.assert_called_once() + + def test_persist_csv_with_all_field_types(self): + """Test CSV persist with common field types""" + # Skip bfloat16 due to numpy dtype issues + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="bool_field", dtype=DataType.BOOL), + FieldSchema(name="int8_field", dtype=DataType.INT8), + FieldSchema(name="int16_field", dtype=DataType.INT16), + FieldSchema(name="int32_field", dtype=DataType.INT32), + FieldSchema(name="float_field", dtype=DataType.FLOAT), + FieldSchema(name="double_field", dtype=DataType.DOUBLE), + FieldSchema(name="varchar_field", dtype=DataType.VARCHAR, max_length=512), + FieldSchema(name="json_field", dtype=DataType.JSON), + FieldSchema(name="array_field", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64), + FieldSchema(name="float_vector", dtype=DataType.FLOAT_VECTOR, dim=128), + FieldSchema(name="binary_vector", dtype=DataType.BINARY_VECTOR, dim=128), + FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR), + FieldSchema(name="float16_vector", dtype=DataType.FLOAT16_VECTOR, dim=128), + FieldSchema(name="int8_vector", dtype=DataType.INT8_VECTOR, dim=128), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.CSV) + + row = { + "id": 1, + "bool_field": True, + "int8_field": 127, + "int16_field": 32767, + "int32_field": 2147483647, + "float_field": 3.14, + "double_field": 2.718281828, + "varchar_field": "test string", + "json_field": {"key": "value"}, + "array_field": [1, 2, 3], + "float_vector": [1.0] * 128, + "binary_vector": [1] * 128, + "sparse_vector": {1: 0.5}, + "float16_vector": np.array([1.0] * 128, dtype=np.float16).tobytes(), + "int8_vector": [1] * 128, + } + buffer.append_row(row) + + # Add row with None values + row_with_none = row.copy() + row_with_none["array_field"] = None + buffer.append_row(row_with_none) + + with tempfile.TemporaryDirectory() as temp_dir, patch('pandas.DataFrame.to_csv') as mock_to_csv: + files = buffer.persist(temp_dir) + assert len(files) == 1 + mock_to_csv.assert_called_once() + + @patch('pandas.DataFrame.to_csv') + def test_persist_csv_exception_handling(self, mock_to_csv): + """Test exception handling in CSV persist""" + mock_to_csv.side_effect = Exception("CSV write failed") + + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.CSV) + buffer.append_row({"id": 1}) + + with pytest.raises(MilvusException, match="Failed to persist file"): + buffer.persist("/tmp/test") + + def test_persist_csv_with_custom_config(self): + """Test CSV persist with custom separator and null key""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="nullable_field", dtype=DataType.INT64), + ] + schema = CollectionSchema(fields=fields) + + # Create buffer with custom CSV config + config = {"sep": "|", "nullkey": "NULL"} + buffer = Buffer(schema, BulkFileType.CSV, config=config) + + buffer.append_row({"id": 1, "nullable_field": None}) + buffer.append_row({"id": 2, "nullable_field": 100}) + + with tempfile.TemporaryDirectory() as temp_dir, patch('pandas.DataFrame.to_csv') as mock_to_csv: + files = buffer.persist(temp_dir) + assert len(files) == 1 + + # Verify custom config was used + call_kwargs = mock_to_csv.call_args[1] + assert call_kwargs.get('sep') == '|' + assert call_kwargs.get('na_rep') == 'NULL' + + def test_get_field_schema(self): + """Test accessing fields from buffer""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.JSON) + + # Test that fields are stored in the buffer + assert "id" in buffer._fields + assert "vector" in buffer._fields + assert buffer._fields["id"].name == "id" + assert buffer._fields["vector"].name == "vector" + + # Test that non-existent field is not in buffer + assert "non_existent" not in buffer._fields + + def test_throw_method(self): + """Test the _throw method raises MilvusException""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + ] + schema = CollectionSchema(fields=fields) + buffer = Buffer(schema, BulkFileType.JSON) + + with pytest.raises(MilvusException, match="Test error message"): + buffer._throw("Test error message") diff --git a/tests/test_bulk_writer_stage.py b/tests/test_bulk_writer_stage.py new file mode 100644 index 000000000..cf4a62b88 --- /dev/null +++ b/tests/test_bulk_writer_stage.py @@ -0,0 +1,626 @@ +import tempfile +from pathlib import Path +from typing import Any, Dict +from unittest.mock import MagicMock, Mock, patch + +import pytest +import requests +from pymilvus.bulk_writer.constants import BulkFileType, ConnectType +from pymilvus.bulk_writer.stage_bulk_writer import StageBulkWriter +from pymilvus.bulk_writer.stage_file_manager import StageFileManager +from pymilvus.bulk_writer.stage_manager import StageManager +from pymilvus.bulk_writer.stage_restful import ( + apply_stage, + create_stage, + delete_stage, + list_stages, +) +from pymilvus.client.types import DataType +from pymilvus.exceptions import MilvusException +from pymilvus.orm.schema import CollectionSchema, FieldSchema + + +class TestStageRestful: + """Test stage RESTful API functions.""" + + @pytest.fixture + def mock_response(self) -> Mock: + """Create a mock response object.""" + response = Mock(spec=requests.Response) + response.status_code = 200 + response.json.return_value = {"code": 0, "message": "success", "data": {}} + return response + + @pytest.fixture + def api_params(self) -> Dict[str, str]: + """Common API parameters.""" + return { + "url": "https://api.cloud.zilliz.com", + "api_key": "test_api_key", + } + + @patch("pymilvus.bulk_writer.stage_restful.requests.get") + def test_list_stages_success( + self, mock_get: Mock, mock_response: Mock, api_params: Dict[str, str] + ) -> None: + """Test successful list_stages call.""" + mock_get.return_value = mock_response + mock_response.json.return_value = { + "code": 0, + "message": "success", + "data": {"stages": ["stage1", "stage2"]}, + } + + response = list_stages( + **api_params, + project_id="test_project", + current_page=1, + page_size=10, + ) + + assert response.status_code == 200 + assert response.json()["data"]["stages"] == ["stage1", "stage2"] + mock_get.assert_called_once() + + @patch("pymilvus.bulk_writer.stage_restful.requests.get") + def test_list_stages_failure( + self, mock_get: Mock, mock_response: Mock, api_params: Dict[str, str] + ) -> None: + """Test failed list_stages call.""" + mock_response.json.return_value = { + "code": 1001, + "message": "Invalid API key", + "data": {}, + } + mock_get.return_value = mock_response + + with pytest.raises(MilvusException, match="Invalid API key"): + list_stages(**api_params, project_id="test_project") + + @patch("pymilvus.bulk_writer.stage_restful.requests.post") + def test_create_stage_success( + self, mock_post: Mock, mock_response: Mock, api_params: Dict[str, str] + ) -> None: + """Test successful create_stage call.""" + mock_post.return_value = mock_response + mock_response.json.return_value = { + "code": 0, + "message": "success", + "data": {"stageId": "stage123"}, + } + + response = create_stage( + **api_params, + project_id="test_project", + region_id="us-west-2", + stage_name="test_stage", + ) + + assert response.status_code == 200 + assert response.json()["data"]["stageId"] == "stage123" + mock_post.assert_called_once() + + @patch("pymilvus.bulk_writer.stage_restful.requests.delete") + def test_delete_stage_success( + self, mock_delete: Mock, mock_response: Mock, api_params: Dict[str, str] + ) -> None: + """Test successful delete_stage call.""" + mock_delete.return_value = mock_response + + response = delete_stage(**api_params, stage_name="test_stage") + + assert response.status_code == 200 + mock_delete.assert_called_once() + + @patch("pymilvus.bulk_writer.stage_restful.requests.post") + def test_apply_stage_success( + self, mock_post: Mock, mock_response: Mock, api_params: Dict[str, str] + ) -> None: + """Test successful apply_stage call.""" + mock_post.return_value = mock_response + mock_response.json.return_value = { + "code": 0, + "message": "success", + "data": { + "stageName": "test_stage", + "stagePrefix": "prefix/", + "endpoint": "s3.amazonaws.com", + "bucketName": "test-bucket", + "region": "us-west-2", + "cloud": "aws", + "condition": {"maxContentLength": 1073741824}, + "credentials": { + "tmpAK": "test_access_key", + "tmpSK": "test_secret_key", + "sessionToken": "test_token", + "expireTime": "2024-12-31T23:59:59Z", + }, + }, + } + + response = apply_stage( + **api_params, + stage_name="test_stage", + path="data/", + ) + + assert response.status_code == 200 + data = response.json()["data"] + assert data["stageName"] == "test_stage" + assert data["endpoint"] == "s3.amazonaws.com" + mock_post.assert_called_once() + + @patch("pymilvus.bulk_writer.stage_restful.requests.get") + def test_http_error_handling( + self, mock_get: Mock, api_params: Dict[str, str] + ) -> None: + """Test HTTP error handling.""" + mock_get.return_value.status_code = 404 + + with pytest.raises(MilvusException, match="status code: 404"): + list_stages(**api_params, project_id="test_project") + + @patch("pymilvus.bulk_writer.stage_restful.requests.get") + def test_network_error_handling( + self, mock_get: Mock, api_params: Dict[str, str] + ) -> None: + """Test network error handling.""" + mock_get.side_effect = requests.exceptions.ConnectionError("Network error") + + with pytest.raises(MilvusException, match="Network error"): + list_stages(**api_params, project_id="test_project") + + +class TestStageManager: + """Test StageManager class.""" + + @pytest.fixture + def stage_manager(self) -> StageManager: + """Create a StageManager instance.""" + return StageManager( + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="test_api_key", + ) + + @patch("pymilvus.bulk_writer.stage_manager.create_stage") + def test_create_stage(self, mock_create: Mock, stage_manager: StageManager) -> None: + """Test creating a stage.""" + stage_manager.create_stage( + project_id="test_project", + region_id="us-west-2", + stage_name="test_stage", + ) + + mock_create.assert_called_once_with( + stage_manager.cloud_endpoint, + stage_manager.api_key, + "test_project", + "us-west-2", + "test_stage", + ) + + @patch("pymilvus.bulk_writer.stage_manager.delete_stage") + def test_delete_stage(self, mock_delete: Mock, stage_manager: StageManager) -> None: + """Test deleting a stage.""" + stage_manager.delete_stage(stage_name="test_stage") + + mock_delete.assert_called_once_with( + stage_manager.cloud_endpoint, + stage_manager.api_key, + "test_stage", + ) + + @patch("pymilvus.bulk_writer.stage_manager.list_stages") + def test_list_stages(self, mock_list: Mock, stage_manager: StageManager) -> None: + """Test listing stages.""" + mock_response = Mock() + mock_response.json.return_value = {"data": {"stages": ["stage1", "stage2"]}} + mock_list.return_value = mock_response + + result = stage_manager.list_stages(project_id="test_project", current_page=1, page_size=10) + + assert result.json()["data"]["stages"] == ["stage1", "stage2"] + mock_list.assert_called_once_with( + stage_manager.cloud_endpoint, + stage_manager.api_key, + "test_project", + 1, + 10, + ) + + +class TestStageFileManager: + """Test StageFileManager class.""" + + @pytest.fixture + def stage_file_manager(self) -> StageFileManager: + """Create a StageFileManager instance.""" + return StageFileManager( + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="test_api_key", + stage_name="test_stage", + connect_type=ConnectType.AUTO, + ) + + @pytest.fixture + def mock_stage_info(self) -> Dict[str, Any]: + """Mock stage information.""" + return { + "stageName": "test_stage", + "stagePrefix": "prefix/", + "endpoint": "s3.amazonaws.com", + "bucketName": "test-bucket", + "region": "us-west-2", + "cloud": "aws", + "condition": {"maxContentLength": 1073741824}, + "credentials": { + "tmpAK": "test_access_key", + "tmpSK": "test_secret_key", + "sessionToken": "test_token", + "expireTime": "2099-12-31T23:59:59Z", + }, + } + + def test_convert_dir_path(self, stage_file_manager: StageFileManager) -> None: + """Test directory path conversion.""" + assert stage_file_manager._convert_dir_path("") == "" + assert stage_file_manager._convert_dir_path("/") == "" + assert stage_file_manager._convert_dir_path("data") == "data/" + assert stage_file_manager._convert_dir_path("data/") == "data/" + + @patch("pymilvus.bulk_writer.stage_file_manager.apply_stage") + @patch("pymilvus.bulk_writer.stage_file_manager.Minio") + def test_refresh_stage_and_client( + self, + mock_minio: Mock, + mock_apply: Mock, + stage_file_manager: StageFileManager, + mock_stage_info: Dict[str, Any], + ) -> None: + """Test refreshing stage info and client.""" + mock_response = Mock() + mock_response.json.return_value = {"data": mock_stage_info} + mock_apply.return_value = mock_response + + stage_file_manager._refresh_stage_and_client("data/") + + assert stage_file_manager.stage_info == mock_stage_info + mock_apply.assert_called_once() + mock_minio.assert_called_once() + + def test_validate_size_success( + self, stage_file_manager: StageFileManager, mock_stage_info: Dict[str, Any] + ) -> None: + """Test successful size validation.""" + stage_file_manager.stage_info = mock_stage_info + stage_file_manager.total_bytes = 1000000 # 1MB + + # Should not raise any exception + stage_file_manager._validate_size() + + def test_validate_size_failure( + self, stage_file_manager: StageFileManager, mock_stage_info: Dict[str, Any] + ) -> None: + """Test size validation failure.""" + stage_file_manager.stage_info = mock_stage_info + stage_file_manager.total_bytes = 2147483648 # 2GB + + with pytest.raises(ValueError, match="exceeds the maximum contentLength limit"): + stage_file_manager._validate_size() + + @patch("pymilvus.bulk_writer.stage_file_manager.FileUtils.process_local_path") + @patch.object(StageFileManager, "_refresh_stage_and_client") + @patch.object(StageFileManager, "_validate_size") + @patch.object(StageFileManager, "_put_object") + def test_upload_file_to_stage( + self, + mock_put_object: Mock, + mock_validate: Mock, + mock_refresh: Mock, + mock_process: Mock, + stage_file_manager: StageFileManager, + mock_stage_info: Dict[str, Any], + ) -> None: + """Test uploading file to stage.""" + with tempfile.TemporaryDirectory() as temp_dir: + # Create test files + test_file = Path(temp_dir) / "test.txt" + test_file.write_text("test content") + + mock_process.return_value = ([str(test_file)], 12) + stage_file_manager.stage_info = mock_stage_info + + result = stage_file_manager.upload_file_to_stage(str(test_file), "data/") + + assert result["stageName"] == "test_stage" + assert result["path"] == "data/" + mock_refresh.assert_called_once_with("data/") + mock_validate.assert_called_once() + + @patch.object(StageFileManager, "_upload_with_retry") + @patch.object(StageFileManager, "_refresh_stage_and_client") + def test_put_object_refresh_on_expiry( + self, + mock_refresh: Mock, + mock_upload: Mock, + stage_file_manager: StageFileManager, + mock_stage_info: Dict[str, Any], + ) -> None: + """Test that credentials are refreshed when expired.""" + # Set expired credentials + expired_info = mock_stage_info.copy() + expired_info["credentials"]["expireTime"] = "2020-01-01T00:00:00Z" + stage_file_manager.stage_info = expired_info + + stage_file_manager._put_object("test.txt", "remote/test.txt", "data/") + + mock_refresh.assert_called_once_with("data/") + mock_upload.assert_called_once() + + @patch("pymilvus.bulk_writer.stage_file_manager.Minio") + def test_upload_with_retry_success( + self, mock_minio: Mock, stage_file_manager: StageFileManager, mock_stage_info: Dict[str, Any] + ) -> None: + """Test successful upload with retry.""" + stage_file_manager.stage_info = mock_stage_info + stage_file_manager._client = mock_minio.return_value + + stage_file_manager._upload_with_retry("test.txt", "remote/test.txt", "data/") + + stage_file_manager._client.fput_object.assert_called_once_with( + bucket_name="test-bucket", + object_name="remote/test.txt", + file_path="test.txt", + ) + + @patch("pymilvus.bulk_writer.stage_file_manager.Minio") + @patch.object(StageFileManager, "_refresh_stage_and_client") + def test_upload_with_retry_failure( + self, + mock_refresh: Mock, + mock_minio: Mock, + stage_file_manager: StageFileManager, + mock_stage_info: Dict[str, Any], + ) -> None: + """Test upload failure after max retries.""" + stage_file_manager.stage_info = mock_stage_info + mock_client = mock_minio.return_value + mock_client.fput_object.side_effect = Exception("Upload failed") + stage_file_manager._client = mock_client + + with pytest.raises(RuntimeError, match="Upload failed after 2 attempts"): + stage_file_manager._upload_with_retry("test.txt", "remote/test.txt", "data/", max_retries=2) + + assert mock_client.fput_object.call_count == 2 + assert mock_refresh.call_count == 2 # Refreshed on each retry + + +class TestStageBulkWriter: + """Test StageBulkWriter class.""" + + @pytest.fixture + def simple_schema(self) -> CollectionSchema: + """Create a simple collection schema.""" + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512), + ] + return CollectionSchema(fields=fields) + + @pytest.fixture + def stage_bulk_writer(self, simple_schema: CollectionSchema) -> StageBulkWriter: + """Create a StageBulkWriter instance.""" + with patch("pymilvus.bulk_writer.stage_bulk_writer.StageFileManager"): + return StageBulkWriter( + schema=simple_schema, + remote_path="test/data", + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="test_api_key", + stage_name="test_stage", + chunk_size=1024, + file_type=BulkFileType.PARQUET, + ) + + def test_init(self, stage_bulk_writer: StageBulkWriter) -> None: + """Test StageBulkWriter initialization.""" + assert stage_bulk_writer._remote_path.endswith("/") + assert stage_bulk_writer._stage_name == "test_stage" + assert isinstance(stage_bulk_writer._stage_file_manager, MagicMock) + + def test_append_row(self, stage_bulk_writer: StageBulkWriter) -> None: + """Test appending a row.""" + row = { + "id": 1, + "vector": [1.0] * 128, + "text": "test text", + } + stage_bulk_writer.append_row(row) + assert stage_bulk_writer.total_row_count == 1 + + @patch.object(StageBulkWriter, "_upload") + def test_commit(self, mock_upload: Mock, stage_bulk_writer: StageBulkWriter) -> None: + """Test committing data.""" + # Add some data + for i in range(10): + stage_bulk_writer.append_row({ + "id": i, + "vector": [float(i)] * 128, + "text": f"text_{i}", + }) + + # Mock the upload to return file paths + mock_upload.return_value = ["file1.parquet", "file2.parquet"] + + # Commit the data + stage_bulk_writer.commit() + + # Upload should have been called during commit + assert mock_upload.called + + def test_data_path_property(self, stage_bulk_writer: StageBulkWriter) -> None: + """Test data_path property.""" + assert isinstance(stage_bulk_writer.data_path, str) + assert "/" in stage_bulk_writer.data_path + + def test_batch_files_property(self, stage_bulk_writer: StageBulkWriter) -> None: + """Test batch_files property.""" + assert stage_bulk_writer.batch_files == [] + stage_bulk_writer._remote_files = [["file1.parquet"], ["file2.parquet"]] + assert stage_bulk_writer.batch_files == [["file1.parquet"], ["file2.parquet"]] + + def test_get_stage_upload_result(self, stage_bulk_writer: StageBulkWriter) -> None: + """Test getting stage upload result.""" + result = stage_bulk_writer.get_stage_upload_result() + assert result["stage_name"] == "test_stage" + assert "path" in result + + @patch("pymilvus.bulk_writer.stage_bulk_writer.Path") + def test_local_rm(self, mock_path: Mock, stage_bulk_writer: StageBulkWriter) -> None: + """Test local file removal.""" + # Test successful removal + mock_file = mock_path.return_value + mock_file.parent.iterdir.return_value = [] + + stage_bulk_writer._local_rm("test_file.parquet") + + mock_file.unlink.assert_called_once() + + @patch.object(StageBulkWriter, "_upload_object") + @patch.object(StageBulkWriter, "_local_rm") + @patch("pymilvus.bulk_writer.stage_bulk_writer.Path") + def test_upload( + self, mock_path_class: Mock, mock_rm: Mock, mock_upload_object: Mock, stage_bulk_writer: StageBulkWriter + ) -> None: + """Test uploading files.""" + # Mock Path behavior + mock_path = Mock() + mock_path_class.return_value = mock_path + mock_path.relative_to.return_value = Path("test.parquet") + + file_list = ["test_file.parquet"] + result = stage_bulk_writer._upload(file_list) + + assert len(result) == 1 + mock_upload_object.assert_called_once() + # The actual call will be with the mock path object + assert mock_rm.called + + @patch.object(StageFileManager, "upload_file_to_stage") + def test_upload_object( + self, mock_upload_to_stage: Mock, stage_bulk_writer: StageBulkWriter + ) -> None: + """Test uploading a single object.""" + stage_bulk_writer._upload_object("local_file.parquet", "remote_file.parquet") + + stage_bulk_writer._stage_file_manager.upload_file_to_stage.assert_called_once_with( + "local_file.parquet", stage_bulk_writer._remote_path + ) + + def test_context_manager(self, simple_schema: CollectionSchema) -> None: + """Test StageBulkWriter as context manager.""" + with patch("pymilvus.bulk_writer.stage_bulk_writer.StageFileManager"), StageBulkWriter( + schema=simple_schema, + remote_path="test/data", + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="test_api_key", + stage_name="test_stage", + ) as writer: + assert writer is not None + writer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test", + }) + + @patch.object(StageBulkWriter, "_upload_object") + @patch("pymilvus.bulk_writer.stage_bulk_writer.Path") + def test_upload_error_handling( + self, mock_path_class: Mock, mock_upload_object: Mock, stage_bulk_writer: StageBulkWriter + ) -> None: + """Test error handling during upload.""" + mock_upload_object.side_effect = Exception("Upload error") + + # Mock Path behavior + mock_path = Mock() + mock_path_class.return_value = mock_path + mock_path.relative_to.return_value = Path("test.parquet") + + with pytest.raises(MilvusException, match="Failed to upload file"): + stage_bulk_writer._upload(["test_file.parquet"]) + + +class TestIntegration: + """Integration tests for stage operations.""" + + @pytest.fixture + def mock_server_responses(self) -> Dict[str, Any]: + """Mock server responses for integration testing.""" + return { + "apply_stage": { + "code": 0, + "message": "success", + "data": { + "stageName": "test_stage", + "stagePrefix": "prefix/", + "endpoint": "s3.amazonaws.com", + "bucketName": "test-bucket", + "region": "us-west-2", + "cloud": "aws", + "condition": {"maxContentLength": 1073741824}, + "credentials": { + "tmpAK": "test_access_key", + "tmpSK": "test_secret_key", + "sessionToken": "test_token", + "expireTime": "2099-12-31T23:59:59Z", + }, + }, + }, + "list_stages": { + "code": 0, + "message": "success", + "data": {"stages": ["stage1", "stage2", "test_stage"]}, + }, + } + + @patch("pymilvus.bulk_writer.stage_restful.requests.post") + @patch("pymilvus.bulk_writer.stage_restful.requests.get") + def test_full_stage_workflow( + self, + mock_get: Mock, + mock_post: Mock, + mock_server_responses: Dict[str, Any], + ) -> None: + """Test complete stage workflow from creation to upload.""" + # Setup mock responses + mock_post_response = Mock() + mock_post_response.status_code = 200 + mock_post_response.json.return_value = mock_server_responses["apply_stage"] + mock_post.return_value = mock_post_response + + mock_get_response = Mock() + mock_get_response.status_code = 200 + mock_get_response.json.return_value = mock_server_responses["list_stages"] + mock_get.return_value = mock_get_response + + # Create stage manager + stage_manager = StageManager( + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="test_api_key", + ) + + # List stages + result = stage_manager.list_stages(project_id="test_project") + assert "test_stage" in result.json()["data"]["stages"] + + # Create stage file manager + file_manager = StageFileManager( + cloud_endpoint="https://api.cloud.zilliz.com", + api_key="test_api_key", + stage_name="test_stage", + connect_type=ConnectType.AUTO, + ) + + # Verify stage info can be refreshed + file_manager._refresh_stage_and_client("data/") + assert file_manager.stage_info["stageName"] == "test_stage" diff --git a/tests/test_bulk_writer_validators.py b/tests/test_bulk_writer_validators.py new file mode 100644 index 000000000..48c6ca244 --- /dev/null +++ b/tests/test_bulk_writer_validators.py @@ -0,0 +1,304 @@ +import numpy as np +import pytest +from pymilvus.bulk_writer.validators import ( + binary_vector_validator, + float16_vector_validator, + float_vector_validator, + int8_vector_validator, + sparse_vector_validator, +) +from pymilvus.exceptions import MilvusException + + +class TestFloatVectorValidator: + def test_valid_list(self): + """Test valid list of floats""" + result = float_vector_validator([1.0, 2.0, 3.0], 3) + assert result == [1.0, 2.0, 3.0] + + def test_invalid_list_length(self): + """Test list with wrong dimension""" + with pytest.raises(MilvusException, match="array's length must be equal to vector dimension"): + float_vector_validator([1.0, 2.0], 3) + + def test_invalid_list_type(self): + """Test list with non-float elements""" + with pytest.raises(MilvusException, match="array's element must be float value"): + float_vector_validator([1.0, 2, 3.0], 3) + + def test_valid_numpy_float32(self): + """Test valid numpy array with float32""" + arr = np.array([1.0, 2.0, 3.0], dtype=np.float32) + result = float_vector_validator(arr, 3) + assert result == [1.0, 2.0, 3.0] + + def test_valid_numpy_float64(self): + """Test valid numpy array with float64""" + arr = np.array([1.0, 2.0, 3.0], dtype=np.float64) + result = float_vector_validator(arr, 3) + assert result == [1.0, 2.0, 3.0] + + def test_invalid_numpy_dtype(self): + """Test numpy array with invalid dtype""" + arr = np.array([1, 2, 3], dtype=np.int32) + with pytest.raises(MilvusException, match='dtype must be "float32" or "float64"'): + float_vector_validator(arr, 3) + + def test_invalid_numpy_shape(self): + """Test numpy array with wrong shape""" + arr = np.array([[1.0, 2.0], [3.0, 4.0]], dtype=np.float32) + with pytest.raises(MilvusException, match="shape must not be one dimension"): + float_vector_validator(arr, 4) + + def test_invalid_numpy_length(self): + """Test numpy array with wrong dimension""" + arr = np.array([1.0, 2.0], dtype=np.float32) + with pytest.raises(MilvusException, match="length must be equal to vector dimension"): + float_vector_validator(arr, 3) + + def test_invalid_type(self): + """Test with invalid input type""" + with pytest.raises(MilvusException, match="only accept numpy.ndarray or list"): + float_vector_validator("invalid", 3) + + +class TestBinaryVectorValidator: + def test_valid_list(self): + """Test valid list of binary values""" + result = binary_vector_validator([1, 0, 1, 1, 0, 0, 1, 0], 8) + expected = np.packbits([1, 0, 1, 1, 0, 0, 1, 0], axis=-1).tolist() + assert result == expected + + def test_invalid_list_length(self): + """Test list with wrong dimension""" + with pytest.raises(MilvusException, match="length of the list must be equal to vector dimension"): + binary_vector_validator([1, 0, 1], 8) + + def test_valid_bytes(self): + """Test valid bytes input""" + data = b'\x00\x01' + result = binary_vector_validator(data, 16) + assert result == [0, 1] + + def test_invalid_bytes_length(self): + """Test bytes with wrong length""" + data = b'\x00' + with pytest.raises(MilvusException, match="length of the bytes must be equal to 8x of vector dimension"): + binary_vector_validator(data, 16) + + def test_valid_numpy_uint8(self): + """Test valid numpy array with uint8""" + arr = np.array([0, 1, 2], dtype=np.uint8) + result = binary_vector_validator(arr, 24) + assert result == [0, 1, 2] + + def test_invalid_numpy_dtype(self): + """Test numpy array with invalid dtype""" + arr = np.array([0, 1, 2], dtype=np.int32) + with pytest.raises(MilvusException, match='dtype must be "uint8"'): + binary_vector_validator(arr, 24) + + def test_invalid_numpy_shape(self): + """Test numpy array with wrong shape""" + arr = np.array([[0, 1], [2, 3]], dtype=np.uint8) + with pytest.raises(MilvusException, match="shape must be one dimension"): + binary_vector_validator(arr, 32) + + def test_invalid_numpy_length(self): + """Test numpy array with wrong dimension""" + arr = np.array([0, 1], dtype=np.uint8) + with pytest.raises(MilvusException, match="length must be equal to 8x of vector dimension"): + binary_vector_validator(arr, 24) + + def test_invalid_type(self): + """Test with invalid input type""" + with pytest.raises(MilvusException, match="only accept numpy.ndarray, list, bytes"): + binary_vector_validator("invalid", 8) + + +class TestFloat16VectorValidator: + def test_valid_list_float16(self): + """Test valid list of floats for float16""" + result = float16_vector_validator([1.0, 2.0, 3.0], 3, is_bfloat=False) + assert isinstance(result, bytes) + # Verify we can reconstruct the array + arr = np.frombuffer(result, dtype=np.float16) + np.testing.assert_array_almost_equal(arr, [1.0, 2.0, 3.0]) + + @pytest.mark.skipif(not hasattr(np, 'bfloat16'), reason="bfloat16 not available") + def test_valid_list_bfloat16(self): + """Test valid list of floats for bfloat16""" + result = float16_vector_validator([1.0, 2.0, 3.0], 3, is_bfloat=True) + assert isinstance(result, bytes) + + def test_invalid_list_length(self): + """Test list with wrong dimension""" + with pytest.raises(MilvusException, match="array's length must be equal to vector dimension"): + float16_vector_validator([1.0, 2.0], 3, is_bfloat=False) + + def test_invalid_list_type(self): + """Test list with non-float elements""" + with pytest.raises(MilvusException, match="array's element must be float value"): + float16_vector_validator([1.0, 2, 3.0], 3, is_bfloat=False) + + def test_valid_numpy_float16(self): + """Test valid numpy array with float16""" + arr = np.array([1.0, 2.0, 3.0], dtype=np.float16) + result = float16_vector_validator(arr, 3, is_bfloat=False) + assert isinstance(result, bytes) + assert result == arr.tobytes() + + @pytest.mark.skipif(not hasattr(np, 'bfloat16'), reason="bfloat16 not available") + def test_valid_numpy_bfloat16(self): + """Test valid numpy array with bfloat16""" + arr = np.array([1.0, 2.0, 3.0], dtype='bfloat16') + result = float16_vector_validator(arr, 3, is_bfloat=True) + assert isinstance(result, bytes) + assert result == arr.tobytes() + + def test_invalid_numpy_dtype_float16(self): + """Test numpy array with wrong dtype for float16""" + arr = np.array([1.0, 2.0, 3.0], dtype=np.float32) + with pytest.raises(MilvusException, match='dtype must be "float16"'): + float16_vector_validator(arr, 3, is_bfloat=False) + + def test_invalid_numpy_dtype_bfloat16(self): + """Test numpy array with wrong dtype for bfloat16""" + arr = np.array([1.0, 2.0, 3.0], dtype=np.float32) + with pytest.raises(MilvusException, match='dtype must be "bfloat16"'): + float16_vector_validator(arr, 3, is_bfloat=True) + + def test_invalid_numpy_shape(self): + """Test numpy array with wrong shape""" + arr = np.array([[1.0, 2.0], [3.0, 4.0]], dtype=np.float16) + with pytest.raises(MilvusException, match="shape must not be one dimension"): + float16_vector_validator(arr, 4, is_bfloat=False) + + def test_invalid_numpy_length(self): + """Test numpy array with wrong dimension""" + arr = np.array([1.0, 2.0], dtype=np.float16) + with pytest.raises(MilvusException, match="length must be equal to vector dimension"): + float16_vector_validator(arr, 3, is_bfloat=False) + + def test_invalid_type(self): + """Test with invalid input type""" + with pytest.raises(MilvusException, match="only accept numpy.ndarray or list"): + float16_vector_validator("invalid", 3, is_bfloat=False) + + +class TestInt8VectorValidator: + def test_valid_list(self): + """Test valid list of integers""" + result = int8_vector_validator([1, 2, 3], 3) + assert result == [1, 2, 3] + + def test_invalid_list_length(self): + """Test list with wrong dimension""" + with pytest.raises(MilvusException, match="array's length must be equal to vector dimension"): + int8_vector_validator([1, 2], 3) + + def test_invalid_list_type(self): + """Test list with non-int elements""" + with pytest.raises(MilvusException, match="array's element must be int value"): + int8_vector_validator([1, 2.0, 3], 3) + + def test_valid_numpy_int8(self): + """Test valid numpy array with int8""" + arr = np.array([1, 2, 3], dtype=np.int8) + result = int8_vector_validator(arr, 3) + assert result == [1, 2, 3] + + def test_invalid_numpy_dtype(self): + """Test numpy array with invalid dtype""" + arr = np.array([1, 2, 3], dtype=np.int32) + with pytest.raises(MilvusException, match='dtype must be "int8"'): + int8_vector_validator(arr, 3) + + def test_invalid_numpy_shape(self): + """Test numpy array with wrong shape""" + arr = np.array([[1, 2], [3, 4]], dtype=np.int8) + with pytest.raises(MilvusException, match="shape must not be one dimension"): + int8_vector_validator(arr, 4) + + def test_invalid_numpy_length(self): + """Test numpy array with wrong dimension""" + arr = np.array([1, 2], dtype=np.int8) + with pytest.raises(MilvusException, match="length must be equal to vector dimension"): + int8_vector_validator(arr, 3) + + def test_invalid_type(self): + """Test with invalid input type""" + with pytest.raises(MilvusException, match="only accept numpy.ndarray or list"): + int8_vector_validator("invalid", 3) + + +class TestSparseVectorValidator: + def test_valid_dict(self): + """Test valid dict format""" + data = {2: 13.23, 45: 0.54} + result = sparse_vector_validator(data) + assert result == data + + def test_valid_indices_values_format(self): + """Test valid indices/values format""" + data = {"indices": [1, 2], "values": [0.1, 0.2]} + result = sparse_vector_validator(data) + assert result == data + + def test_invalid_type(self): + """Test with non-dict input""" + with pytest.raises(MilvusException, match="only accept dict"): + sparse_vector_validator([1, 2, 3]) + + def test_invalid_index_type(self): + """Test dict with non-integer index""" + data = {"a": 0.5, 2: 0.3} + with pytest.raises(MilvusException, match="index must be integer"): + sparse_vector_validator(data) + + def test_invalid_value_type(self): + """Test dict with non-float value""" + data = {1: 0.5, 2: 3} + with pytest.raises(MilvusException, match="value must be float"): + sparse_vector_validator(data) + + def test_empty_dict(self): + """Test empty dict""" + with pytest.raises(MilvusException, match="empty sparse vector is not allowed"): + sparse_vector_validator({}) + + def test_invalid_indices_type(self): + """Test with non-list indices""" + data = {"indices": "invalid", "values": [0.1, 0.2]} + with pytest.raises(MilvusException, match="indices of sparse vector must be a list"): + sparse_vector_validator(data) + + def test_invalid_values_type(self): + """Test with non-list values""" + data = {"indices": [1, 2], "values": "invalid"} + with pytest.raises(MilvusException, match="values of sparse vector must be a list"): + sparse_vector_validator(data) + + def test_mismatched_indices_values_length(self): + """Test with mismatched indices and values length""" + data = {"indices": [1, 2, 3], "values": [0.1, 0.2]} + with pytest.raises(MilvusException, match="length of indices and values"): + sparse_vector_validator(data) + + def test_empty_indices_values(self): + """Test with empty indices and values""" + data = {"indices": [], "values": []} + with pytest.raises(MilvusException, match="empty sparse vector is not allowed"): + sparse_vector_validator(data) + + def test_invalid_index_in_indices_format(self): + """Test with invalid index type in indices/values format""" + data = {"indices": ["a", 2], "values": [0.1, 0.2]} + with pytest.raises(MilvusException, match="index must be integer"): + sparse_vector_validator(data) + + def test_invalid_value_in_indices_format(self): + """Test with invalid value type in indices/values format""" + data = {"indices": [1, 2], "values": [0.1, "invalid"]} + with pytest.raises(MilvusException, match="value must be float"): + sparse_vector_validator(data) diff --git a/tests/test_check.py b/tests/test_check.py index ca02b2586..cf7157c84 100644 --- a/tests/test_check.py +++ b/tests/test_check.py @@ -1,10 +1,83 @@ import datetime +import logging +import re +import numpy as np import pytest -from pymilvus.client.check import check_pass_param -from pymilvus.client.utils import mkts_from_unixtime, mkts_from_datetime, mkts_from_hybridts, \ - hybridts_to_unixtime + +# For tests +from pymilvus import * from pymilvus.client import get_commit +from pymilvus.client.check import ( + check_pass_param, + is_legal_address, + is_legal_host, + is_legal_port, +) +from pymilvus.client.utils import ( + hybridts_to_unixtime, + mkts_from_datetime, + mkts_from_hybridts, + mkts_from_unixtime, +) + +log = logging.getLogger(__name__) + + +class TestChecks: + @pytest.mark.parametrize("valid_address", [ + "localhost:19530", + "example.com:19530" + ]) + def test_check_is_legal_address_true(self, valid_address): + valid = is_legal_address(valid_address) + assert valid is True + + @pytest.mark.parametrize("invalid_address", [ + "-1", + "localhost", + ":19530", + "localhost:localhost", + ]) + def test_check_is_legal_address_false(self, invalid_address): + valid = is_legal_address(invalid_address) + assert valid is False + + @pytest.mark.parametrize("valid_host", [ + "localhost", + "example.com" + ]) + def test_check_is_legal_host_true(self, valid_host): + valid = is_legal_host(valid_host) + assert valid is True + + @pytest.mark.parametrize("invalid_host", [ + -1, + 1.0, + "", + is_legal_address, + ]) + def test_check_is_legal_host_false(self, invalid_host): + valid = is_legal_host(invalid_host) + assert valid is False + + @pytest.mark.parametrize("valid_port", [ + "19530", + "222", + 123, + ]) + def test_check_is_legal_port_true(self, valid_port): + valid = is_legal_port(valid_port) + assert valid is True + + @pytest.mark.parametrize("invalid_port", [ + is_legal_address, + "abc", + 0.3, + ]) + def test_check_is_legal_port_false(self, invalid_port): + valid = is_legal_port(invalid_port) + assert valid is False class TestCheckPassParam: @@ -12,19 +85,14 @@ def test_check_pass_param_valid(self): a = [[i * j for i in range(20)] for j in range(20)] check_pass_param(search_data=a) - import numpy as np a = np.float32([[1, 2, 3, 4], [1, 2, 3, 4]]) check_pass_param(search_data=a) def test_check_param_invalid(self): - with pytest.raises(Exception): + with pytest.raises(TypeError): a = {[i * j for i in range(20) for j in range(20)]} check_pass_param(search_data=a) - with pytest.raises(Exception): - a = [{i * j for i in range(40)} for j in range(40)] - check_pass_param(search_data=a) - class TestGenTS: def test_mkts1(self): @@ -61,7 +129,6 @@ def test_mkts2(self): class TestGetCommit: - def test_get_commit(self): s = get_commit("2.0.0rc9.dev22") assert s == "290d76f" @@ -70,7 +137,6 @@ def test_get_commit(self): assert s == "c9f015a04058638a28e1d2a5b265147cda0b0a23" def test_version_re(self): - import re version_info = r'((\d+)\.(\d+)\.(\d+))((rc)(\d+))?(\.dev(\d+))?' p = re.compile(version_info) @@ -87,5 +153,5 @@ def test_version_re(self): if rv is not None: assert rv.group() == v - print(f"group {rv.group()}") - print(f"group {rv.groups()}") + log.info(f"group {rv.group()}") + log.info(f"group {rv.groups()}") diff --git a/tests/test_client_entity_helper.py b/tests/test_client_entity_helper.py new file mode 100644 index 000000000..231ecb889 --- /dev/null +++ b/tests/test_client_entity_helper.py @@ -0,0 +1,786 @@ +import json +import struct +from typing import List +from unittest.mock import patch + +import numpy as np +import pytest +from pymilvus.client import entity_helper +from pymilvus.client.entity_helper import ( + convert_to_str_array, entity_to_array_arr, + entity_to_field_data, + entity_to_str_arr, + entity_type_to_dtype, + extract_array_row_data, + extract_dynamic_field_from_result, + get_max_len_of_var_char, + pack_field_value_to_field_data, + sparse_proto_to_rows, + sparse_rows_to_proto, +) +from pymilvus.client.entity_helper import extract_row_data_from_fields_data_v2 as convert_to_entity +from pymilvus.client.types import DataType +from pymilvus.exceptions import ParamError +from pymilvus.grpc_gen import schema_pb2 + +# Import additional functions for testing +from pymilvus.grpc_gen import schema_pb2 as schema_types +from pymilvus.settings import Config +from scipy.sparse import csr_matrix +from pymilvus.exceptions import DataNotMatchException + + +class TestEntityHelperSparse: + """Test entity_helper module functions""" + + @pytest.mark.parametrize("valid_sparse_matrix", [ + [{0: 1.0, 5: 2.5, 10: 3.0}], # list of one dict + [{0: 1.0, 5: 2.5}, {10: 3.0, 15: 4.0}], # list of dicts + [{}, {10: 3.0, 15: 4.0}], # list of dicts partial empty is allowed + [[(1, 0.5), (10, 0.3)], [(2, 0.7), (20, 0.1)]], # list of list + [[("1", "0.5"), (10, 0.3)]], # str representation of int + csr_matrix(([1, 2, 3], [0, 2, 3], [0, 2, 3, 3]), shape=(3, 4)), # scipy sparse matrix + [csr_matrix([[1, 0, 2]]), csr_matrix([[0, 0, 3]])], # list of scipy sparse matrices + ]) + def test_entity_is_sparse_matrix(self, valid_sparse_matrix: list): + assert entity_helper.entity_is_sparse_matrix(valid_sparse_matrix) is True + + @pytest.mark.parametrize("not_sparse_matrix", [ + [{"a": 1.0, "b": 2.0}], # invalid dict for non-numeric keys + [], # empty + [{0: 1.0}, "not a dict", {5: 2.0}], # mixed lists + None, + 123, + "string", + [1, 2, 3], + [[1, 2, 3]], + [[(1, 0.5, 0.2)]], + [[(1, "invalid")]], + [csr_matrix([[1, 0], [0, 1]])], # list of multi-row is not sparse + ]) + def test_entity_isnot_sparse_matrix(self, not_sparse_matrix: any): + assert entity_helper.entity_is_sparse_matrix(not_sparse_matrix) is False + + def test_get_input_num_rows_list(self): + """Test getting number of rows from list input""" + # Regular list + data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] + assert entity_helper.get_input_num_rows(data) == 3 + assert entity_helper.get_input_num_rows([1, 2, 3]) == 3 + assert entity_helper.get_input_num_rows({"a": 1, "b": 2}) == 2 + + data = [[1, 2, 3]] + assert entity_helper.get_input_num_rows(data) == 1 + + data = [] + assert entity_helper.get_input_num_rows(data) == 0 + + matrix = csr_matrix([[1, 0], [0, 1], [1, 1]]) + assert entity_helper.get_input_num_rows(matrix) == 3 + + sparse_list = [ + {0: 1.0}, + {5: 2.5}, + {10: 3.0} + ] + assert entity_helper.get_input_num_rows(sparse_list) == 3 + + data = np.array([[1, 2, 3], [4, 5, 6]]) + assert entity_helper.get_input_num_rows(data) == 2 + + @pytest.mark.parametrize("sparse_list", [ + [{0: 1.0, 2: 2.0}, {2: 3.0}], + csr_matrix([[1, 0, 2], [0, 0, 3]]) + ]) + def test_sparse_rows_to_proto_dict(self, sparse_list: any): + """Test converting sparse rows to protobuf format""" + proto = entity_helper.sparse_rows_to_proto(sparse_list) + assert isinstance(proto, schema_pb2.SparseFloatArray) + assert len(proto.contents) == 2 + assert proto.dim == 3 + + def test_sparse_proto_to_rows(self): + """Test converting protobuf sparse vectors back to rows""" + # Create a mock sparse proto + proto = schema_pb2.SparseFloatArray(dim=100) + + # Add some sparse vectors in binary format + # Format: pairs of (uint32 index, float32 value) + vec1_data = b'' + for idx, val in [(0, 1.0), (5, 2.5), (10, 3.0)]: + vec1_data += struct.pack('I', idx) + struct.pack('f', val) + proto.contents.append(vec1_data) + + vec2_data = b'' + for idx, val in [(15, 4.0), (20, 5.0)]: + vec2_data += struct.pack('I', idx) + struct.pack('f', val) + proto.contents.append(vec2_data) + + # Convert back to rows + rows = entity_helper.sparse_proto_to_rows(proto, 0, 2) + assert len(rows) == 2 + assert rows[0] == {0: 1.0, 5: 2.5, 10: 3.0} + assert rows[1] == {15: 4.0, 20: 5.0} + + def test_sparse_proto_to_rows_with_range(self): + """Test converting specific range of sparse vectors""" + proto = schema_pb2.SparseFloatArray(dim=100) + + # Add multiple sparse vectors in binary format + for i in range(5): + vec_data = struct.pack('I', i) + struct.pack('f', float(i)) + proto.contents.append(vec_data) + + # Get middle range + rows = entity_helper.sparse_proto_to_rows(proto, 1, 4) + assert len(rows) == 3 + assert rows[0] == {1: 1.0} + assert rows[1] == {2: 2.0} + assert rows[2] == {3: 3.0} + + def test_convert_to_json_nested(self): + """Test JSON conversion with nested structures""" + obj = { + "level1": { + "level2": { + "array": np.array([[1, 2], [3, 4]]), + "list": [np.int32(1), np.float64(2.5)] + } + } + } + result = entity_helper.convert_to_json(obj) + parsed = json.loads(result) + assert parsed["level1"]["level2"]["array"] == [[1, 2], [3, 4]] + + @pytest.mark.parametrize("data", [ + {"key": "value", "number": 42}, # dict + {"outer": {"inner": "value"}}, # nested dict + [1, 2, 3, "four"], # list + [{"a": 1}, {"b": 2}], # list of dict + None, + pytest.param({"array": np.array([1, 2, 3])}, marks=pytest.mark.xfail(reason="fix me")), + { "int": np.int64(42), "float": np.float32(3.14), "bool": np.bool_(True) }, + [{"val": np.int64(10)}, {"val": np.float32(3.14)}], + ]) + def test_convert_to_json_dict(self, data: dict): + """Test JSON conversion for dict input""" + result = entity_helper.convert_to_json(data) + assert isinstance(result, bytes) + assert json.loads(result.decode()) == data + + @pytest.mark.parametrize("json_string,expected", [ + ('{"key": "value", "number": 42}', {"key": "value", "number": 42}), + ('{"nested": {"inner": "value"}}', {"nested": {"inner": "value"}}), + ('[1, 2, 3, "four"]', [1, 2, 3, "four"]), + ('{"name": "Alice", "age": 30}', {"name": "Alice", "age": 30}), + ('null', None), + ('true', True), + ('false', False), + ('123', 123), + ('"simple string"', "simple string"), + ]) + def test_convert_to_json_string_valid(self, json_string: str, expected): + """Test JSON conversion for valid JSON string input""" + result = entity_helper.convert_to_json(json_string) + assert isinstance(result, bytes) + # Verify the result is valid JSON + parsed = json.loads(result.decode()) + assert parsed == expected + + def test_convert_to_json_from_json_dumps(self): + """Test JSON conversion from json.dumps() output""" + original_dict = {"key": "value", "count": 100, "nested": {"inner": "data"}} + json_string = json.dumps(original_dict) + + result = entity_helper.convert_to_json(json_string) + assert isinstance(result, bytes) + parsed = json.loads(result.decode()) + assert parsed == original_dict + + @pytest.mark.parametrize("invalid_json_string", [ + "not a json string", + '{"invalid": }', + '{"key": "value"', # missing closing brace + "{'key': 'value'}", # single quotes not valid in JSON + "{key: value}", # unquoted keys + "undefined", + "{,}", + ]) + def test_convert_to_json_string_invalid(self, invalid_json_string: str): + """Test JSON conversion rejects invalid JSON strings""" + + with pytest.raises(DataNotMatchException) as exc_info: + entity_helper.convert_to_json(invalid_json_string) + + # Verify error message contains the invalid JSON string + error_message = str(exc_info.value) + assert "Invalid JSON string" in error_message + # Verify the original input string is in the error message + assert invalid_json_string in error_message or invalid_json_string[:50] in error_message + + def test_convert_to_json_string_with_non_string_keys(self): + """Test JSON conversion rejects JSON strings with non-string keys in dict""" + + # This is actually not possible in standard JSON, as JSON object keys are always strings + # But we can test that dict validation still works + invalid_dict = {1: "value", 2: "another"} + + with pytest.raises(DataNotMatchException) as exc_info: + entity_helper.convert_to_json(invalid_dict) + + error_message = str(exc_info.value) + assert "JSON" in error_message + + def test_convert_to_json_long_invalid_string_truncated(self): + """Test that long invalid JSON strings are truncated in error messages""" + + # Create a long invalid JSON string + long_invalid_json = "invalid json " * 50 # > 200 characters + + with pytest.raises(DataNotMatchException) as exc_info: + entity_helper.convert_to_json(long_invalid_json) + + error_message = str(exc_info.value) + assert "Invalid JSON string" in error_message + # Should contain truncated version with "..." + assert "..." in error_message + + def test_pack_field_value_to_field_data(self): + """Test packing field values into field data protobuf""" + # Test with scalar field + field_data = schema_pb2.FieldData() + field_data.type = DataType.INT64 + field_info = {"name": "test_field"} + + value = 42 + entity_helper.pack_field_value_to_field_data(value, field_data, field_info) + + assert len(field_data.scalars.long_data.data) == 1 + assert field_data.scalars.long_data.data[0] == value + + def test_pack_field_value_to_field_data_vectors(self): + """Test packing vector field values""" + field_data = schema_pb2.FieldData() + field_data.type = DataType.FLOAT_VECTOR + field_info = {"name": "vector_field"} + + value = [1.0, 2.0, 3.0, 4.0] + + entity_helper.pack_field_value_to_field_data(value, field_data, field_info) + + assert field_data.vectors.dim == 4 + assert list(field_data.vectors.float_vector.data) == value + + def test_extract_array_row_data(self): + """Test extracting array data from protobuf""" + # Create field data with array + field_data = schema_pb2.FieldData() + field_data.scalars.array_data.element_type = DataType.INT64 + + # Add array data for index 0 + scalar_field = schema_pb2.ScalarField() + scalar_field.long_data.data.extend([0, 1, 2]) + field_data.scalars.array_data.data.append(scalar_field) + + result = entity_helper.extract_array_row_data(field_data, 0) + assert result == [0, 1, 2] + + def test_extract_array_row_data_string(self): + """Test extracting string array data""" + # Create field data with array + field_data = schema_pb2.FieldData() + field_data.scalars.array_data.element_type = DataType.VARCHAR + + # Add array data for index 0 + scalar_field = schema_pb2.ScalarField() + scalar_field.string_data.data.extend(["str_0", "str_1"]) + field_data.scalars.array_data.data.append(scalar_field) + + result = entity_helper.extract_array_row_data(field_data, 0) + assert result == ["str_0", "str_1"] + + def test_extract_array_row_data_bool(self): + """Test extracting boolean array data""" + # Create field data with array + field_data = schema_pb2.FieldData() + field_data.scalars.array_data.element_type = DataType.BOOL + + # Add array data for index 0 + scalar_field = schema_pb2.ScalarField() + scalar_field.bool_data.data.extend([True, False, True]) + field_data.scalars.array_data.data.append(scalar_field) + + result = entity_helper.extract_array_row_data(field_data, 0) + assert result == [True, False, True] + + def test_extract_array_row_data_float(self): + """Test extracting float array data""" + # Create field data with array + field_data = schema_pb2.FieldData() + field_data.scalars.array_data.element_type = DataType.FLOAT + + # Add array data for index 0 + scalar_field = schema_pb2.ScalarField() + scalar_field.float_data.data.extend([1.1, 2.2, 3.3]) + field_data.scalars.array_data.data.append(scalar_field) + + result = entity_helper.extract_array_row_data(field_data, 0) + assert result == pytest.approx([1.1, 2.2, 3.3]) + + def test_extract_array_row_data_double(self): + """Test extracting double array data""" + # Create field data with array + field_data = schema_pb2.FieldData() + field_data.scalars.array_data.element_type = DataType.DOUBLE + + # Add array data for index 0 + scalar_field = schema_pb2.ScalarField() + scalar_field.double_data.data.extend([1.11111, 2.22222, 3.33333]) + field_data.scalars.array_data.data.append(scalar_field) + + result = entity_helper.extract_array_row_data(field_data, 0) + assert result == pytest.approx([1.11111, 2.22222, 3.33333]) + + def test_extract_array_row_data_invalid_type(self): + """Test extracting array data with invalid type""" + # Create field data with array + field_data = schema_pb2.FieldData() + field_data.scalars.array_data.element_type = 999 # Invalid type + + # Add array data for index 0 + scalar_field = schema_pb2.ScalarField() + field_data.scalars.array_data.data.append(scalar_field) + + result = entity_helper.extract_array_row_data(field_data, 0) + assert result is None # Returns None for unknown types + + +class TestEntityHelperExtended: + def test_sparse_rows_to_proto_invalid_index(self): + """Test error handling for invalid indices""" + # Negative index + with pytest.raises(ParamError, match="sparse vector index must be positive"): + sparse_rows_to_proto([{-1: 0.5}]) + + # Index too large + with pytest.raises(ParamError, match="sparse vector index must be positive"): + sparse_rows_to_proto([{2**32: 0.5}]) + + def test_sparse_rows_to_proto_nan_value(self): + """Test error handling for NaN values""" + with pytest.raises(ParamError, match="sparse vector value must not be NaN"): + sparse_rows_to_proto([{1: float('nan')}]) + + def test_sparse_rows_to_proto_invalid_input(self): + """Test error handling for invalid input""" + with pytest.raises(ParamError, match="input must be a sparse matrix"): + sparse_rows_to_proto("invalid") + + def test_sparse_proto_to_rows_invalid(self): + """Test error handling for invalid proto""" + with pytest.raises(ParamError, match="Vector must be a sparse float vector"): + sparse_proto_to_rows("invalid") + + def test_entity_type_to_dtype(self): + """Test converting entity type to dtype""" + # Integer type + assert entity_type_to_dtype(1) == 1 + assert entity_type_to_dtype(DataType.INT64) == DataType.INT64 + + # We can't test string conversion without knowing exact protobuf enum names + # Let's just test invalid type + with pytest.raises(ParamError, match="invalid entity type"): + entity_type_to_dtype([]) + + def test_get_max_len_of_var_char(self): + """Test getting max length of varchar field""" + # With params + field_info = {"params": {Config.MaxVarCharLengthKey: 100}} + assert get_max_len_of_var_char(field_info) == 100 + + # Without params - use default + field_info = {} + assert get_max_len_of_var_char(field_info) == Config.MaxVarCharLength + + # Partial params + field_info = {"params": {}} + assert get_max_len_of_var_char(field_info) == Config.MaxVarCharLength + + def test_convert_to_str_array(self): + """Test converting to string array""" + field_info = {"name": "test_field", "params": {Config.MaxVarCharLengthKey: 10}} + + # Valid strings + result = convert_to_str_array(["hello", "world"], field_info) + assert result == ["hello", "world"] + + # String exceeding max length + with pytest.raises(ParamError, match="length of string exceeds max length"): + convert_to_str_array(["this is too long"], field_info) + + # Non-string input + with pytest.raises(ParamError, match="expects string input"): + convert_to_str_array([123], field_info) + + # Without check + result = convert_to_str_array([123, "test"], field_info, check=False) + assert len(result) == 2 + + @patch('pymilvus.client.entity_helper.Config') + def test_convert_to_str_array_with_encoding(self, mock_config): + """Test string array conversion with different encoding""" + mock_config.EncodeProtocol = "latin-1" + mock_config.MaxVarCharLengthKey = "max_length" + mock_config.MaxVarCharLength = 65535 + + field_info = {"name": "test_field"} + strings = ["hello", "world"] + result = convert_to_str_array(strings, field_info, check=False) + assert len(result) == 2 + + def test_entity_to_str_arr(self): + """Test entity_to_str_arr wrapper function""" + field_info = {"name": "test_field", "params": {Config.MaxVarCharLengthKey: 20}} + result = entity_to_str_arr(["test1", "test2"], field_info) + assert result == ["test1", "test2"] + + def test_extract_array_row_data(self): + """Test extracting array row data""" + # INT64 array + field_data = schema_types.FieldData() + field_data.type = DataType.ARRAY + array_data = schema_types.ArrayArray() + + # Add INT64 data + int_array = schema_types.LongArray() + int_array.data.extend([1, 2, 3]) + array_data.data.append(schema_types.ScalarField(long_data=int_array)) + int_array2 = schema_types.LongArray() + int_array2.data.extend([4, 5]) + array_data.data.append(schema_types.ScalarField(long_data=int_array2)) + + array_data.element_type = DataType.INT64 + field_data.scalars.array_data.CopyFrom(array_data) + + result = extract_array_row_data(field_data, 0) + assert result == [1, 2, 3] + result = extract_array_row_data(field_data, 1) + assert result == [4, 5] + + def test_extract_array_row_data_string(self): + """Test extracting string array data""" + field_data = schema_types.FieldData() + field_data.type = DataType.ARRAY + array_data = schema_types.ArrayArray() + + # Add string data + str_array = schema_types.StringArray() + str_array.data.extend(["hello", "world"]) + array_data.data.append(schema_types.ScalarField(string_data=str_array)) + + array_data.element_type = DataType.VARCHAR + field_data.scalars.array_data.CopyFrom(array_data) + + result = extract_array_row_data(field_data, 0) + assert result == ["hello", "world"] + + def test_extract_array_row_data_bool(self): + """Test extracting boolean array data""" + field_data = schema_types.FieldData() + field_data.type = DataType.ARRAY + array_data = schema_types.ArrayArray() + + # Add bool data + bool_array = schema_types.BoolArray() + bool_array.data.extend([True, False, True]) + array_data.data.append(schema_types.ScalarField(bool_data=bool_array)) + + array_data.element_type = DataType.BOOL + field_data.scalars.array_data.CopyFrom(array_data) + + result = extract_array_row_data(field_data, 0) + assert result == [True, False, True] + + def test_extract_array_row_data_float(self): + """Test extracting float array data""" + field_data = schema_types.FieldData() + field_data.type = DataType.ARRAY + array_data = schema_types.ArrayArray() + + # Add float data + float_array = schema_types.FloatArray() + float_array.data.extend([1.1, 2.2, 3.3]) + array_data.data.append(schema_types.ScalarField(float_data=float_array)) + + array_data.element_type = DataType.FLOAT + field_data.scalars.array_data.CopyFrom(array_data) + + result = extract_array_row_data(field_data, 0) + assert len(result) == 3 + assert result[0] == pytest.approx(1.1) + + def test_extract_array_row_data_double(self): + """Test extracting double array data""" + field_data = schema_types.FieldData() + field_data.type = DataType.ARRAY + array_data = schema_types.ArrayArray() + + # Add double data + double_array = schema_types.DoubleArray() + double_array.data.extend([1.11111, 2.22222]) + array_data.data.append(schema_types.ScalarField(double_data=double_array)) + + array_data.element_type = DataType.DOUBLE + field_data.scalars.array_data.CopyFrom(array_data) + + result = extract_array_row_data(field_data, 0) + assert len(result) == 2 + + def test_extract_array_row_data_invalid_type(self): + """Test error handling for invalid array element type""" + field_data = schema_types.FieldData() + field_data.type = DataType.ARRAY + array_data = schema_types.ArrayArray() + array_data.element_type = 999 # Invalid type + # Add at least one empty element to avoid index error + array_data.data.append(schema_types.ScalarField()) + field_data.scalars.array_data.CopyFrom(array_data) + + assert extract_array_row_data(field_data, 0) is None + + def test_entity_to_array_arr(self): + """Test converting entity to array array""" + field_info = { + "name": "array_field", + "element_type": DataType.INT64 + } + + # List of lists + data = [[1, 2, 3], [4, 5], [6]] + result = entity_to_array_arr(data, field_info) + assert len(result) == 3 + assert result[0].long_data.data == [1, 2, 3] + assert result[1].long_data.data == [4, 5] + + def test_entity_to_array_arr_string(self): + """Test converting string arrays""" + field_info = { + "name": "array_field", + "element_type": DataType.VARCHAR + } + + data = [["hello", "world"], ["foo"]] + result = entity_to_array_arr(data, field_info) + assert len(result) == 2 + assert list(result[0].string_data.data) == ["hello", "world"] + + def test_entity_to_array_arr_invalid_type(self): + """Test error handling for invalid element type""" + field_info = { + "name": "array_field", + "element_type": 999 + } + + with pytest.raises(ParamError, match="Unsupported element type"): + entity_to_array_arr([[1, 2]], field_info) + + def test_pack_field_value_to_field_data(self): + """Test packing field values to field data""" + # pack_field_value_to_field_data takes different parameters + field_data = schema_types.FieldData() + field_data.type = DataType.FLOAT_VECTOR + field_data.field_name = "vector_field" + field_info = {"name": "vector_field"} + + # Pack a single vector + pack_field_value_to_field_data( + np.array([1.0, 2.0]), + field_data, + field_info + ) + + # Check the result + assert field_data.type == DataType.FLOAT_VECTOR + assert field_data.vectors.dim == 2 + + def test_pack_field_value_to_field_data_sparse(self): + """Test packing sparse vectors""" + field_data = schema_types.FieldData() + field_data.type = DataType.SPARSE_FLOAT_VECTOR + field_data.field_name = "sparse_field" + field_info = {"name": "sparse_field"} + + # Pack a single sparse vector + sparse_data = {1: 0.5, 10: 0.3} + pack_field_value_to_field_data( + sparse_data, + field_data, + field_info + ) + + # Check the result + assert field_data.type == DataType.SPARSE_FLOAT_VECTOR + assert len(field_data.vectors.sparse_float_vector.contents) == 1 + + def test_pack_field_value_to_field_data_scalars(self): + """Test packing scalar field values""" + # Test INT64 + field_data = schema_types.FieldData() + field_data.type = DataType.INT64 + field_data.field_name = "int_field" + field_info = {"name": "int_field"} + + pack_field_value_to_field_data( + 42, + field_data, + field_info + ) + + assert field_data.type == DataType.INT64 + assert field_data.scalars.long_data.data[0] == 42 + + def test_extract_field_info(self): + """Test extracting primary field from schema""" + # Create schema with primary field + fields_info = [ + {"name": "id", "is_primary": True}, + {"name": "vector", "is_primary": False} + ] + + # Test field extraction logic + # This tests the field extraction patterns used in entity_helper + for field in fields_info: + if field.get("is_primary"): + assert field["name"] == "id" + + def test_extract_dynamic_field_from_result(self): + """Test extracting dynamic field from result""" + # Create actual result object with fields_data and output_fields attributes + class ActualResult: + def __init__(self, fields_data: List, output_fields: List): + self.fields_data = fields_data + self.output_fields = output_fields + + # Test with dynamic field + dynamic_field_data = schema_types.FieldData() + dynamic_field_data.is_dynamic = True + dynamic_field_data.field_name = "$meta" + + regular_field_data = schema_types.FieldData() + regular_field_data.is_dynamic = False + regular_field_data.field_name = "id" + + # Create result with dynamic field - extra_field comes before $meta + result = ActualResult( + fields_data=[regular_field_data, dynamic_field_data], + output_fields=["id", "extra_field", "another_extra", "$meta"] + ) + + dynamic_field_name, dynamic_fields = extract_dynamic_field_from_result(result) + assert dynamic_field_name == "$meta" + # When $meta is found in output_fields, dynamic_fields gets cleared + assert len(dynamic_fields) == 0 + + # Test with no dynamic field + result_no_dynamic = ActualResult( + fields_data=[regular_field_data], + output_fields=["id", "extra_field"] + ) + + dynamic_field_name, dynamic_fields = extract_dynamic_field_from_result(result_no_dynamic) + assert dynamic_field_name is None + assert "extra_field" in dynamic_fields + assert "id" not in dynamic_fields + + # Test with dynamic field NOT in output_fields (dynamic_fields preserved) + result_meta_not_in_output = ActualResult( + fields_data=[regular_field_data, dynamic_field_data], + output_fields=["id", "extra_field", "another_extra"] + ) + + dynamic_field_name, dynamic_fields = extract_dynamic_field_from_result(result_meta_not_in_output) + assert dynamic_field_name == "$meta" + assert "extra_field" in dynamic_fields + assert "another_extra" in dynamic_fields + assert "id" not in dynamic_fields # id is a regular field + assert len(dynamic_fields) == 2 + + def test_data_validation(self): + """Test data validation patterns""" + # Test length validation + data1 = [1, 2, 3] + data2 = [4, 5, 6] + assert len(data1) == len(data2) # Valid same length + + # Length mismatch should be caught + data3 = [1, 2] + data4 = [3, 4, 5] + assert len(data3) != len(data4) # Invalid different length + + def test_schema_validation(self): + """Test schema validation patterns""" + fields_info = [ + {"name": "id", "is_primary": True, "auto_id": False}, + {"name": "vector", "is_primary": False} + ] + + # Valid data matches schema + data = {"id": [1, 2], "vector": [[1.0, 2.0], [3.0, 4.0]]} + for field in fields_info: + if not field.get("auto_id"): + assert field["name"] in data # Field should be in data + + # Test auto_id logic + fields_info[0]["auto_id"] = True + # When auto_id is True, id field should not be required in data + + + + + + + def test_convert_to_entity(self): + """Test converting field data to entities""" + # Create field data + field1 = schema_types.FieldData() + field1.field_name = "id" + field1.type = DataType.INT64 + long_array = schema_types.LongArray() + long_array.data.extend([1, 2, 3]) + field1.scalars.long_data.CopyFrom(long_array) + + field2 = schema_types.FieldData() + field2.field_name = "name" + field2.type = DataType.VARCHAR + str_array = schema_types.StringArray() + str_array.data.extend(["a", "b", "c"]) + field2.scalars.string_data.CopyFrom(str_array) + + # extract_row_data_from_fields_data_v2 takes a single field_data and list of entity dicts + # We need to create empty entity rows first + entity_rows = [{} for _ in range(3)] + + # Process each field separately + convert_to_entity(field1, entity_rows) + convert_to_entity(field2, entity_rows) + + assert len(entity_rows) == 3 + assert entity_rows[0] == {"id": 1, "name": "a"} + assert entity_rows[1] == {"id": 2, "name": "b"} + assert entity_rows[2] == {"id": 3, "name": "c"} + + def test_entity_to_field_data(self): + """Test converting entity to field data""" + # entity_to_field_data expects a dict with specific structure + entity = { + "name": "test_field", + "type": DataType.INT64, + "values": [1, 2, 3, 4, 5] + } + field_info = {"name": "test_field"} + + result = entity_to_field_data(entity, field_info, 5) + + assert result.field_name == "test_field" + assert result.type == DataType.INT64 + assert list(result.scalars.long_data.data) == [1, 2, 3, 4, 5] diff --git a/tests/test_collection.py b/tests/test_collection.py index 6f8b27a8b..2a8a45628 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -1,182 +1,39 @@ import logging -import numpy -import pytest from unittest import mock -from utils import * -from pymilvus import Collection, connections +from pymilvus import Collection, CollectionSchema, DataType, FieldSchema, connections LOGGER = logging.getLogger(__name__) class TestCollections: - - # @pytest.fixture(scope="function",) - # def collection(self): - # name = gen_collection_name() - # schema = gen_schema() - # yield Collection(name, schema=schema) - # if connections.get_connection().has_collection(name): - # connections.get_connection().drop_collection(name) - def test_collection_by_DataFrame(self): - from pymilvus import Collection - from pymilvus import FieldSchema, CollectionSchema - from pymilvus import DataType - coll_name = gen_collection_name() + coll_name = "ut_collection_test_collection_by_DataFrame" fields = [ FieldSchema("int64", DataType.INT64), FieldSchema("float", DataType.FLOAT), - FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=128) + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=128), + FieldSchema("binary_vector", DataType.BINARY_VECTOR, dim=128), + FieldSchema("float16_vector", DataType.FLOAT16_VECTOR, dim=128), + FieldSchema("bfloat16_vector", DataType.BFLOAT16_VECTOR, dim=128), + FieldSchema("int8_vector", DataType.INT8_VECTOR, dim=128), + FieldSchema("timestamptz", DataType.TIMESTAMPTZ), ] prefix = "pymilvus.client.grpc_handler.GrpcHandler" collection_schema = CollectionSchema(fields, primary_field="int64") - with mock.patch(f"{prefix}.__init__", return_value=None): - with mock.patch(f"{prefix}._wait_for_channel_ready", return_value=None): - connections.connect() + with mock.patch(f"{prefix}.__init__", return_value=None), mock.patch(f"{prefix}._wait_for_channel_ready", return_value=None): + connections.connect(keep_alive=False) - with mock.patch(f"{prefix}.create_collection", return_value=None): - with mock.patch(f"{prefix}.has_collection", return_value=False): + with mock.patch(f"{prefix}.create_collection", return_value=None), mock.patch(f"{prefix}.has_collection", return_value=False): collection = Collection(name=coll_name, schema=collection_schema) - with mock.patch(f"{prefix}.create_collection", return_value=None): - with mock.patch(f"{prefix}.has_collection", return_value=True): - with mock.patch(f"{prefix}.describe_collection", return_value=collection_schema.to_dict()): + with mock.patch(f"{prefix}.create_collection", return_value=None), mock.patch(f"{prefix}.has_collection", return_value=True), mock.patch(f"{prefix}.describe_collection", return_value=collection_schema.to_dict()): collection = Collection(name=coll_name) - with mock.patch(f"{prefix}.drop_collection", return_value=None): - with mock.patch(f"{prefix}.describe_index", return_value=None): - collection.drop() - - @pytest.mark.xfail - def test_constructor(self, collection): - assert type(collection) is Collection - - @pytest.mark.xfail - def test_construct_from_dataframe(self): - assert type(Collection.construct_from_dataframe(gen_collection_name(), gen_pd_data(default_nb), primary_field="int64")[0]) is Collection - - @pytest.mark.xfail - def test_schema(self, collection): - schema = collection.schema - description = "This is new description" - with pytest.raises(AttributeError): - schema.description = description - with pytest.raises(AttributeError): - collection.schema = schema - - @pytest.mark.xfail - def test_description(self, collection): - LOGGER.info(collection.description) - description = "This is new description" - with pytest.raises(AttributeError): - collection.description = description - - @pytest.mark.xfail - def test_name(self, collection): - LOGGER.info(collection.name) - with pytest.raises(AttributeError): - collection.name = gen_collection_name() - - @pytest.mark.xfail - def test_is_empty(self, collection): - assert collection.is_empty is True - - @pytest.mark.xfail - def test_num_entities(self, collection): - assert collection.num_entities == 0 - - @pytest.mark.xfail - def test_drop(self, collection): - collection.drop() - - @pytest.mark.xfail - def test_load(self, collection): - collection.load() - - @pytest.mark.xfail - def test_release(self, collection): - collection.release() - - @pytest.mark.xfail - def test_insert(self, collection): - data = gen_list_data(default_nb) - collection.insert(data) - - @pytest.mark.xfail - def test_insert_ret(self, collection): - vectors = gen_vectors(1, default_dim, bool(0)) - data = [ - [1], - [numpy.float32(1.0)], - vectors - ] - result = collection.insert(data) - print(result) - assert "insert count" in str(result) - assert "delete count" in str(result) - assert "upsert count" in str(result) - assert "timestamp" in str(result) - - @pytest.mark.xfail - def test_search(self, collection): - collection.search() - - @pytest.mark.xfail - def test_get(self, collection): - data = gen_list_data(default_nb) - ids = collection.insert(data) - assert len(ids) == default_nb - res = collection.get(ids[0:10]) - - @pytest.mark.xfail - def test_query(self, collection): - data = gen_list_data(default_nb) - ids = collection.insert(data) - assert len(ids) == default_nb - ids_expr = ",".join(str(x) for x in ids) - expr = "id in [ " + ids_expr + " ]" - res = collection.query(expr) - - @pytest.mark.xfail - def test_partitions(self, collection): - assert len(collection.partitions) == 1 - - @pytest.mark.xfail - def test_partition(self, collection): - collection.partition(gen_partition_name()) - - @pytest.mark.xfail - def test_has_partition(self, collection): - assert collection.has_partition("_default") is True - assert collection.has_partition(gen_partition_name()) is False - - @pytest.mark.xfail - def test_drop_partition(self, collection): - collection.drop_partition(gen_partition_name()) - - @pytest.mark.xfail - def test_indexes(self, collection): - assert type(collection.indexes) is list - assert len(collection.indexes) == 0 - - @pytest.mark.xfail - def test_index(self, collection): - collection.index() - - @pytest.mark.xfail - def test_create_index(self, collection, defa): - collection.create_index(gen_field_name(), gen_index_name()) - - @pytest.mark.xfail - def test_has_index(self, collection): - assert collection.has_index() is False - - @pytest.mark.xfail - def test_drop_index(self, collection): - collection.drop_index() + with mock.patch(f"{prefix}.drop_collection", return_value=None), mock.patch(f"{prefix}.list_indexes", return_value=[]), mock.patch(f"{prefix}.release_collection", return_value=None): + collection.drop() - def test_dummy(self): - pass + with mock.patch(f"{prefix}.close", return_value=None): + connections.disconnect("default") diff --git a/tests/test_connections.py b/tests/test_connections.py index efeca39c0..3e79fb925 100644 --- a/tests/test_connections.py +++ b/tests/test_connections.py @@ -1,154 +1,435 @@ import logging -import pytest -import pymilvus +import os from unittest import mock -from pymilvus import connections -from pymilvus import DefaultConfig +import pytest +from pymilvus import * +from pymilvus import DefaultConfig, MilvusException, connections +from pymilvus.exceptions import ErrorCode LOGGER = logging.getLogger(__name__) +mock_prefix = "pymilvus.client.grpc_handler.GrpcHandler" + + +class TestConnect: + """ + Connect to a connected alias will: + - ignore and return if no configs are given + - raise ConnectionConfigException if inconsistent configs are given + + Connect to an existing and not connected alias will: + - connect with the existing alias config if no configs are given + - connect with the providing configs if valid, and replace the old ones. + + Connect to a new alias will: + - connect with the providing configs if valid, store the new alias with these configs + + """ + @pytest.fixture(scope="function", params=[ + {}, + {"random": "not useful"}, + ]) + def no_host_port(self, request): + return request.param + + @pytest.fixture(scope="function", params=[ + {"port": "19530"}, + {"host": "localhost"}, + ]) + def no_host_or_port(self, request): + return request.param + + @pytest.fixture(scope="function", params=[ + {"uri": "https://127.0.0.1:19530"}, + {"uri": "tcp://127.0.0.1:19530"}, + {"uri": "http://127.0.0.1:19530"}, + {"uri": "http://example.com:80"}, + {"uri": "http://example.com:80/database1"}, + {"uri": "https://127.0.0.1:19530/database2"}, + {"uri": "https://127.0.0.1/database3"}, + {"uri": "http://127.0.0.1/database4"}, + ]) + def uri(self, request): + return request.param + + def test_connect_with_default_config(self): + alias = "default" + default_addr = {"address": "localhost:19530", "user": ""} + + assert connections.has_connection(alias) is False + addr = connections.get_connection_addr(alias) + + assert addr == default_addr + + with mock.patch(f"{mock_prefix}.__init__", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(keep_alive=False) + + assert connections.has_connection(alias) is True + + addr = connections.get_connection_addr(alias) + assert addr == default_addr + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.disconnect(alias) + + @pytest.fixture(scope="function", params=[ + ("", {"address": "localhost:19530", "user": ""}), + ("localhost", {"address": "localhost:19530", "user": ""}), + ("localhost:19530", {"address": "localhost:19530", "user": ""}), + ("abc@localhost", {"address": "localhost:19530", "user": "abc"}), + ("milvus_host", {"address": "milvus_host:19530", "user": ""}), + ("milvus_host:12012", {"address": "milvus_host:12012", "user": ""}), + ("abc@milvus_host:12012", {"address": "milvus_host:12012", "user": "abc"}), + ("abc@milvus_host", {"address": "milvus_host:19530", "user": "abc"}), + ]) + def test_connect_with_default_config_from_environment(self, env_result): + os.environ[DefaultConfig.MILVUS_URI] = env_result[0] + assert env_result[1] == connections._read_default_config_from_os_env() + + # use env + with mock.patch(f"{mock_prefix}.__init__", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(keep_alive=False) + + assert env_result[1] == connections.get_connection_addr(DefaultConfig.MILVUS_CONN_ALIAS) + + # use param + with mock.patch(f"{mock_prefix}.__init__", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(DefaultConfig.MILVUS_CONN_ALIAS, host="test_host", port="19999", keep_alive=False) + + curr_addr = connections.get_connection_addr(DefaultConfig.MILVUS_CONN_ALIAS) + assert env_result[1] != curr_addr + assert curr_addr == {"address":"test_host:19999", "user": ""} + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(DefaultConfig.MILVUS_CONN_ALIAS) + + def test_connect_new_alias_with_configs(self): + alias = "exist" + addr = {"address": "localhost:19530"} + + assert connections.has_connection(alias) is False + a = connections.get_connection_addr(alias) + assert a == {} + + with mock.patch(f"{mock_prefix}.__init__", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(alias, **addr, keep_alive=False) + + assert connections.has_connection(alias) is True + + a = connections.get_connection_addr(alias) + a.pop("user") + assert a == addr + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) + + def test_connect_new_alias_with_configs_NoHostOrPort(self, no_host_or_port): + alias = "no_host_or_port" + + assert connections.has_connection(alias) is False + a = connections.get_connection_addr(alias) + assert a == {} + + with mock.patch(f"{mock_prefix}.__init__", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(alias, **no_host_or_port, keep_alive=False) + + assert connections.has_connection(alias) is True + assert connections.get_connection_addr(alias) == {"address": "localhost:19530", "user": ""} + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) + + def test_connect_new_alias_with_no_config(self): + alias = self.test_connect_new_alias_with_no_config.__name__ + + assert connections.has_connection(alias) is False + a = connections.get_connection_addr(alias) + assert a == {} + + with pytest.raises(MilvusException) as excinfo: + connections.connect(alias, keep_alive=False) + + LOGGER.info(f"Exception info: {excinfo.value}") + assert "You need to pass in the configuration" in excinfo.value.message + assert excinfo.value.code == ErrorCode.UNEXPECTED_ERROR + + def test_connect_with_uri(self, uri): + alias = self.test_connect_with_uri.__name__ + + with mock.patch(f"{mock_prefix}._setup_grpc_channel", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(alias, **uri, keep_alive=False) + + addr = connections.get_connection_addr(alias) + LOGGER.debug(addr) + + assert connections.has_connection(alias) is True + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) + + def test_add_connection_then_connect(self, uri): + alias = self.test_add_connection_then_connect.__name__ + + connections.add_connection(**{alias: uri}) + addr1 = connections.get_connection_addr(alias) + LOGGER.debug(f"addr1: {addr1}") + + with mock.patch(f"{mock_prefix}._setup_grpc_channel", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + connections.connect(alias, keep_alive=False) + + addr2 = connections.get_connection_addr(alias) + LOGGER.debug(f"addr2: {addr2}") + + assert addr1 == addr2 + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) + + +class TestAddConnection: + @pytest.fixture(scope="function", params=[ + {"host": "localhost", "port": "19530"}, + {"host": "localhost", "port": "19531"}, + {"host": "localhost", "port": "19530", "random": "useless"}, + ]) + def host_port(self, request): + return request.param + + @pytest.fixture(scope="function", params=[ + {"host": None, "port": "19530"}, + {"host": 1, "port": "19531"}, + {"host": 1.0, "port": "19530", "random": "useless"}, + ]) + def invalid_host(self, request): + return request.param + + @pytest.fixture(scope="function", params=[ + {"host": "localhost", "port": None}, + {"host": "localhost", "port": 1.0}, + {"host": "localhost", "port": b'19530', "random": "useless"}, + ]) + def invalid_port(self, request): + return request.param + + def test_add_connection_no_error(self, host_port): + add_connection = connections.add_connection + + add_connection(test=host_port) + assert connections.get_connection_addr("test").get("address") == f"{host_port['host']}:{host_port['port']}" + + connections.remove_connection("test") + + def test_add_connection_no_error_with_user(self): + add_connection = connections.add_connection + + host_port = {"host": "localhost", "port": "19530", "user": "_user"} + + add_connection(test=host_port) -# TODO rewrite -@pytest.mark.xfail -class TestConnections: - @pytest.fixture(scope="function") - def c(self): - return connections - - @pytest.fixture(scope="function") - def configure_params(self): - params = { - "test": {"host": "localhost", "port": "19530"}, - "dev": {"host": "127.0.0.1", "port": "19530"}, - } - return params - - @pytest.fixture(scope="function") - def host(self): - return "localhost" - - @pytest.fixture(scope="function") - def port(self): - return "19530" - - @pytest.fixture(scope="function") - def params(self, host, port): - d = { - "host": host, - "port": port, - } - return d - - def test_constructor(self, c): - LOGGER.info(type(c)) - - def test_add_connection(self, c, configure_params): - c.add_connection(**configure_params) - - @pytest.fixture(scope="function") - def invalid_params(self): - params = { - "invalid1": {"port": "19530"}, - "invalid2": {"host": bytes("127.0.0.1", "utf-8"), "port": "19530"}, - "invalid3": {"host": 0, "port": "19530"}, - "invalid4": {"host": -1, "port": "19530"}, - "invalid5": {"host": 1.0, "port": "19530"}, - "invalid6": {"host": "{}", "port": "19530"}, - "invalid7": {"host": "[a, b, c]", "port": "19530"}, - } - return params - - def test_invalid_params_connect(self, c, invalid_params): - with pytest.raises(Exception): - for k, v in range(invalid_params): - temp = {k: v} - c.add_connection(**temp) - - def test_add_another_connection_after_connect(self, c): - k = "test" - p = {k: {"host": "localhost", "port": "19530"}} - c.add_connection(**p) - - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - c.connect(k) - - with pytest.raises(Exception): - - ap = {k: {"host": "localhost", "port": "19531"}} - c.add_connection(**ap) - - def test_remove_connection_without_no_connections(self, c): - c.remove_connection("remove") - - def test_remove_connection(self, c, host, port): - with mock.patch("pymilvus.client.grpc_handler.GrpcHandler.__init__", return_value=None): - with mock.patch("pymilvus.Milvus.close", return_value=None): - alias = "default" - - c.connect(alias, host=host, port=port) - c.disconnect(alias) - - assert c.get_connection(alias) is None - c.remove_connection(alias) - - def test_connect_without_param(self, c): - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - alias = "default" - c.connect(alias) - conn_got = c.get_connection(alias) - assert isinstance(conn_got, pymilvus.client.grpc_handler.GrpcHandler) - - def test_connect(self, c, params): - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - alias = "default" - c.connect(alias, **params) - conn_got = c.get_connection(alias) - assert isinstance(conn_got, pymilvus.client.grpc_handler.GrpcHandler) - - def test_get_connection_with_no_connections(self, c): - assert c.get_connection("get") is None - - def test_get_connection(self, c, host, port): - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - alias = "default" - - c.connect(alias, host=host, port=port) - - conn_got = c.get_connection(alias) - assert isinstance(conn_got, pymilvus.client.grpc_handler.GrpcHandler) - - def test_get_connection_without_alias(self, c, host, port): - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - alias = DefaultConfig.DEFAULT_USING - - c.connect(alias, host=host, port=port) - - conn_got = c.get_connection() - assert isinstance(conn_got, pymilvus.client.grpc_handler.GrpcHandler) - - def test_get_connection_with_configure_without_add(self, c, configure_params): - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - c.add_connection(**configure_params) - for key, _ in configure_params.items(): - c.connect(key) - conn = c.get_connection(key) - assert isinstance(conn, pymilvus.client.grpc_handler.GrpcHandler) - - def test_get_connection_addr(self, c, host, port): - alias = DefaultConfig.DEFAULT_USING + config = connections.get_connection_addr("test") + assert config.get("address") == f"{host_port['host']}:{host_port['port']}" + assert config.get("user") == host_port['user'] - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - c.connect(host=host, port=port) - - connection_addr = c.get_connection_addr(alias) - assert connection_addr["host"] == host - assert connection_addr["port"] == port - - def test_list_connections(self, c, host, port): - with mock.patch("pymilvus.Milvus.__init__", return_value=None): - c.connect() - - conns = c.list_connections() + add_connection(default=host_port) + config = connections.get_connection_addr("default") + assert config.get("address") == f"{host_port['host']}:{host_port['port']}" + assert config.get("user") == host_port['user'] - assert len(conns) == 1 + connections.remove_connection("test") + connections.disconnect("default") + + def test_add_connection_raise_HostType(self, invalid_host): + add_connection = connections.add_connection + + with pytest.raises(MilvusException) as excinfo: + add_connection(test=invalid_host) + + LOGGER.info(f"Exception info: {excinfo.value}") + assert "Type of 'host' must be str." in excinfo.value.message + assert excinfo.value.code == ErrorCode.UNEXPECTED_ERROR + + def test_add_connection_raise_PortType(self, invalid_port): + add_connection = connections.add_connection + + with pytest.raises(MilvusException) as excinfo: + add_connection(test=invalid_port) + + LOGGER.info(f"Exception info: {excinfo.value}") + assert "Type of 'port' must be str" in excinfo.value.message + assert excinfo.value.code == ErrorCode.UNEXPECTED_ERROR + + @pytest.mark.parametrize("valid_addr", [ + {"address": "127.0.0.1:19530"}, + {"address": "example.com:19530"}, + ]) + def test_add_connection_address(self, valid_addr): + alias = self.test_add_connection_address.__name__ + config = {alias: valid_addr} + connections.add_connection(**config) + + addr = connections.get_connection_addr(alias) + assert addr.get("address") == valid_addr.get("address") + LOGGER.info(f"addr: {addr}") + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) + + @pytest.mark.parametrize("invalid_addr", [ + {"address": "127.0.0.1"}, + {"address": "19530"}, + ]) + def test_add_connection_address_invalid(self, invalid_addr): + alias = self.test_add_connection_address_invalid.__name__ + config = {alias: invalid_addr} + + with pytest.raises(MilvusException) as excinfo: + connections.add_connection(**config) + + LOGGER.info(f"Exception info: {excinfo.value}") + assert "Illegal address" in excinfo.value.message + assert excinfo.value.code == ErrorCode.UNEXPECTED_ERROR + + @pytest.mark.parametrize("valid_uri", [ + {"uri": "http://127.0.0.1:19530"}, + {"uri": "http://localhost:19530"}, + {"uri": "http://example.com:80"}, + {"uri": "http://example.com"}, + ]) + def test_add_connection_uri(self, valid_uri): + alias = self.test_add_connection_uri.__name__ + config = {alias: valid_uri} + connections.add_connection(**config) + + addr = connections.get_connection_addr(alias) + LOGGER.info(f"addr: {addr}") + + host, port = addr["address"].split(':') + assert host in valid_uri['uri'] or host in DefaultConfig.DEFAULT_HOST + assert port in valid_uri['uri'] or port in DefaultConfig.DEFAULT_PORT + LOGGER.info(f"host: {host}, port: {port}") + + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) + + @pytest.mark.parametrize("invalid_uri", [ + {"uri": "http://"}, + {"uri": None}, + {"uri": -1}, + ]) + def test_add_connection_uri_invalid(self, invalid_uri): + alias = self.test_add_connection_uri_invalid.__name__ + config = {alias: invalid_uri} + + with pytest.raises(MilvusException) as excinfo: + connections.add_connection(**config) + + LOGGER.info(f"Exception info: {excinfo.value}") + assert "Illegal uri" in excinfo.value.message + assert excinfo.value.code == ErrorCode.UNEXPECTED_ERROR + + +class TestIssues: + def test_issue_1196(self): + """ + >>> connections.connect(alias="default11", host="xxx.com", port=19541, user="root", password="12345", secure=True) + >>> connections.add_connection(default={"host": "xxx.com", "port": 19541}) + >>> connections.connect("default", user="root", password="12345", secure=True) + Traceback (most recent call last): + File "/usr/local/lib/python3.8/dist-packages/pymilvus/client/grpc_handler.py", line 114, in _wait_for_channel_ready + grpc.channel_ready_future(self._channel).result(timeout=3) + File "/usr/local/lib/python3.8/dist-packages/grpc/_utilities.py", line 139, in result + self._block(timeout) + File "/usr/local/lib/python3.8/dist-packages/grpc/_utilities.py", line 85, in _block + raise grpc.FutureTimeoutError() + grpc.FutureTimeoutError + """ + + alias = self.test_issue_1196.__name__ + + with mock.patch(f"{mock_prefix}.__init__", return_value=None), mock.patch(f"{mock_prefix}._wait_for_channel_ready", return_value=None): + config = {"alias": alias, "host": "localhost", "port": "19531", "user": "root", "password": 12345, "secure": True} + connections.connect(**config, keep_alive=False) + config = connections.get_connection_addr(alias) + assert config == {"address": 'localhost:19531', "user": 'root', "secure": True} + + connections.add_connection(default={"host": "localhost", "port": 19531}) + config = connections.get_connection_addr("default") + assert config == {"address": 'localhost:19531', "user": ""} + + connections.connect("default", user="root", password="12345", secure=True, keep_alive=False) + + config = connections.get_connection_addr("default") + assert config == {"address": 'localhost:19531', "user": 'root', "secure": True} + + @pytest.mark.parametrize("uri, db_name, expected_db_name", [ + # Issue #2670: URI ending with slash should not overwrite explicit db_name + ("http://localhost:19530/", "test_db", "test_db"), + ("https://localhost:19530/", "production_db", "production_db"), + ("tcp://localhost:19530/", "test_db", "test_db"), + + # Issue #2727: db_name passed in URI path should be used when no explicit db_name + ("http://localhost:19530/test_db", "", "test_db"), + ("http://localhost:19530/production_db", "", "production_db"), + ("https://localhost:19530/test_db", "", "test_db"), + + # Mixed scenarios: explicit db_name takes precedence over URI path + ("http://localhost:19530/uri_db", "explicit_db", "explicit_db"), + ("http://localhost:19530", "test_db", "test_db"), + ("http://localhost:19530", "", "default"), + + # Multiple path segments - only first should be used as db_name + ("http://localhost:19530/db1/collection1", "", "db1"), + ("http://localhost:19530/db1/collection1/", "", "db1"), + + # Empty path segments should be handled correctly + ("http://localhost:19530//", "test_db", "test_db"), + ("http://localhost:19530///", "test_db", "test_db"), + ]) + def test_issue_2670_2727(self, uri: str, db_name: str, expected_db_name: str): + """ + Issue 2670: + Test for db_name being overwritten with empty string, when the uri + ends in a slash - e.g. http://localhost:19530/ + + See: https://github.com/milvus-io/pymilvus/issues/2670 + + Actual behaviour before fix: if a uri is passed ending with a slash, + it will overwrite the db_name with an empty string. + Expected and current behaviour: if db_name is passed explicitly, + it should be used in the initialization of the GrpcHandler. + + Issue 2727: + If db_name is passed as a path to the uri and not explicitly passed as an argument, + it is not overwritten with an empty string. + + See: https://github.com/milvus-io/pymilvus/issues/2727 + + Actual behaviour before fix: if db_name is passed as a path to the uri, + it will overwrite the db_name with an empty string. + Expected and current behaviour: if db_name is passed as a path to the uri, + it should be used in the initialization of the GrpcHandler. + """ + alias = f"test_2670_2727_{uri.replace('://', '_').replace('/', '_')}_{db_name}" + + with mock.patch(f"{mock_prefix}.__init__", return_value=None) as mock_init, mock.patch( + f"{mock_prefix}._wait_for_channel_ready", return_value=None): + config = {"alias": alias, "uri": uri} + # Always pass db_name parameter, even if it's an empty string + if db_name or db_name == "": # Pass both empty and non-empty strings + config["db_name"] = db_name + connections.connect(**config, keep_alive=False) + + # Verify that GrpcHandler was initialized with the correct db_name + mock_init.assert_called_once() + call_args = mock_init.call_args + actual_db_name = call_args.kwargs.get("db_name", "default") + + assert actual_db_name == expected_db_name, ( + f"Expected db_name to be '{expected_db_name}', " + f"but got '{actual_db_name}' for uri='{uri}' and db_name='{db_name}'" + ) + + # Clean up - mock the close method to avoid AttributeError + with mock.patch(f"{mock_prefix}.close", return_value=None): + connections.remove_connection(alias) diff --git a/tests/test_create_collection.py b/tests/test_create_collection.py deleted file mode 100644 index 8ddd47490..000000000 --- a/tests/test_create_collection.py +++ /dev/null @@ -1,103 +0,0 @@ -import grpc -import grpc_testing -import pytest -import random - -from pymilvus.grpc_gen import milvus_pb2, schema_pb2, common_pb2 -from pymilvus import Milvus, DataType - - -class Fields: - class NormalizedField: - def __init__(self, **kwargs): - self.name = kwargs.get("name", None) - self.is_primary_key = kwargs.get("is_primary_key", False) - self.data_type = kwargs.get("data_type", None) - self.type_params = kwargs.get("type_params", dict()) - self.autoID = kwargs.get("autoID", False) - - def __eq__(self, other): - if isinstance(other, Fields.NormalizedField): - return self.name == other.name and \ - self.is_primary_key == other.is_primary_key and \ - self.data_type == other.data_type and \ - self.type_params == other.type_params and \ - self.autoID == other.autoID - return False - - def __repr__(self): - dump = f"(name: {self.name}" - dump += f", id_primary_key:{self.is_primary_key}" - dump += f", data_type:{self.data_type}" - dump += f", type_params:{self.type_params}" - dump += f", autoID:{self.autoID})" - return dump - - @classmethod - def equal(cls, grpc_fields, dict_fields): - n_grpc_fields = { - field.name: Fields.NormalizedField(name=field.name, - is_primary_key=field.is_primary_key, - data_type=field.data_type, - type_params={pair.key: pair.value for pair in field.type_params}, - autoID=field.autoID - ) - for field in grpc_fields} - n_dict_fields = { - field["name"]: Fields.NormalizedField(name=field["name"], - is_primary_key=field.get("is_primary", False), - data_type=field["type"], - type_params=field.get("params", dict()), - autoID=field.get("auto_id", False) - ) - for field in dict_fields - } - return n_grpc_fields == n_dict_fields - - -class TestCreateCollection: - @pytest.fixture(scope="function") - def collection_name(self): - return f"test_collection_{random.randint(100000, 999999)}" - - def setup(self) -> None: - self._real_time = grpc_testing.strict_real_time() - self._real_time_channel = grpc_testing.channel( - milvus_pb2.DESCRIPTOR.services_by_name.values(), self._real_time) - self._servicer = milvus_pb2.DESCRIPTOR.services_by_name['MilvusService'] - self._milvus = Milvus(channel=self._real_time_channel) - - def teardown(self) -> None: - pass - - def test_create_collection(self, collection_name): - id_field = { - "name": "my_id", - "type": DataType.INT64, - "auto_id": True, - "is_primary": True, - } - vector_field = { - "name": "embedding", - "type": DataType.FLOAT_VECTOR, - "metric_type": "L2", - "params": {"dim": "4"}, - } - fields = {"fields": [id_field, vector_field]} - future = self._milvus.create_collection(collection_name=collection_name, fields=fields, _async=True) - - invocation_metadata, request, rpc = self._real_time_channel.take_unary_unary( - self._servicer.methods_by_name['CreateCollection'] - ) - rpc.send_initial_metadata(()) - rpc.terminate(common_pb2.Status(error_code=common_pb2.Success, reason="success"), (), grpc.StatusCode.OK, '') - - request_schema = schema_pb2.CollectionSchema() - request_schema.ParseFromString(request.schema) - - assert request.collection_name == collection_name - assert Fields.equal(request_schema.fields, fields["fields"]) - - return_value = future.result() - assert return_value.error_code == common_pb2.Success - assert return_value.reason == "success" diff --git a/tests/test_decorators.py b/tests/test_decorators.py new file mode 100644 index 000000000..f8f60145c --- /dev/null +++ b/tests/test_decorators.py @@ -0,0 +1,331 @@ +import time +from unittest.mock import patch + +import grpc +import pytest +from pymilvus.decorators import IGNORE_RETRY_CODES, error_handler, retry_on_rpc_failure +from pymilvus.exceptions import ErrorCode, MilvusException +from pymilvus.grpc_gen import common_pb2 + + +class TestDecorators: + def mock_failure(self, code: grpc.StatusCode): + if code in IGNORE_RETRY_CODES: + raise MockUnRetriableError(code) + if code == MockUnavailableError().code(): + raise MockUnavailableError + if code == MockDeadlineExceededError().code(): + raise MockDeadlineExceededError + + def mock_milvus_exception(self, code: ErrorCode): + if code == ErrorCode.FORCE_DENY: + raise MockForceDenyError + if code == ErrorCode.RATE_LIMIT: + raise MockRateLimitError + raise MilvusException(ErrorCode.UNEXPECTED_ERROR, "unexpected error") + + @pytest.mark.parametrize("times", [0, 1, 2, 3]) + def test_retry_decorators_unavailable(self, times): + self.count_test_retry_decorators_Unavailable = 0 + + @retry_on_rpc_failure(retry_times=times) + def test_api(self, code): + self.count_test_retry_decorators_Unavailable += 1 + self.mock_failure(code) + + with pytest.raises(MilvusException, match="unavailable"): + test_api(self, grpc.StatusCode.UNAVAILABLE) + + # the first execute + retry times + assert self.count_test_retry_decorators_Unavailable == times + 1 + + def test_retry_decorators_timeout(self): + self.count_test_retry_decorators_timeout = 0 + + @retry_on_rpc_failure() + def test_api(self, code, timeout=None): + self.count_test_retry_decorators_timeout += 1 + time.sleep(1) + self.mock_failure(code) + + with pytest.raises(MilvusException): + test_api(self, grpc.StatusCode.UNAVAILABLE, timeout=1) + + assert self.count_test_retry_decorators_timeout == 1 + + @pytest.mark.skip("Do not open this unless you have loads of time, get some coffee and wait") + def test_retry_decorators_default_behaviour(self): + self.test_retry_decorators_default_retry_times = 0 + + @retry_on_rpc_failure() + def test_api(self, code): + self.test_retry_decorators_default_retry_times += 1 + self.mock_failure(code) + + with pytest.raises(MilvusException): + test_api(self, grpc.StatusCode.UNAVAILABLE) + + assert self.test_retry_decorators_default_retry_times == 7 + 1 + + def test_retry_decorators_force_deny(self): + self.execute_times = 0 + + @retry_on_rpc_failure() + def test_api(self, code): + self.execute_times += 1 + self.mock_milvus_exception(code) + + with pytest.raises(MilvusException, match="force deny"): + test_api(self, ErrorCode.FORCE_DENY) + + # the first execute + 0 retry times + assert self.execute_times == 1 + + def test_retry_decorators_set_retry_times(self): + self.count_retry_times = 0 + + @retry_on_rpc_failure() + def test_api(self, code, retry_on_rate_limit, **kwargs): + self.count_retry_times += 1 + self.mock_milvus_exception(code) + + with pytest.raises(MilvusException): + test_api(self, ErrorCode.RATE_LIMIT, retry_on_rate_limit=True, retry_times=3) + + # the first execute + 0 retry times + assert self.count_retry_times == 3 + 1 + + @pytest.mark.parametrize("times", [0, 1, 2, 3]) + def test_retry_decorators_rate_limit_without_retry(self, times): + self.count_test_retry_decorators_force_deny = 0 + + @retry_on_rpc_failure(retry_times=times) + def test_api(self, code, retry_on_rate_limit): + self.count_test_retry_decorators_force_deny += 1 + self.mock_milvus_exception(code) + + with pytest.raises(MilvusException, match="rate limit"): + test_api(self, ErrorCode.RATE_LIMIT, retry_on_rate_limit=False) + + # the first execute + 0 retry times + assert self.count_test_retry_decorators_force_deny == 1 + + @pytest.mark.parametrize("times", [0, 1, 2, 3]) + def test_retry_decorators_rate_limit_with_retry(self, times): + self.count_test_retry_decorators_force_deny = 0 + + @retry_on_rpc_failure(retry_times=times) + def test_api(self, code, retry_on_rate_limit): + self.count_test_retry_decorators_force_deny += 1 + self.mock_milvus_exception(code) + + with pytest.raises(MilvusException, match="rate limit"): + test_api(self, ErrorCode.RATE_LIMIT, retry_on_rate_limit=True) + + # the first execute + retry times + assert self.count_test_retry_decorators_force_deny == times + 1 + + @pytest.mark.parametrize("code", IGNORE_RETRY_CODES) + def test_donot_retry_codes(self, code): + self.count_test_donot_retry = 0 + + @retry_on_rpc_failure() + def test_api(self, code): + self.count_test_donot_retry += 1 + self.mock_failure(code) + + with pytest.raises(grpc.RpcError): + test_api(self, code) + + # no retry + assert self.count_test_donot_retry == 1 + + +class MockUnavailableError(grpc.RpcError): + def code(self): + return grpc.StatusCode.UNAVAILABLE + + def details(self): + return "details of unavailable" + + +class MockDeadlineExceededError(grpc.RpcError): + def code(self): + return grpc.StatusCode.DEADLINE_EXCEEDED + + def details(self): + return "details of deadline exceeded" + + +class MockForceDenyError(MilvusException): + def __init__(self, code=ErrorCode.FORCE_DENY, message="force deny"): + super(MilvusException, self).__init__(message) + self._code = code + self._message = message + self._compatible_code = common_pb2.ForceDeny + + @property + def code(self): + return self._code + + @property + def message(self): + return self._message + + @property + def compatible_code(self): + return self._compatible_code + + +class MockRateLimitError(MilvusException): + def __init__(self, code=ErrorCode.RATE_LIMIT, message="rate limit"): + super(MilvusException, self).__init__(message) + self._code = code + self._message = message + self._compatible_code = common_pb2.RateLimit + + @property + def code(self): + return self._code + + @property + def message(self): + return self._message + + @property + def compatible_code(self): + return self._compatible_code + +class MockUnRetriableError(grpc.RpcError): + def __init__(self, code: grpc.StatusCode, message="unretriable error"): + self._code = code + + def code(self): + return self._code + + def details(self): + return "details of unretriable error" + + +class TestErrorHandlerTraceback: + """Test the traceback functionality in error_handler decorator.""" + + @patch("pymilvus.decorators.LOGGER") + def test_error_handler_includes_traceback_for_milvus_exception(self, mock_logger): + """Test that error_handler logs traceback for MilvusException.""" + + @error_handler(func_name="test_func") + def func_that_raises_milvus_exception(): + def inner_func(): + raise MilvusException(ErrorCode.UNEXPECTED_ERROR, "test error") + + inner_func() + + with pytest.raises(MilvusException): + func_that_raises_milvus_exception() + + # Verify LOGGER.error was called + assert mock_logger.error.called + # Get the logged message + log_message = mock_logger.error.call_args[0][0] + # Check that traceback information is in the log message + assert "Traceback:" in log_message + assert "inner_func" in log_message + assert "test_func" in log_message + + @patch("pymilvus.decorators.LOGGER") + def test_error_handler_includes_traceback_for_grpc_error(self, mock_logger): + """Test that error_handler logs traceback for grpc.RpcError.""" + + @error_handler(func_name="test_grpc_func") + def func_that_raises_grpc_error(): + def inner_func(): + raise MockUnavailableError() + + inner_func() + + with pytest.raises(grpc.RpcError): + func_that_raises_grpc_error() + + # Verify LOGGER.error was called + assert mock_logger.error.called + # Get the logged message + log_message = mock_logger.error.call_args[0][0] + # Check that traceback information is in the log message + assert "Traceback:" in log_message + assert "inner_func" in log_message + assert "test_grpc_func" in log_message + + @patch("pymilvus.decorators.LOGGER") + def test_error_handler_includes_traceback_for_generic_exception(self, mock_logger): + """Test that error_handler logs traceback for generic Exception.""" + + @error_handler(func_name="test_generic_func") + def func_that_raises_generic_exception(): + def inner_func(): + raise ValueError("test generic error") + + inner_func() + + with pytest.raises(MilvusException): + func_that_raises_generic_exception() + + # Verify LOGGER.error was called + assert mock_logger.error.called + # Get the logged message + log_message = mock_logger.error.call_args[0][0] + # Check that traceback information is in the log message + assert "Traceback:" in log_message + assert "inner_func" in log_message + assert "ValueError" in log_message + + @patch("pymilvus.decorators.LOGGER") + def test_error_handler_traceback_shows_call_stack(self, mock_logger): + """Test that traceback shows the complete call stack.""" + + @error_handler(func_name="outer_func") + def outer_function(): + def middle_function(): + def inner_function(): + raise MilvusException(ErrorCode.UNEXPECTED_ERROR, "deep error") + + inner_function() + + middle_function() + + with pytest.raises(MilvusException): + outer_function() + + # Verify LOGGER.error was called + assert mock_logger.error.called + # Get the logged message + log_message = mock_logger.error.call_args[0][0] + # Verify the complete call stack is present + assert "Traceback:" in log_message + assert "outer_function" in log_message + assert "middle_function" in log_message + assert "inner_function" in log_message + + @pytest.mark.asyncio + @patch("pymilvus.decorators.LOGGER") + async def test_async_error_handler_includes_traceback(self, mock_logger): + """Test that async error_handler logs traceback.""" + + @error_handler(func_name="test_async_func") + async def async_func_that_raises(): + def inner_func(): + raise MilvusException(ErrorCode.UNEXPECTED_ERROR, "async test error") + + inner_func() + + with pytest.raises(MilvusException): + await async_func_that_raises() + + # Verify LOGGER.error was called + assert mock_logger.error.called + # Get the logged message + log_message = mock_logger.error.call_args[0][0] + # Check that traceback information is in the log message + assert "Traceback:" in log_message + assert "inner_func" in log_message + assert "test_async_func" in log_message diff --git a/tests/test_grpc_handler.py b/tests/test_grpc_handler.py new file mode 100644 index 000000000..f032b3987 --- /dev/null +++ b/tests/test_grpc_handler.py @@ -0,0 +1,907 @@ +from typing import Any +from unittest.mock import MagicMock, patch + +import grpc +import pytest +from pymilvus import CollectionSchema, FieldSchema, MilvusException +from pymilvus.client.grpc_handler import GrpcHandler +from pymilvus.exceptions import ParamError +from pymilvus.grpc_gen import common_pb2, milvus_pb2 +from pymilvus.orm.types import DataType + +descriptor = milvus_pb2.DESCRIPTOR.services_by_name["MilvusService"] + + +class TestGrpcHandler: + @pytest.mark.parametrize("has", [True, False]) + def test_has_collection_no_error(self, channel, client_thread, has): + handler = GrpcHandler(channel=channel) + + has_collection_future = client_thread.submit(handler.has_collection, "fake") + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DescribeCollection"] + ) + rpc.send_initial_metadata(()) + + reason = "" if has else "can't find collection" + code = 0 if has else 100 + + expected_result = milvus_pb2.DescribeCollectionResponse( + status=common_pb2.Status(code=code, reason=reason), + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + got_result = has_collection_future.result() + assert got_result is has + + def test_has_collection_error(self, channel, client_thread): + handler = GrpcHandler(channel=channel) + + has_collection_future = client_thread.submit(handler.has_collection, "fake") + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DescribeCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.DescribeCollectionResponse( + status=common_pb2.Status(code=1, reason="other reason"), + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + has_collection_future.result() + + def test_has_collection_Unavailable_exception(self, channel, client_thread): + handler = GrpcHandler(channel=channel) + channel.close() + + # Retry is unable to test + has_collection_future = client_thread.submit(handler.has_collection, "fake", timeout=0) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DescribeCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.DescribeCollectionResponse() + + rpc.terminate(expected_result, (), grpc.StatusCode.UNAVAILABLE, "server Unavailable") + + with pytest.raises(MilvusException): + has_collection_future.result() + + def test_get_server_version_error(self, channel, client_thread): + handler = GrpcHandler(channel=channel) + + get_version_future = client_thread.submit(handler.get_server_version) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["GetVersion"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.GetVersionResponse( + status=common_pb2.Status(code=1, reason="unexpected error"), + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + get_version_future.result() + + def test_get_server_version(self, channel, client_thread): + version = "2.2.0" + handler = GrpcHandler(channel=channel) + + get_version_future = client_thread.submit(handler.get_server_version) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["GetVersion"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.GetVersionResponse( + status=common_pb2.Status(code=0), + version=version, + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + got_result = get_version_future.result() + assert got_result == version + + @pytest.mark.parametrize("_async", [True]) + def test_flush_all(self, channel, client_thread, _async): + handler = GrpcHandler(channel=channel) + + flush_all_future = client_thread.submit(handler.flush_all, _async=_async, timeout=10) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["FlushAll"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.FlushAllResponse( + status=common_pb2.Status(code=0), + flush_all_ts=100, + ) + + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + assert flush_all_future is not None + + def test_get_flush_all_state(self, channel, client_thread): + handler = GrpcHandler(channel=channel) + + flushed = client_thread.submit(handler.get_flush_all_state, flush_all_ts=100) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["GetFlushAllState"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.GetFlushStateResponse( + status=common_pb2.Status(code=0), + flushed=True, + ) + + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + assert flushed.result() is True + + +class TestGrpcHandlerInitialization: + def test_init_with_uri(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler(uri="http://localhost:19530") + assert handler.server_address == "localhost:19530" + + def test_init_with_host_port(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler(host="localhost", port="19530") + assert handler.server_address == "localhost:19530" + + def test_init_with_secure_connection(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.secure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler(uri="http://localhost:19530", secure=True) + assert handler.server_address == "localhost:19530" + + def test_init_with_invalid_secure_param(self) -> None: + with pytest.raises(ParamError, match="secure must be bool type"): + GrpcHandler(uri="http://localhost:19530", secure="not_bool") + + def test_init_with_authorization(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler( + uri="http://localhost:19530", + user="test_user", + password="test_password" + ) + assert handler.server_address == "localhost:19530" + + def test_init_with_token(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler( + uri="http://localhost:19530", + token="test_token" + ) + assert handler.server_address == "localhost:19530" + + def test_init_with_db_name(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler( + uri="http://localhost:19530", + db_name="test_db" + ) + assert handler.server_address == "localhost:19530" + + def test_get_server_type(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler(uri="http://localhost:19530") + # get_server_type will return 'milvus' for localhost + server_type = handler.get_server_type() + assert server_type == "milvus" + + +class TestGrpcHandlerStateManagement: + def test_register_state_change_callback(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_ch = MagicMock() + mock_channel.return_value = mock_ch + handler = GrpcHandler(uri="http://localhost:19530") + + def callback(state: Any) -> None: + pass + + handler.register_state_change_callback(callback) + assert callback in handler.callbacks + mock_ch.subscribe.assert_called_once_with(callback, try_to_connect=True) + + def test_deregister_state_change_callbacks(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_ch = MagicMock() + mock_channel.return_value = mock_ch + handler = GrpcHandler(uri="http://localhost:19530") + + def callback(state: Any) -> None: + pass + + handler.register_state_change_callback(callback) + handler.deregister_state_change_callbacks() + + assert len(handler.callbacks) == 0 + mock_ch.unsubscribe.assert_called_once_with(callback) + + def test_close(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_ch = MagicMock() + mock_channel.return_value = mock_ch + handler = GrpcHandler(uri="http://localhost:19530") + + # Register a callback first + def callback(state: Any) -> None: + pass + handler.register_state_change_callback(callback) + + handler.close() + # Verify close was called on the channel + mock_ch.close.assert_called_once() + + def test_reset_db_name(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler(uri="http://localhost:19530") + + # Add some dummy data to schema_cache + handler.schema_cache["test_collection"] = {"field": "value"} + + with patch.object(handler, '_setup_identifier_interceptor'): + handler.reset_db_name("new_db") + + assert len(handler.schema_cache) == 0 + + def test_set_onetime_loglevel(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_channel.return_value = MagicMock() + handler = GrpcHandler(uri="http://localhost:19530") + + # Test passes if no exception is raised + handler.set_onetime_loglevel("DEBUG") + + def test_wait_for_channel_ready_success(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_ch = MagicMock() + mock_channel.return_value = mock_ch + handler = GrpcHandler(uri="http://localhost:19530") + + with patch('pymilvus.client.grpc_handler.grpc.channel_ready_future') as mock_future: + mock_result = MagicMock() + mock_result.result.return_value = None + mock_future.return_value = mock_result + + with patch.object(handler, '_setup_identifier_interceptor'): + handler._wait_for_channel_ready(timeout=10) + + mock_future.assert_called_once_with(mock_ch) + + def test_wait_for_channel_ready_timeout(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.insecure_channel') as mock_channel: + mock_ch = MagicMock() + mock_channel.return_value = mock_ch + handler = GrpcHandler(uri="http://localhost:19530") + + with patch('pymilvus.client.grpc_handler.grpc.channel_ready_future') as mock_future: + mock_result = MagicMock() + mock_result.result.side_effect = grpc.FutureTimeoutError() + mock_future.return_value = mock_result + + with pytest.raises(MilvusException) as exc_info: + handler._wait_for_channel_ready(timeout=10) + + assert "Fail connecting to server" in str(exc_info.value) + + def test_wait_for_channel_ready_no_channel(self) -> None: + handler = GrpcHandler(channel=None) + # Manually set channel to None to test the error case + handler._channel = None + + with pytest.raises(MilvusException) as exc_info: + handler._wait_for_channel_ready() + + assert "No channel in handler" in str(exc_info.value) + + +class TestGrpcHandlerCollectionOperations: + def test_create_collection_sync(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + schema = CollectionSchema([ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128) + ]) + + create_future = client_thread.submit( + handler.create_collection, + collection_name="test_collection", + fields=schema, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["CreateCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = create_future.result() + assert result is None + + def test_create_collection_async(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + schema = CollectionSchema([ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128) + ]) + + create_future = client_thread.submit( + handler.create_collection, + collection_name="test_collection", + fields=schema, + timeout=10, + _async=True + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["CreateCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = create_future.result() + assert result is not None # Should return a future object + + def test_drop_collection(self, channel: Any, client_thread: Any) -> None: + """Test drop_collection""" + handler = GrpcHandler(channel=channel) + + drop_future = client_thread.submit( + handler.drop_collection, + collection_name="test_collection", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DropCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = drop_future.result() + assert result is None + + def test_add_collection_field(self, channel: Any, client_thread: Any) -> None: + """Test add_collection_field""" + handler = GrpcHandler(channel=channel) + + field_schema = FieldSchema(name="new_field", dtype=DataType.INT64) + + add_field_future = client_thread.submit( + handler.add_collection_field, + collection_name="test_collection", + field_schema=field_schema, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["AddCollectionField"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = add_field_future.result() + assert result is None + + def test_alter_collection_properties(self, channel: Any, client_thread: Any) -> None: + """Test alter_collection_properties""" + handler = GrpcHandler(channel=channel) + + properties = {"prop1": "value1", "prop2": "value2"} + + alter_future = client_thread.submit( + handler.alter_collection_properties, + collection_name="test_collection", + properties=properties, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["AlterCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = alter_future.result() + assert result is None + + def test_alter_collection_field_properties(self, channel: Any, client_thread: Any) -> None: + """Test alter_collection_field_properties""" + handler = GrpcHandler(channel=channel) + + field_params = {"param1": "value1"} + + alter_field_future = client_thread.submit( + handler.alter_collection_field_properties, + collection_name="test_collection", + field_name="test_field", + field_params=field_params, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["AlterCollectionField"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = alter_field_future.result() + assert result is None + + def test_drop_collection_properties(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + property_keys = ["prop1", "prop2"] + + drop_props_future = client_thread.submit( + handler.drop_collection_properties, + collection_name="test_collection", + property_keys=property_keys, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["AlterCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = drop_props_future.result() + assert result is None + + def test_has_collection_compatibility(self, channel: Any, client_thread: Any) -> None: + """Test has_collection with Milvus < 2.3.2 compatibility""" + handler = GrpcHandler(channel=channel) + + has_collection_future = client_thread.submit(handler.has_collection, "fake") + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DescribeCollection"] + ) + rpc.send_initial_metadata(()) + + # Test compatibility with older Milvus versions + expected_result = milvus_pb2.DescribeCollectionResponse( + status=common_pb2.Status( + error_code=common_pb2.UnexpectedError, + reason="can't find collection fake" + ), + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + got_result = has_collection_future.result() + assert got_result is False + + +class TestGrpcHandlerPasswordReset: + def test_reset_password(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + with patch.object(handler, 'update_password') as mock_update: + with patch.object(handler, '_setup_authorization_interceptor') as mock_auth: + with patch.object(handler, '_setup_grpc_channel') as mock_setup: + handler.reset_password( + user="test_user", + old_password="old_pass", + new_password="new_pass", + timeout=10 + ) + + mock_update.assert_called_once_with( + "test_user", "old_pass", "new_pass", timeout=10 + ) + mock_auth.assert_called_once_with("test_user", "new_pass", None) + mock_setup.assert_called_once() + + +class TestGrpcHandlerSecureConnection: + def test_setup_grpc_channel_with_tls(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.secure_channel') as mock_secure: + with patch('pymilvus.client.grpc_handler.grpc.ssl_channel_credentials') as mock_creds: + with patch('pymilvus.client.grpc_handler.Path') as mock_path: + # Mock file reading + mock_file = MagicMock() + mock_file.read.return_value = b"cert_content" + mock_path.return_value.open.return_value.__enter__.return_value = mock_file + + mock_secure.return_value = MagicMock() + mock_creds.return_value = MagicMock() + + GrpcHandler( + uri="http://localhost:19530", + secure=True, + server_pem_path="/path/to/server.pem" + ) + + # Verify secure channel was created + mock_creds.assert_called_once() + mock_secure.assert_called_once() + + def test_setup_grpc_channel_with_client_certs(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.secure_channel') as mock_secure: + with patch('pymilvus.client.grpc_handler.grpc.ssl_channel_credentials') as mock_creds: + with patch('pymilvus.client.grpc_handler.Path') as mock_path: + # Mock file reading + mock_file = MagicMock() + mock_file.read.return_value = b"cert_content" + mock_path.return_value.open.return_value.__enter__.return_value = mock_file + + mock_secure.return_value = MagicMock() + mock_creds.return_value = MagicMock() + + GrpcHandler( + uri="http://localhost:19530", + secure=True, + client_pem_path="/path/to/client.pem", + client_key_path="/path/to/client.key", + ca_pem_path="/path/to/ca.pem" + ) + + # Verify secure channel was created + mock_creds.assert_called_once() + mock_secure.assert_called_once() + + def test_setup_grpc_channel_with_server_name_override(self) -> None: + with patch('pymilvus.client.grpc_handler.grpc.secure_channel') as mock_secure: + with patch('pymilvus.client.grpc_handler.grpc.ssl_channel_credentials') as mock_creds: + mock_secure.return_value = MagicMock() + mock_creds.return_value = MagicMock() + + GrpcHandler( + uri="http://localhost:19530", + secure=True, + server_name="custom.server.name" + ) + + # Check that the server name override was added to options + call_args = mock_secure.call_args + options = call_args[1]['options'] + assert any( + opt[0] == "grpc.ssl_target_name_override" and opt[1] == "custom.server.name" + for opt in options + ) + + +class TestGrpcHandlerListAndRenameOperations: + @pytest.mark.parametrize("result", [["collection1", "collection2", "collection3"], []]) + def test_list_collections(self, channel: grpc.Channel, client_thread: Any, result) -> None: + handler = GrpcHandler(channel=channel) + + list_future = client_thread.submit(handler.list_collections, timeout=10) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["ShowCollections"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.ShowCollectionsResponse( + status=common_pb2.Status(code=0), + collection_names=result + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + assert list_future.result() == result + + def test_list_collections_error(self, channel: grpc.Channel, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + list_future = client_thread.submit(handler.list_collections, timeout=10) + + (_, _, rpc) = channel.take_unary_unary(descriptor.methods_by_name["ShowCollections"]) + rpc.send_initial_metadata(()) + + rpc.terminate( + milvus_pb2.ShowCollectionsResponse(status=common_pb2.Status(code=1, reason="Internal error")), + (), + grpc.StatusCode.OK, + "", + ) + + with pytest.raises(MilvusException): + list_future.result() + + def test_rename_collections(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + rename_future = client_thread.submit( + handler.rename_collections, + old_name="old_collection", + new_name="new_collection", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["RenameCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = rename_future.result() + assert result is None + + def test_rename_collections_with_new_db(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + rename_future = client_thread.submit( + handler.rename_collections, + old_name="old_collection", + new_name="new_collection", + new_db_name="new_database", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["RenameCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = rename_future.result() + assert result is None + + def test_rename_collections_error(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + rename_future = client_thread.submit( + handler.rename_collections, + old_name="old_collection", + new_name="new_collection", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["RenameCollection"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=1, reason="Collection already exists") + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + rename_future.result() + + +class TestGrpcHandlerPartitionOperations: + def test_create_partition(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + create_future = client_thread.submit( + handler.create_partition, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["CreatePartition"] + ) + rpc.send_initial_metadata(()) + rpc.terminate(common_pb2.Status(code=0), (), grpc.StatusCode.OK, "") + + result = create_future.result() + assert result is None + + def test_create_partition_error(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + create_future = client_thread.submit( + handler.create_partition, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["CreatePartition"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=1, reason="Partition already exists") + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + create_future.result() + + def test_drop_partition(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + drop_future = client_thread.submit( + handler.drop_partition, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DropPartition"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = drop_future.result() + assert result is None + + def test_drop_partition_error(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + drop_future = client_thread.submit( + handler.drop_partition, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["DropPartition"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=1, reason="Partition not found") + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + drop_future.result() + + @pytest.mark.parametrize("has", [True, False]) + def test_has_partition(self, channel: Any, client_thread: Any, has: bool) -> None: + handler = GrpcHandler(channel=channel) + + has_future = client_thread.submit( + handler.has_partition, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["HasPartition"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.BoolResponse( + status=common_pb2.Status(code=0), + value=has + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = has_future.result() + assert result == has + + def test_has_partition_error(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + has_future = client_thread.submit( + handler.has_partition, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["HasPartition"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.BoolResponse( + status=common_pb2.Status(code=1, reason="Internal error") + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + has_future.result() + + def test_list_partitions(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + list_future = client_thread.submit( + handler.list_partitions, + collection_name="test_collection", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["ShowPartitions"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.ShowPartitionsResponse( + status=common_pb2.Status(code=0), + partition_names=["_default", "partition1", "partition2"] + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = list_future.result() + assert result == ["_default", "partition1", "partition2"] + + def test_list_partitions_empty(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + list_future = client_thread.submit( + handler.list_partitions, + collection_name="test_collection", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["ShowPartitions"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.ShowPartitionsResponse( + status=common_pb2.Status(code=0), + partition_names=[] + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = list_future.result() + assert result == [] + + def test_get_partition_stats(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + stats_future = client_thread.submit( + handler.get_partition_stats, + collection_name="test_collection", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["GetPartitionStatistics"] + ) + rpc.send_initial_metadata(()) + + stats = [ + common_pb2.KeyValuePair(key="row_count", value="1000") + ] + expected_result = milvus_pb2.GetPartitionStatisticsResponse( + status=common_pb2.Status(code=0), + stats=stats + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = stats_future.result() + assert result == stats diff --git a/tests/test_grpc_handler_mutations.py b/tests/test_grpc_handler_mutations.py new file mode 100644 index 000000000..76fd5fff4 --- /dev/null +++ b/tests/test_grpc_handler_mutations.py @@ -0,0 +1,643 @@ +import logging +from typing import Any +from unittest.mock import patch + +import grpc +import pytest +from pymilvus import MilvusException +from pymilvus.client.abstract import AnnSearchRequest, MutationResult, WeightedRanker +from pymilvus.client.asynch import MutationFuture, SearchFuture +from pymilvus.client.grpc_handler import GrpcHandler +from pymilvus.client.search_result import SearchResult +from pymilvus.grpc_gen import common_pb2, milvus_pb2, schema_pb2 +from pymilvus.orm.types import DataType + +log = logging.getLogger(__name__) + +descriptor = milvus_pb2.DESCRIPTOR.services_by_name["MilvusService"] + + +class TestGrpcHandlerInsertOperations: + def test_insert_rows(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + # Mock the schema + with patch.object(handler, 'describe_collection') as mock_describe: + mock_describe.return_value = { + "fields": [ + {"name": "id", "type": DataType.INT64}, + {"name": "vector", "type": DataType.FLOAT_VECTOR, "params": {"dim": 128}} + ], + "enable_dynamic_field": False, + "update_timestamp": 0 + } + + entities = [ + {"id": 1, "vector": [0.1] * 128}, + {"id": 2, "vector": [0.2] * 128} + ] + + insert_future = client_thread.submit( + handler.insert_rows, + collection_name="test_collection", + entities=entities, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Insert"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + IDs=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1, 2])), + insert_cnt=2, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = insert_future.result() + log.warning(f"result = {result}, type={type(result)}") + assert isinstance(result, MutationResult) + + def test_insert_rows_single_entity(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + with patch.object(handler, 'describe_collection') as mock_describe: + mock_describe.return_value = { + "fields": [ + {"name": "id", "type": DataType.INT64} + ], + "enable_dynamic_field": False, + "update_timestamp": 0 + } + + entity = {"id": 1} + + insert_future = client_thread.submit( + handler.insert_rows, + collection_name="test_collection", + entities=entity, # Single dict instead of list + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Insert"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + IDs=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1])), + insert_cnt=1, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = insert_future.result() + assert isinstance(result, MutationResult) + + def test_insert_rows_schema_mismatch(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + with patch.object(handler, 'describe_collection') as mock_describe: + mock_describe.return_value = { + "fields": [ + {"name": "id", "type": DataType.INT64} + ], + } + + entities = [{"id": 1}] + + insert_future = client_thread.submit( + handler.insert_rows, + collection_name="test_collection", + entities=entities, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Insert"] + ) + rpc.send_initial_metadata(()) + + # Return schema mismatch error + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status( + error_code=common_pb2.SchemaMismatch, + reason="Schema mismatch" + ) + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + # Should trigger recursive call with updated schema + (invocation_metadata2, request2, rpc2) = channel.take_unary_unary( + descriptor.methods_by_name["Insert"] + ) + rpc2.send_initial_metadata(()) + + expected_result2 = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + IDs=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1])), + insert_cnt=1, + timestamp=100 + ) + rpc2.terminate(expected_result2, (), grpc.StatusCode.OK, "") + + result = insert_future.result() + assert isinstance(result, MutationResult) + + +class TestGrpcHandlerDeleteAndUpsertOperations: + def test_delete(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + delete_future = client_thread.submit( + handler.delete, + collection_name="test_collection", + expression="id in [1, 2, 3]", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Delete"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + delete_cnt=3, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = delete_future.result() + assert isinstance(result, MutationResult) + + def test_delete_with_partition(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + delete_future = client_thread.submit( + handler.delete, + collection_name="test_collection", + expression="id > 10", + partition_name="test_partition", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Delete"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + delete_cnt=5, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = delete_future.result() + assert isinstance(result, MutationResult) + + def test_delete_async(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + delete_future = client_thread.submit( + handler.delete, + collection_name="test_collection", + expression="id == 1", + timeout=10, + _async=True + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Delete"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + delete_cnt=1, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = delete_future.result() + assert isinstance(result, MutationFuture) + + def test_upsert_rows(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + with patch.object(handler, 'describe_collection') as mock_describe: + mock_describe.return_value = { + "fields": [ + {"name": "id", "type": DataType.INT64} + ], + "enable_dynamic_field": False, + "update_timestamp": 0 + } + + entities = [{"id": 1}, {"id": 2}] + + upsert_future = client_thread.submit( + handler.upsert_rows, + collection_name="test_collection", + entities=entities, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Upsert"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + IDs=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1, 2])), + upsert_cnt=2, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = upsert_future.result() + assert isinstance(result, MutationResult) + + def test_upsert_rows_single_entity(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + with patch.object(handler, 'describe_collection') as mock_describe: + mock_describe.return_value = { + "fields": [ + {"name": "id", "type": DataType.INT64} + ], + "enable_dynamic_field": False, + "update_timestamp": 0 + } + + entity = {"id": 1} # Single dict + + upsert_future = client_thread.submit( + handler.upsert_rows, + collection_name="test_collection", + entities=entity, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Upsert"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.MutationResult( + status=common_pb2.Status(code=0), + IDs=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1])), + upsert_cnt=1, + timestamp=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = upsert_future.result() + assert isinstance(result, MutationResult) + + +class TestGrpcHandlerSearchOperations: + + def test_search(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + search_data = [[0.1] * 128] + search_params = {"metric_type": "L2", "params": {"nprobe": 10}} + + search_future = client_thread.submit( + handler.search, + collection_name="test_collection", + data=search_data, + anns_field="vector", + param=search_params, + limit=10, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Search"] + ) + rpc.send_initial_metadata(()) + + # Create search results + results = schema_pb2.SearchResultData( + num_queries=1, + top_k=1, + ids=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1])), + scores=[0.5], + topks=[1] + ) + + expected_result = milvus_pb2.SearchResults( + status=common_pb2.Status(code=0), + results=results, + session_ts=100 + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = search_future.result() + assert isinstance(result, SearchResult) + + def test_search_with_expression(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + search_data = [[0.1] * 128] + search_params = {"metric_type": "L2", "params": {"nprobe": 10}} + + search_future = client_thread.submit( + handler.search, + collection_name="test_collection", + data=search_data, + anns_field="vector", + param=search_params, + limit=10, + expression="id > 100", + partition_names=["partition1"], + output_fields=["id", "value"], + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Search"] + ) + rpc.send_initial_metadata(()) + + results = schema_pb2.SearchResultData( + num_queries=1, + top_k=1, + ids=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[101])), + scores=[0.3], + topks=[1] + ) + + expected_result = milvus_pb2.SearchResults( + status=common_pb2.Status(code=0), + results=results + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = search_future.result() + assert isinstance(result, SearchResult) + + def test_search_async(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + search_data = [[0.1] * 128] + search_params = {"metric_type": "L2", "params": {"nprobe": 10}} + + search_future = client_thread.submit( + handler.search, + collection_name="test_collection", + data=search_data, + anns_field="vector", + param=search_params, + limit=10, + timeout=10, + _async=True + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["Search"] + ) + rpc.send_initial_metadata(()) + + results = schema_pb2.SearchResultData( + num_queries=1, + top_k=1, + ids=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1])), + scores=[0.5], + topks=[1] + ) + + expected_result = milvus_pb2.SearchResults( + status=common_pb2.Status(code=0), + results=results + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = search_future.result() + assert isinstance(result, SearchFuture) + + def test_hybrid_search(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + # Create multiple search requests + req1 = AnnSearchRequest( + data=[[0.1] * 128], + anns_field="vector1", + param={"metric_type": "L2", "params": {"nprobe": 10}}, + limit=10 + ) + req2 = AnnSearchRequest( + data=[[0.2] * 128], + anns_field="vector2", + param={"metric_type": "IP", "params": {"nprobe": 10}}, + limit=10 + ) + + rerank = WeightedRanker(0.5, 0.5) + + hybrid_future = client_thread.submit( + handler.hybrid_search, + collection_name="test_collection", + reqs=[req1, req2], + rerank=rerank, + limit=10, + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["HybridSearch"] + ) + rpc.send_initial_metadata(()) + + results = schema_pb2.SearchResultData( + num_queries=1, + top_k=2, + ids=schema_pb2.IDs(int_id=schema_pb2.LongArray(data=[1, 2])), + scores=[0.9, 0.8], + topks=[2] + ) + + expected_result = milvus_pb2.SearchResults( + status=common_pb2.Status(code=0), + results=results + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = hybrid_future.result() + assert isinstance(result, SearchResult) + + +class TestGrpcHandlerSegmentAndAliasOperations: + + def test_get_query_segment_info(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + info_future = client_thread.submit( + handler.get_query_segment_info, + collection_name="test_collection", + timeout=30 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["GetQuerySegmentInfo"] + ) + rpc.send_initial_metadata(()) + + # Create segment info + segment_info = milvus_pb2.QuerySegmentInfo( + segmentID=1001, + collectionID=100, + partitionID=10, + num_rows=1000, + state=common_pb2.SegmentState.Sealed + ) + + expected_result = milvus_pb2.GetQuerySegmentInfoResponse( + status=common_pb2.Status(code=0), + infos=[segment_info] + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = info_future.result() + assert result == [segment_info] + + def test_get_query_segment_info_error(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + info_future = client_thread.submit( + handler.get_query_segment_info, + collection_name="test_collection", + timeout=30 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["GetQuerySegmentInfo"] + ) + rpc.send_initial_metadata(()) + + expected_result = milvus_pb2.GetQuerySegmentInfoResponse( + status=common_pb2.Status(code=1, reason="Collection not found") + ) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + info_future.result() + + def test_create_alias(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + alias_future = client_thread.submit( + handler.create_alias, + collection_name="test_collection", + alias="test_alias", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["CreateAlias"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=0) + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + result = alias_future.result() + assert result is None + + def test_create_alias_error(self, channel: Any, client_thread: Any) -> None: + handler = GrpcHandler(channel=channel) + + alias_future = client_thread.submit( + handler.create_alias, + collection_name="test_collection", + alias="test_alias", + timeout=10 + ) + + (invocation_metadata, request, rpc) = channel.take_unary_unary( + descriptor.methods_by_name["CreateAlias"] + ) + rpc.send_initial_metadata(()) + + expected_result = common_pb2.Status(code=1, reason="Alias already exists") + rpc.terminate(expected_result, (), grpc.StatusCode.OK, "") + + with pytest.raises(MilvusException): + alias_future.result() + + +class TestGrpcHandlerHelperMethods: + def test_get_info(self) -> None: + handler = GrpcHandler(channel=None) + + # Test with schema provided + schema = { + "fields": [ + {"name": "id", "type": DataType.INT64}, + {"name": "vector", "type": DataType.FLOAT_VECTOR} + ], + "enable_dynamic_field": True + } + + fields_info, enable_dynamic = handler._get_info("test_collection", schema=schema) + + assert fields_info == schema["fields"] + assert enable_dynamic is True + + def test_get_info_without_schema(self) -> None: + handler = GrpcHandler(channel=None) + + with patch.object(handler, 'describe_collection') as mock_describe: + mock_describe.return_value = { + "fields": [{"name": "id", "type": DataType.INT64}], + "enable_dynamic_field": False + } + + fields_info, enable_dynamic = handler._get_info("test_collection") + + assert fields_info == [{"name": "id", "type": DataType.INT64}] + assert enable_dynamic is False + + def test_get_schema_from_cache_or_remote_cached(self) -> None: + handler = GrpcHandler(channel=None) + + # Add to cache + cached_schema = { + "fields": [{"name": "id", "type": DataType.INT64}], + "update_timestamp": 100 + } + handler.schema_cache["test_collection"] = { + "schema": cached_schema, + "schema_timestamp": 100 + } + + schema, timestamp = handler._get_schema_from_cache_or_remote("test_collection") + + assert schema == cached_schema + assert timestamp == 100 + + def test_get_schema_from_cache_or_remote_not_cached(self) -> None: + handler = GrpcHandler(channel=None) + + with patch.object(handler, 'describe_collection') as mock_describe: + remote_schema = { + "fields": [{"name": "id", "type": DataType.INT64}], + "update_timestamp": 200 + } + mock_describe.return_value = remote_schema + + schema, timestamp = handler._get_schema_from_cache_or_remote("test_collection") + + assert schema == remote_schema + assert timestamp == 200 + # Check it was cached + assert handler.schema_cache["test_collection"]["schema"] == remote_schema + assert handler.schema_cache["test_collection"]["schema_timestamp"] == 200 diff --git a/tests/test_index.py b/tests/test_index.py deleted file mode 100644 index 683860ddd..000000000 --- a/tests/test_index.py +++ /dev/null @@ -1,54 +0,0 @@ -import logging -import pytest -from utils import * -from pymilvus import Collection, Index, connections - -LOGGER = logging.getLogger(__name__) - - -@pytest.mark.skip("Connect with the real server") -class TestIndex: - @pytest.fixture(scope="function") - def name(self): - return gen_index_name() - - @pytest.fixture(scope="function") - def field_name(self): - return gen_field_name() - - @pytest.fixture(scope="function") - def collection_name(self): - return gen_collection_name() - - @pytest.fixture(scope="function") - def schema(self): - return gen_schema() - - @pytest.fixture(scope="function") - def index_param(self): - return gen_index() - - @pytest.fixture( - scope="function", - params=gen_simple_index() - ) - def get_simple_index(self, request): - return request.param - - @pytest.fixture(scope="function") - def index(self, name, field_name, collection_name, schema, get_simple_index): - connections.connect() - collection = Collection(collection_name, schema=schema) - return Index(collection, field_name, get_simple_index) - - def test_params(self, index, get_simple_index): - assert index.params == get_simple_index - - def test_collection_name(self, index, collection_name): - assert index.collection_name == collection_name - - def test_field_name(self, index, field_name): - assert index.field_name == field_name - - def test_drop(self, index): - index.drop() diff --git a/tests/test_local_bulk_writer.py b/tests/test_local_bulk_writer.py new file mode 100644 index 000000000..77ee3b1df --- /dev/null +++ b/tests/test_local_bulk_writer.py @@ -0,0 +1,367 @@ +import shutil +import tempfile +import threading +from pathlib import Path +from unittest.mock import MagicMock, Mock, PropertyMock, patch + +import pytest +from pymilvus.bulk_writer.constants import MB, BulkFileType +from pymilvus.bulk_writer.local_bulk_writer import LocalBulkWriter +from pymilvus.client.types import DataType +from pymilvus.orm.schema import CollectionSchema, FieldSchema + + +class TestLocalBulkWriter: + @pytest.fixture + def simple_schema(self): + fields = [ + FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=False), + FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128), + FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512), + ] + return CollectionSchema(fields=fields) + + @pytest.fixture + def temp_dir(self): + """Create a temporary directory that gets cleaned up after test""" + temp_path = tempfile.mkdtemp() + yield temp_path + # Cleanup after test + if Path(temp_path).exists(): + shutil.rmtree(temp_path) + + @patch('uuid.uuid4') + def test_init(self, mock_uuid, simple_schema, temp_dir): + mock_uuid.return_value = "test-uuid" + + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + # Check the UUID directory was created + expected_path = Path(temp_dir) / "test-uuid" + assert writer._local_path == expected_path + assert expected_path.exists() + assert writer._uuid == "test-uuid" + assert writer._chunk_size == 128 * MB + assert writer._file_type == BulkFileType.JSON + assert writer._flush_count == 0 + + def test_init_with_segment_size(self, simple_schema, temp_dir): + """Test backward compatibility with segment_size parameter""" + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=64 * MB, + segment_size=256 * MB, # Should override chunk_size + file_type=BulkFileType.PARQUET + ) + + assert writer._chunk_size == 256 * MB + + def test_context_manager(self, simple_schema, temp_dir): + uuid_dir = None + with LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) as writer: + assert writer is not None + uuid_dir = writer._local_path + assert uuid_dir.exists() + + # After context exit, empty UUID directory should be removed + assert not uuid_dir.exists() + + def test_del_method(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + uuid_dir = writer._local_path + assert uuid_dir.exists() + + del writer + # Empty UUID directory should be removed through __del__ + assert not uuid_dir.exists() + + @patch('pymilvus.bulk_writer.local_bulk_writer.Thread') + def test_append_row_triggers_flush(self, mock_thread, simple_schema, temp_dir): + mock_thread_instance = MagicMock() + mock_thread.return_value = mock_thread_instance + + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=1, # Very small size to trigger flush + file_type=BulkFileType.JSON + ) + + # Use PropertyMock to mock the buffer_size property + with patch.object(type(writer), 'buffer_size', new_callable=PropertyMock) as mock_buffer_size: + mock_buffer_size.return_value = 2 # Larger than chunk_size + writer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + # Verify flush thread was started + mock_thread.assert_called() + mock_thread_instance.start.assert_called() + + @patch('pymilvus.bulk_writer.local_bulk_writer.Thread') + def test_commit_sync(self, mock_thread, simple_schema, temp_dir): + mock_thread_instance = MagicMock() + mock_thread.return_value = mock_thread_instance + + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + writer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + # Commit synchronously + writer.commit(_async=False) + + # Thread should be started and joined + mock_thread.assert_called() + mock_thread_instance.start.assert_called() + mock_thread_instance.join.assert_called() + + @patch('time.sleep') + @patch('pymilvus.bulk_writer.local_bulk_writer.Thread') + def test_commit_async(self, mock_thread, mock_sleep, simple_schema, temp_dir): + mock_thread_instance = MagicMock() + mock_thread.return_value = mock_thread_instance + + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + writer.append_row({ + "id": 1, + "vector": [1.0] * 128, + "text": "test" + }) + + # Commit asynchronously + writer.commit(_async=True) + + # Thread should be started but not joined + mock_thread.assert_called() + mock_thread_instance.start.assert_called() + mock_thread_instance.join.assert_not_called() + + def test_commit_with_callback(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + callback_mock = Mock() + + # Mock the buffer to have data using PropertyMock + with patch.object(type(writer._buffer), 'row_count', new_callable=PropertyMock) as mock_row_count: + mock_row_count.return_value = 1 + with patch.object(writer._buffer, 'persist') as mock_persist: + test_file = str(writer._local_path / "1" / "test.json") + mock_persist.return_value = [test_file] + # Add current thread to _working_thread to avoid KeyError + writer._working_thread[threading.current_thread().name] = threading.current_thread() + writer._flush(callback_mock) + + # Callback should be called with file list + callback_mock.assert_called_once_with([test_file]) + + def test_flush_with_empty_buffer(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + # Mock empty buffer using PropertyMock + with patch.object(type(writer._buffer), 'row_count', new_callable=PropertyMock) as mock_row_count: + mock_row_count.return_value = 0 + # Add current thread to _working_thread to avoid KeyError + writer._working_thread[threading.current_thread().name] = threading.current_thread() + writer._flush() + + # No files should be added + assert len(writer._local_files) == 0 + + def test_flush_exception_handling(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + # Mock buffer to raise exception using PropertyMock + with patch.object(type(writer._buffer), 'row_count', new_callable=PropertyMock) as mock_row_count: + mock_row_count.return_value = 1 + with patch.object(writer._buffer, 'persist', side_effect=Exception("Test error")): + # Add current thread to _working_thread to avoid KeyError + writer._working_thread[threading.current_thread().name] = threading.current_thread() + with pytest.raises(Exception, match="Test error"): + writer._flush() + + def test_properties(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + assert writer.uuid == writer._uuid + assert writer.data_path == writer._local_path + assert writer.batch_files == [] + + # Add some files + writer._local_files = [["file1.json"], ["file2.json"]] + assert writer.batch_files == [["file1.json"], ["file2.json"]] + + def test_multiple_flushes(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + # Simulate multiple flushes using PropertyMock + with patch.object(type(writer._buffer), 'row_count', new_callable=PropertyMock) as mock_row_count: + mock_row_count.return_value = 1 + with patch.object(writer._buffer, 'persist') as mock_persist: + mock_persist.side_effect = [ + [str(writer._local_path / "1" / "1.json")], + [str(writer._local_path / "2" / "2.json")], + [str(writer._local_path / "3" / "3.json")] + ] + + # Add current thread to _working_thread before each flush + current_thread = threading.current_thread() + + writer._working_thread[current_thread.name] = current_thread + writer._flush() + assert writer._flush_count == 1 + + writer._working_thread[current_thread.name] = current_thread + writer._flush() + assert writer._flush_count == 2 + + writer._working_thread[current_thread.name] = current_thread + writer._flush() + assert writer._flush_count == 3 + + assert len(writer._local_files) == 3 + + @patch('time.sleep') + def test_wait_for_previous_flush(self, mock_sleep, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + # Simulate a working thread + mock_thread = MagicMock() + writer._working_thread = {"thread1": mock_thread} + + # Create a side effect that clears the working thread after first call + def sleep_side_effect(duration): + if mock_sleep.call_count == 1: + writer._working_thread.clear() + + mock_sleep.side_effect = sleep_side_effect + + writer.commit(_async=False) + + # Should have waited for previous thread + mock_sleep.assert_called() + + def test_rm_dir(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + uuid_dir = writer._local_path + assert uuid_dir.exists() + + # Test removing empty directory + writer._rm_dir() + + # Directory should be removed + assert not uuid_dir.exists() + + def test_rm_dir_not_empty(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + uuid_dir = writer._local_path + + # Create a file in the directory + test_file = uuid_dir / "test.json" + test_file.write_text("{}") + + assert uuid_dir.exists() + assert test_file.exists() + + # Test removing non-empty directory + writer._rm_dir() + + # Directory should NOT be removed (still has files) + assert uuid_dir.exists() + assert test_file.exists() + + def test_exit_waits_for_threads(self, simple_schema, temp_dir): + writer = LocalBulkWriter( + schema=simple_schema, + local_path=temp_dir, + chunk_size=128 * MB, + file_type=BulkFileType.JSON + ) + + # Add mock working threads + mock_thread1 = MagicMock() + mock_thread2 = MagicMock() + writer._working_thread = { + "thread1": mock_thread1, + "thread2": mock_thread2 + } + + writer._exit() + + # Should wait for all threads + mock_thread1.join.assert_called_once() + mock_thread2.join.assert_called_once() diff --git a/tests/test_milvus_client.py b/tests/test_milvus_client.py new file mode 100644 index 000000000..e22f04e9d --- /dev/null +++ b/tests/test_milvus_client.py @@ -0,0 +1,58 @@ +import logging +from unittest.mock import MagicMock, patch + +import pytest +from pymilvus.exceptions import ParamError +from pymilvus.milvus_client.index import IndexParams +from pymilvus.milvus_client.milvus_client import MilvusClient + +log = logging.getLogger(__name__) + + +class TestMilvusClient: + @pytest.mark.parametrize("index_params", [None, {}, "str", MilvusClient.prepare_index_params()]) + def test_create_index_invalid_params(self, index_params): + mock_handler = MagicMock() + mock_handler.get_server_type.return_value = "milvus" + + with patch('pymilvus.milvus_client.milvus_client.create_connection', return_value="test"), \ + patch('pymilvus.orm.connections.Connections._fetch_handler', return_value=mock_handler): + client = MilvusClient() + + if isinstance(index_params, IndexParams): + with pytest.raises(ParamError, match="IndexParams is empty, no index can be created"): + client.create_index("test_collection", index_params) + elif index_params is None: + with pytest.raises(ParamError, match="missing required argument:.*"): + client.create_index("test_collection", index_params) + else: + with pytest.raises(ParamError, match="wrong type of argument .*"): + client.create_index("test_collection", index_params) + + def test_index_params(self): + index_params = MilvusClient.prepare_index_params() + assert len(index_params) == 0 + + index_params.add_index("vector", index_type="FLAT", metric_type="L2") + assert len(index_params) == 1 + + index_params.add_index("vector2", index_type="HNSW", efConstruction=100, metric_type="L2") + + log.info(index_params) + assert len(index_params) == 2 + + for index in index_params: + log.info(index) + + def test_connection_reuse(self): + mock_handler = MagicMock() + mock_handler.get_server_type.return_value = "milvus" + + with patch("pymilvus.orm.connections.Connections.connect", return_value=None), \ + patch("pymilvus.orm.connections.Connections._fetch_handler", return_value=mock_handler): + client = MilvusClient() + assert client._using == "http://localhost:19530" + client = MilvusClient(user="test", password="foobar") + assert client._using == "http://localhost:19530-test" + client = MilvusClient(token="foobar") + assert client._using == "http://localhost:19530-3858f62230ac3c915f300c664312c63f" diff --git a/tests/test_milvus_lite.py b/tests/test_milvus_lite.py new file mode 100644 index 000000000..6cea0a99c --- /dev/null +++ b/tests/test_milvus_lite.py @@ -0,0 +1,69 @@ +import pathlib +import sys +from tempfile import TemporaryDirectory + +import numpy as np +import pytest +from pymilvus.exceptions import ConnectionConfigException +from pymilvus.milvus_client import MilvusClient + + +@pytest.mark.skipif( + sys.platform.startswith("win"), reason="Milvus Lite is not supported on Windows" +) +class TestMilvusLite: + @pytest.mark.skip("Milvus Lite is now an optional dependency. This test will be fixed later.") + def test_milvus_lite(self): + with TemporaryDirectory(dir="./") as root: + db_file = pathlib.Path(root).joinpath("test.db") + client = MilvusClient(db_file.as_posix()) + client.create_collection(collection_name="demo_collection", dimension=3) + + # Text strings to search from. + docs = [ + "Artificial intelligence was founded as an academic discipline in 1956.", + "Alan Turing was the first person to conduct substantial research in AI.", + "Born in Maida Vale, London, Turing was raised in southern England.", + ] + + rng = np.random.default_rng(seed=19530) + vectors = [[rng.uniform(-1, 1) for _ in range(3)] for _ in range(len(docs))] + data = [ + {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} + for i in range(len(vectors)) + ] + res = client.insert(collection_name="demo_collection", data=data) + assert res["insert_count"] == 3 + + res = client.search( + collection_name="demo_collection", + data=[vectors[0]], + filter="subject == 'history'", + limit=2, + output_fields=["text", "subject"], + ) + assert len(res[0]) == 2 + + # a query that retrieves all entities matching filter expressions. + res = client.query( + collection_name="demo_collection", + filter="subject == 'history'", + output_fields=["text", "subject"], + ) + assert len(res) == 3 + + # delete + res = client.delete( + collection_name="demo_collection", + filter="subject == 'history'", + ) + assert len(res) == 3 + + def test_illegal_name(self): + with pytest.raises(ConnectionConfigException) as e: + MilvusClient("localhost") + # check the raised exception contained + assert ( + e.value.message + == "uri: localhost is illegal, needs start with [unix, http, https, tcp] or a local file endswith [.db]" + ) diff --git a/tests/test_orm_iterator.py b/tests/test_orm_iterator.py new file mode 100644 index 000000000..cc6df31ef --- /dev/null +++ b/tests/test_orm_iterator.py @@ -0,0 +1,301 @@ +import re +from unittest.mock import Mock, patch + +import pytest +from pymilvus.exceptions import MilvusException +from pymilvus.orm.constants import ( + DEFAULT_SEARCH_EXTENSION_RATE, + EF, + MAX_BATCH_SIZE, + PARAMS, +) +from pymilvus.orm.iterator import ( + assert_info, + check_set_flag, + extend_batch_size, + fall_back_to_latest_session_ts, + io_operation, +) + + +class TestIteratorHelpers: + @patch('pymilvus.orm.iterator.datetime') + @patch('pymilvus.orm.iterator.mkts_from_datetime') + def test_fall_back_to_latest_session_ts(self, mock_mkts, mock_datetime): + mock_now = Mock() + mock_datetime.datetime.now.return_value = mock_now + mock_mkts.return_value = 123456789 + + result = fall_back_to_latest_session_ts() + + mock_datetime.datetime.now.assert_called_once() + mock_mkts.assert_called_once_with(mock_now, milliseconds=1000.0) + assert result == 123456789 + + def test_assert_info_success(self): + # Should not raise when condition is True + assert_info(True, "This should not raise") + + def test_assert_info_failure(self): + # Should raise MilvusException when condition is False + with pytest.raises(MilvusException, match="Test error message"): + assert_info(False, "Test error message") + + def test_io_operation_success(self): + mock_func = Mock() + io_operation(mock_func, "Error message") + mock_func.assert_called_once() + + def test_io_operation_os_error(self): + mock_func = Mock(side_effect=OSError("OS error")) + with pytest.raises(MilvusException, match="Error message"): + io_operation(mock_func, "Error message") + + def test_extend_batch_size_without_ef(self): + batch_size = 100 + next_param = {PARAMS: {}} + + # Without extension + result = extend_batch_size(batch_size, next_param, False) + assert result == 100 + + # With extension + result = extend_batch_size(batch_size, next_param, True) + expected = min(MAX_BATCH_SIZE, batch_size * DEFAULT_SEARCH_EXTENSION_RATE) + assert result == expected + + def test_extend_batch_size_with_ef(self): + batch_size = 100 + next_param = {PARAMS: {EF: 50}} + + # Should be limited by EF value + result = extend_batch_size(batch_size, next_param, False) + assert result == 50 + + # With extension, still limited by EF + result = extend_batch_size(batch_size, next_param, True) + assert result == 50 + + def test_extend_batch_size_max_limit(self): + batch_size = MAX_BATCH_SIZE * 2 + next_param = {PARAMS: {}} + + # Should be limited by MAX_BATCH_SIZE + result = extend_batch_size(batch_size, next_param, False) + assert result == MAX_BATCH_SIZE + + # With extension, still limited by MAX_BATCH_SIZE + result = extend_batch_size(batch_size, next_param, True) + assert result == MAX_BATCH_SIZE + + def test_check_set_flag(self): + obj = Mock() + kwargs = { + "test_key": True, + "another_key": "value", + "false_key": False + } + + check_set_flag(obj, "flag_name", kwargs, "test_key") + assert obj.flag_name is True + + check_set_flag(obj, "another_flag", kwargs, "false_key") + assert obj.another_flag is False + + check_set_flag(obj, "missing_flag", kwargs, "non_existent_key") + assert obj.missing_flag is False + + +class TestQueryIteratorInit: + """Test QueryIterator initialization and basic methods""" + + @pytest.fixture + def mock_connection(self): + conn = Mock() + conn.describe_collection.return_value = { + "collection_id": 123, + "schema": {"fields": []}, + "consistency_level": 1 + } + return conn + + @pytest.fixture + def mock_schema(self): + schema = Mock() + schema.fields = [] + return schema + + @patch('pymilvus.orm.iterator.Connections') + def test_query_iterator_basic_init(self, mock_connections, mock_connection, mock_schema): + mock_connections.get_connection.return_value = mock_connection + + # Note: We can't fully instantiate QueryIterator without implementing all abstract methods + # This test would need a concrete implementation or more extensive mocking + # For now, we test the helper functions that would be used + + # Test that connection retrieval works + conn = mock_connections.get_connection("default") + assert conn == mock_connection + + +class TestSearchIteratorHelpers: + """Test SearchIterator helper methods""" + + def test_search_iterator_batch_extension(self): + """Test batch size extension logic for search iterator""" + # This tests the logic that would be used in SearchIterator + batch_size = 100 + next_param = {PARAMS: {"ef": 200}} + + # Test with ef parameter + result = extend_batch_size(batch_size, next_param, True) + expected = min(200, batch_size * DEFAULT_SEARCH_EXTENSION_RATE) + assert result == expected + + @patch('pymilvus.orm.iterator.Path') + def test_iterator_checkpoint_operations(self, mock_path): + """Test checkpoint file operations that iterators might use""" + mock_file = Mock() + mock_path.return_value.open.return_value.__enter__.return_value = mock_file + mock_path.return_value.exists.return_value = True + + # Test checkpoint save operation + def save_checkpoint(): + with mock_path.return_value.open('w') as f: + f.write('checkpoint_data') + + io_operation(save_checkpoint, "Failed to save checkpoint") + + # Test checkpoint load operation + def load_checkpoint(): + with mock_path.return_value.open('r') as f: + return f.read() + + io_operation(load_checkpoint, "Failed to load checkpoint") + + def test_iterator_state_assertions(self): + """Test state validation assertions used in iterators""" + + # Test valid state + assert_info(True, "Iterator is in valid state") + + # Test invalid state + with pytest.raises(MilvusException, match="Iterator exhausted"): + assert_info(False, "Iterator exhausted") + + # Test collection mismatch + with pytest.raises(MilvusException, match="Collection mismatch"): + assert_info(False, "Collection mismatch") + + +class TestIteratorConstants: + """Test iterator-related constants and their usage""" + + def test_batch_size_limits(self): + """Test batch size calculation respects limits""" + # Test minimum batch size + batch_size = 1 + next_param = {PARAMS: {}} + result = extend_batch_size(batch_size, next_param, False) + assert result >= 1 + + # Test maximum batch size + batch_size = MAX_BATCH_SIZE * 10 + result = extend_batch_size(batch_size, next_param, False) + assert result <= MAX_BATCH_SIZE + + def test_extension_rate_application(self): + """Test search extension rate is applied correctly""" + batch_size = 100 + next_param = {PARAMS: {}} + + # Without extension + result_no_ext = extend_batch_size(batch_size, next_param, False) + + # With extension + result_with_ext = extend_batch_size(batch_size, next_param, True) + + # Extension should increase batch size + assert result_with_ext >= result_no_ext + + # Extension should be by DEFAULT_SEARCH_EXTENSION_RATE + if result_with_ext < MAX_BATCH_SIZE: + assert result_with_ext == batch_size * DEFAULT_SEARCH_EXTENSION_RATE + + +class TestIteratorErrorHandling: + """Test error handling in iterator operations""" + + def test_io_operation_error_propagation(self): + """Test that IO errors are properly wrapped""" + + # Test with OSError + with pytest.raises(MilvusException, match="Custom IO error"): + io_operation(lambda: (_ for _ in ()).throw(OSError("OS level error")), "Custom IO error") + + # Test with PermissionError (subclass of OSError) + with pytest.raises(MilvusException, match="Permission denied"): + io_operation(lambda: (_ for _ in ()).throw(PermissionError("No access")), "Permission denied") + + # Test with FileNotFoundError (subclass of OSError) + with pytest.raises(MilvusException, match="File not found"): + io_operation(lambda: (_ for _ in ()).throw(FileNotFoundError("Missing file")), "File not found") + + def test_assert_info_with_different_messages(self): + """Test assert_info with various error messages""" + + test_cases = [ + "Simple error", + "Error with special characters: @#$%", + "Error with numbers 12345", + "Very long error message " * 100, + "" # Empty message + ] + + for message in test_cases: + # Escape regex special characters in the message for matching + escaped_message = re.escape(message) if message else ".*" + with pytest.raises(MilvusException, match=escaped_message): + assert_info(False, message) + + +class TestIteratorFlags: + """Test flag setting functionality for iterators""" + + def test_check_set_flag_various_types(self): + """Test setting flags with various value types""" + obj = Mock() + + # Boolean values + kwargs = {"bool_flag": True} + check_set_flag(obj, "test_bool", kwargs, "bool_flag") + assert obj.test_bool is True + + # String values (should be truthy/falsy) + kwargs = {"string_flag": "enabled"} + check_set_flag(obj, "test_string", kwargs, "string_flag") + assert obj.test_string == "enabled" + + # None values + kwargs = {"none_flag": None} + check_set_flag(obj, "test_none", kwargs, "none_flag") + assert obj.test_none is None + + # Numeric values + kwargs = {"num_flag": 42} + check_set_flag(obj, "test_num", kwargs, "num_flag") + assert obj.test_num == 42 + + # Missing key (should default to False) + kwargs = {} + check_set_flag(obj, "test_missing", kwargs, "missing_key") + assert obj.test_missing is False + + def test_check_set_flag_overwrites(self): + """Test that check_set_flag overwrites existing attributes""" + obj = Mock() + obj.existing_flag = "old_value" + + kwargs = {"new_value": "updated"} + check_set_flag(obj, "existing_flag", kwargs, "new_value") + assert obj.existing_flag == "updated" diff --git a/tests/test_partition.py b/tests/test_partition.py deleted file mode 100644 index 0ca1b923a..000000000 --- a/tests/test_partition.py +++ /dev/null @@ -1,93 +0,0 @@ -import logging -import unittest -import pytest -from utils import * -from pymilvus import Collection, Partition - -LOGGER = logging.getLogger(__name__) - - -@pytest.mark.skip("Connect with the real server") -class TestPartition: - @pytest.fixture(scope="function") - def collection_name(self): - return gen_collection_name() - - @pytest.fixture(scope="function") - def schema(self): - return gen_schema() - - @pytest.fixture(scope="function") - def partition_name(self): - return gen_partition_name() - - @pytest.fixture(scope="function") - def description(self): - return "TestPartition_description" - - @pytest.fixture(scope="function") - def collection(self, collection_name, schema): - c = Collection(collection_name, schema=schema) - yield c - c.drop() - - @pytest.fixture(scope="function") - def partition(self, collection, partition_name, description): - params = { - "description": description, - } - yield Partition(collection, partition_name, **params) - if collection.has_partition(partition_name): - collection.drop_partition(partition_name) - - def test_constructor(self, partition): - assert type(partition) is Partition - - def test_description(self, partition, description): - assert partition.description == description - - def test_name(self, partition, partition_name): - assert partition.name == partition_name - - def test_is_empty(self, partition): - assert partition.is_empty is True - - def test_num_entities(self, partition): - assert partition.num_entities == 0 - - def test_drop(self, collection, partition, partition_name): - assert collection.has_partition(partition_name) is True - partition.drop() - assert collection.has_partition(partition_name) is False - - def test_load(self, partition): - try: - partition.load() - except: - assert False - - def test_release(self, partition): - try: - partition.release() - except: - assert False - - def test_insert(self, partition): - data = gen_list_data(default_nb) - partition.insert(data) - - @pytest.mark.xfail - def test_get(self, partition): - data = gen_list_data(default_nb) - ids = partition.insert(data) - assert len(ids) == default_nb - res = partition.get(ids[0:10]) - - @pytest.mark.xfail - def test_query(self, partition): - data = gen_list_data(default_nb) - ids = partition.insert(data) - assert len(ids) == default_nb - ids_expr = ",".join(str(x) for x in ids) - expr = "id in [ " + ids_expr + " ]" - res = partition.query(expr) diff --git a/tests/test_prepare.py b/tests/test_prepare.py new file mode 100644 index 000000000..64c201f6c --- /dev/null +++ b/tests/test_prepare.py @@ -0,0 +1,490 @@ +import pytest +import json +import logging + +import numpy as np +import pytest +from pymilvus import CollectionSchema, DataType, DefaultConfig, FieldSchema, MilvusException +from pymilvus.exceptions import ParamError +from pymilvus.client.constants import PAGE_RETAIN_ORDER_FIELD +from pymilvus.client.prepare import Prepare + +LOGGER = logging.getLogger(__name__) + + +class TestPrepare: + @pytest.mark.parametrize("coll_name", [None, "", -1, 1.1, []]) + @pytest.mark.parametrize("expr", [None, "", -1, 1.1, []]) + def test_delete_request_wrong_coll_name(self, coll_name: str, expr: str): + with pytest.raises(MilvusException): + Prepare.delete_request(coll_name, expr, None, 0) + + @pytest.mark.parametrize("part_name", []) + def test_delete_request_wrong_part_name(self, part_name): + with pytest.raises(MilvusException): + Prepare.delete_request("coll", "id>1", part_name, 0) + + + def test_search_requests_with_expr_offset(self): + data = [ + [1., 2.], + [1., 2.], + [1., 2.], + [1., 2.], + [1., 2.], + ] + + search_params = { + "metric_type": "L2", + "offset": 10, + "params": {"page_retain_order": True} + } + + ret = Prepare.search_requests_with_expr("name", data, "v", search_params, 100) + + offset_exists = False + page_retain_order_exists = False + LOGGER.info(ret.search_params) + for p in ret.search_params: + if p.key == "offset": + offset_exists = True + assert p.value == "10" + elif p.key == "params": + params = json.loads(p.value) + if PAGE_RETAIN_ORDER_FIELD in params: + page_retain_order_exists = True + assert params[PAGE_RETAIN_ORDER_FIELD] is True + + assert offset_exists is True + assert page_retain_order_exists is True + + +class TestCreateCollectionRequest: + @pytest.mark.parametrize("valid_properties", [ + {"properties": {"p1": "o1"}}, + {"properties": {}}, + {"properties": {"p2": "o2", "p3": "o3"}}, + ]) + def test_create_collection_with_properties(self, valid_properties): + schema = CollectionSchema([ + FieldSchema("field_vector", DataType.FLOAT_VECTOR, dim=8), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True) + ]) + req = Prepare.create_collection_request("c_name", schema, **valid_properties) + assert len(valid_properties.get("properties")) == len(req.properties) + + @pytest.mark.parametrize("invalid_fields", [ + [], + {"no_fields_key": 1}, + {"fields": []}, # lack of fields values + {"fields": [{"no_name": True}]}, + {"fields": [{"name": "test_int64", "no_type": True}]}, + {"fields": [{"name": "test_int64", "type_wrong": True}]}, + + # wrong type for primary field + {"fields": [{"name": "test_int64", "type": DataType.DOUBLE, "is_primary": True}]}, + + # two primary fields + {"fields": [ + {"name": "test_int64", "type": DataType.INT64, "is_primary": True}, + {"name": "test_int64_2", "type": DataType.INT64, "is_primary": True}]}, + + # two auto_id fields + {"fields": [ + {"name": "test_int64", "type": DataType.INT64, "auto_id": True}, + {"name": "test_int64_2", "type": DataType.INT64, "auto_id": True}]}, + + # wrong type for auto_id field + {"fields": [{"name": "test_double", "type": DataType.DOUBLE, "auto_id": True}]}, + ]) + def test_param_error_get_schema(self, invalid_fields): + with pytest.raises(MilvusException): + Prepare.get_schema("test_name", invalid_fields) + + @pytest.mark.parametrize("valid_fields", [ + {"fields": [ + {"name": "test_varchar", "type": DataType.VARCHAR, "is_primary": True, "params": {"dim": "invalid"}}, + ]}, + {"fields": [ + {"name": "test_floatvector", "type": DataType.FLOAT_VECTOR, + "params": {"dim": 128, DefaultConfig.MaxVarCharLengthKey: DefaultConfig.MaxVarCharLength + 1}}, + ]} + ]) + def test_valid_type_params_get_collection_schema(self, valid_fields): + schema = Prepare.get_schema("test_name", valid_fields) + assert len(schema.fields) == 1 + assert schema.fields[0].name == valid_fields["fields"][0]["name"] + + def test_get_schema_from_collection_schema(self): + schema = CollectionSchema([ + FieldSchema("field_vector", DataType.FLOAT_VECTOR, dim=8), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + ]) + + c_schema = Prepare.get_schema_from_collection_schema("random", schema) + + assert c_schema.enable_dynamic_field is False + assert c_schema.name == "random" + assert len(c_schema.fields) == 2 + assert c_schema.fields[0].name == "field_vector" + assert c_schema.fields[0].data_type == DataType.FLOAT_VECTOR + assert len(c_schema.fields[0].type_params) == 1 + assert c_schema.fields[0].type_params[0].key == "dim" + assert c_schema.fields[0].type_params[0].value == "8" + + assert c_schema.fields[1].name == "pk_field" + assert c_schema.fields[1].data_type == DataType.INT64 + assert c_schema.fields[1].is_primary_key is True + assert c_schema.fields[1].autoID is True + assert len(c_schema.fields[1].type_params) == 0 + + def test_get_schema_from_collection_schema_with_enable_dynamic_field(self): + schema = CollectionSchema([ + FieldSchema("field_vector", DataType.FLOAT_VECTOR, dim=8), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + ], enable_dynamic_field=True) + + c_schema = Prepare.get_schema_from_collection_schema("random", schema) + + assert c_schema.enable_dynamic_field, "should enable dynamic field" + assert c_schema.name == "random" + assert len(c_schema.fields) == 2 + assert c_schema.fields[0].name == "field_vector" + assert c_schema.fields[0].data_type == DataType.FLOAT_VECTOR + assert len(c_schema.fields[0].type_params) == 1 + assert c_schema.fields[0].type_params[0].key == "dim" + assert c_schema.fields[0].type_params[0].value == "8" + + assert c_schema.fields[1].name == "pk_field" + assert c_schema.fields[1].data_type == DataType.INT64 + assert c_schema.fields[1].is_primary_key is True + assert c_schema.fields[1].autoID is True + assert len(c_schema.fields[1].type_params) == 0 + + @pytest.mark.parametrize("kv", [ + {"shards_num": 1}, + {"num_shards": 2}, + ]) + def test_create_collection_request_num_shards(self, kv): + schema = CollectionSchema([ + FieldSchema("field_vector", DataType.FLOAT_VECTOR, dim=8), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True) + ]) + req = Prepare.create_collection_request("c_name", schema, **kv) + assert req.shards_num == next(iter(kv.values())) + + @pytest.mark.parametrize("kv", [ + {"shards_num": 1, "num_shards": 1}, + {"num_shards": "2"}, + ]) + def test_create_collection_request_num_shards_error(self, kv): + schema = CollectionSchema([ + FieldSchema("field_vector", DataType.FLOAT_VECTOR, dim=8), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True) + ]) + + with pytest.raises(MilvusException): + Prepare.create_collection_request("c_name", schema, **kv) + + def test_row_insert_param_with_auto_id(self): + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE) + ]) + rows = [ + {"float": 1.0, "float_vector": rng.random((1, dim))[0], "a": 1}, + {"float": 1.0, "float_vector": rng.random((1, dim))[0], "b": 1}, + ] + + Prepare.row_insert_param("", rows, "", fields_info=schema.to_dict()["fields"], enable_dynamic=True) + + def test_row_insert_param_with_none(self): + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("nullable_field", DataType.INT64, nullable=True), + FieldSchema("default_field", DataType.FLOAT, default_value=10), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE), + ]) + rows = [ + {"float": 1.0,"nullable_field": None, "default_field": None,"float_vector": rng.random((1, dim))[0], "a": 1}, + {"float": 1.0, "float_vector": rng.random((1, dim))[0], "b": 1}, + ] + + Prepare.row_insert_param("", rows, "", fields_info=schema.to_dict()["fields"], enable_dynamic=True) + + def test_row_upsert_param_with_auto_id(self): + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE) + ]) + rows = [ + {"pk_field":1, "float": 1.0, "float_vector": rng.random((1, dim))[0], "a": 1}, + {"pk_field":2, "float": 1.0, "float_vector": rng.random((1, dim))[0], "b": 1}, + ] + + Prepare.row_upsert_param("", rows, "", fields_info=schema.to_dict()["fields"], enable_dynamic=True) + + def test_upsert_param_with_none(self): + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("nullable_field", DataType.INT64, nullable=True), + FieldSchema("default_field", DataType.FLOAT, default_value=10), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE), + ]) + rows = [ + {"pk_field":1, "float": 1.0,"nullable_field": None, "default_field": None,"float_vector": rng.random((1, dim))[0], "a": 1}, + {"pk_field":2, "float": 1.0, "float_vector": rng.random((1, dim))[0], "b": 1}, + ] + + Prepare.row_upsert_param("", rows, "", fields_info=schema.to_dict()["fields"], enable_dynamic=True) + + def test_row_upsert_param_with_partial_update_true(self): + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE) + ]) + rows = [ + {"pk_field": 1, "float": 1.0, "float_vector": rng.random((1, dim))[0], "a": 1}, + {"pk_field": 2, "float": 1.0, "float_vector": rng.random((1, dim))[0], "b": 1}, + ] + + request = Prepare.row_upsert_param("test_collection", rows, "", + fields_info=schema.to_dict()["fields"], + enable_dynamic=True, + partial_update=True) + + # Check that partial_update is set correctly + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is True, "partial_update should be True when explicitly set to True" + + def test_row_upsert_param_partial_update_default(self): + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE) + ]) + rows = [ + {"pk_field": 1, "float": 1.0, "float_vector": rng.random((1, dim))[0], "a": 1}, + {"pk_field": 2, "float": 1.0, "float_vector": rng.random((1, dim))[0], "b": 1}, + ] + + request = Prepare.row_upsert_param("test_collection", rows, "", + fields_info=schema.to_dict()["fields"], + enable_dynamic=True) + + # Check that partial_update defaults to False + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is False, "partial_update should default to False" + + def test_batch_upsert_param_with_partial_update_true(self): + entities = [ + {"name": "id", "type": DataType.INT64, "values": [1, 2, 3]}, + {"name": "name", "type": DataType.VARCHAR, "values": ["a", "b", "c"]}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "values": [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]} + ] + + fields_info = [ + {"name": "id", "type": DataType.INT64, "is_primary": True}, + {"name": "name", "type": DataType.VARCHAR}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "dim": 2} + ] + + request = Prepare.batch_upsert_param("test_collection", entities, "", + fields_info, partial_update=True) + + # Check that partial_update is set correctly + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is True, "partial_update should be True when explicitly set to True" + + def test_batch_upsert_param_partial_update_default(self): + entities = [ + {"name": "id", "type": DataType.INT64, "values": [1, 2, 3]}, + {"name": "name", "type": DataType.VARCHAR, "values": ["a", "b", "c"]}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "values": [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]} + ] + + fields_info = [ + {"name": "id", "type": DataType.INT64, "is_primary": True}, + {"name": "name", "type": DataType.VARCHAR}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "dim": 2} + ] + + request = Prepare.batch_upsert_param("test_collection", entities, "", fields_info) + + # Check that partial_update defaults to False + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is False, "partial_update should default to False" + + def test_batch_upsert_param_partial_fields_with_partial_update_true(self): + # Test partial update with only some fields provided + entities = [ + {"name": "id", "type": DataType.INT64, "values": [1, 2, 3]}, + {"name": "name", "type": DataType.VARCHAR, "values": ["updated_a", "updated_b", "updated_c"]} + # Note: float_vector field is intentionally omitted + ] + + fields_info = [ + {"name": "id", "type": DataType.INT64, "is_primary": True}, + {"name": "name", "type": DataType.VARCHAR}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "dim": 2}, + {"name": "optional_field", "type": DataType.VARCHAR} + ] + + # This should succeed with partial_update=True + request = Prepare.batch_upsert_param("test_collection", entities, "", + fields_info, partial_update=True) + + # Check that partial_update is set correctly + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is True, "partial_update should be True when explicitly set to True" + assert len(request.fields_data) == 2, "Should only contain data for provided fields" + + def test_batch_upsert_param_partial_fields_with_partial_update_false_should_fail(self): + # Test that partial fields fail when partial_update=False + entities = [ + {"name": "id", "type": DataType.INT64, "values": [1, 2, 3]}, + {"name": "name", "type": DataType.VARCHAR, "values": ["updated_a", "updated_b", "updated_c"]} + # Note: float_vector field is intentionally omitted + ] + + fields_info = [ + {"name": "id", "type": DataType.INT64, "is_primary": True}, + {"name": "name", "type": DataType.VARCHAR}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "dim": 2} + ] + + # This should fail with partial_update=False due to field count mismatch + with pytest.raises(ParamError, match="expected number of fields"): + Prepare.batch_upsert_param("test_collection", entities, "", + fields_info, partial_update=False) + + def test_row_upsert_param_missing_fields_partial_update_true(self): + """Test that missing non-nullable fields are handled correctly with partial_update=True""" + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("required_field", DataType.DOUBLE), # Non-nullable, no default + FieldSchema("nullable_field", DataType.VARCHAR, nullable=True) + ]) + + # Entities missing the required_field - should work with partial_update=True + rows = [ + {"pk_field": 1, "float_vector": rng.random((1, dim))[0]}, # Missing required_field + {"pk_field": 2, "float_vector": rng.random((1, dim))[0]} + ] + + # This should work because partial_update=True skips missing field validation + request = Prepare.row_upsert_param("test_collection", rows, "", + fields_info=schema.to_dict()["fields"], + enable_dynamic=False, + partial_update=True) + + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is True, "partial_update should be True" + + def test_row_upsert_param_missing_fields_partial_update_false_should_fail(self): + """Test that missing non-nullable fields fail with partial_update=False""" + from pymilvus.exceptions import DataNotMatchException + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("required_field", DataType.DOUBLE), # Non-nullable, no default + ]) + + # Entity missing the required_field - should fail with partial_update=False + rows = [ + {"pk_field": 1, "float_vector": rng.random((1, dim))[0]} # Missing required_field + ] + + # This should fail because required_field is missing and not nullable + with pytest.raises(DataNotMatchException, match="Insert missed an field"): + Prepare.row_upsert_param("test_collection", rows, "", + fields_info=schema.to_dict()["fields"], + enable_dynamic=False, + partial_update=False) + + def test_row_upsert_param_field_length_inconsistency_error(self): + """Test error when entities have inconsistent field lengths (validation in line 559-562)""" + from pymilvus.exceptions import DataNotMatchException + rng = np.random.default_rng(seed=19530) + dim = 8 + schema = CollectionSchema([ + FieldSchema("float_vector", DataType.FLOAT_VECTOR, dim=dim), + FieldSchema("pk_field", DataType.INT64, is_primary=True, auto_id=True), + FieldSchema("float", DataType.DOUBLE) + ]) + + # Create entities where the entity field count changes between entries + # This tests the specific logic at lines 559-562 in prepare.py + rows = [ + {"pk_field": 1, "float_vector": rng.random((1, dim))[0]}, # 3 fields + {"pk_field": 2, "float": 2.0} # Only 2 fields - this should trigger the error + ] + + # This should raise DataNotMatchException due to field length inconsistency + # This validation happens regardless of partial_update value + with pytest.raises(DataNotMatchException, match="The data fields length is inconsistent"): + Prepare.row_upsert_param("test_collection", rows, "", + fields_info=schema.to_dict()["fields"], + enable_dynamic=False, + partial_update=True) + + def test_batch_upsert_param_partial_update_field_count_validation_skip(self): + """Test that field count validation is skipped with partial_update=True for batch operations""" + # This tests the logic at lines 632-635 in prepare.py + entities = [ + {"name": "id", "type": DataType.INT64, "values": [1, 2, 3]}, + {"name": "name", "type": DataType.VARCHAR, "values": ["a", "b", "c"]} + # Intentionally omitting other fields to test partial update + ] + + fields_info = [ + {"name": "id", "type": DataType.INT64, "is_primary": True}, + {"name": "name", "type": DataType.VARCHAR}, + {"name": "float_vector", "type": DataType.FLOAT_VECTOR, "dim": 2}, + {"name": "optional_field", "type": DataType.VARCHAR, "nullable": True} + ] + + # This should work with partial_update=True even though not all fields are provided + request = Prepare.batch_upsert_param("test_collection", entities, "", + fields_info, partial_update=True) + + assert hasattr(request, 'partial_update'), "UpsertRequest should have partial_update field" + assert request.partial_update is True, "partial_update should be True" + assert len(request.fields_data) == 2, "Should only contain data for provided fields" + +class TestAlterCollectionRequest: + def test_alter_collection_request(self): + req = Prepare.alter_collection_request('foo', {'collection.ttl.seconds': 1800}) + assert req.collection_name == 'foo' + assert len(req.properties) == 1 + assert req.properties[0].key == 'collection.ttl.seconds' + assert req.properties[0].value == '1800' + + +class TestLoadCollectionRequest: + def test_load_collection_request(self): + kwargs = {'load_fields': ['pk', 'float_vector', 'string_load', 'int64_load']} + req = Prepare.load_collection('foo', **kwargs) + assert req.load_fields == ['pk', 'float_vector', 'string_load', 'int64_load'] diff --git a/tests/test_schema.py b/tests/test_schema.py index eeaf546a4..7a4c8b56b 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -1,47 +1,44 @@ -import logging +import copy -import numpy +import numpy as np +import pandas as pd import pytest - -from pymilvus import CollectionSchema, FieldSchema, DataType -from utils import * - -LOGGER = logging.getLogger(__name__) +from pymilvus import CollectionSchema, DataType, FieldSchema +from pymilvus.orm.schema import Function, FunctionType class TestCollectionSchema: @pytest.fixture(scope="function") def raw_dict(self): - _dict = {} - _dict["description"] = "TestCollectionSchema_description" - fields = [ - { - "name": "vec1", - "description": "desc1", - "type": DataType.FLOAT_VECTOR, - "params": {"dim": 128}, - }, - - { - "name": "vec2", - "description": "desc2", - "type": DataType.BINARY_VECTOR, - "params": {"dim": 128}, - }, - { - "name": "ID", - "description": "ID", - "type": DataType.INT64, - "is_primary": True, - "auto_id": False - }, - ] - _dict["fields"] = fields - - return _dict + return { + "description": "TestCollectionSchema_description", + "enable_dynamic_field": True, + "fields": [ + { + "name": "vec1", + "description": "desc1", + "type": DataType.FLOAT_VECTOR, + "params": {"dim": 128}, + }, + { + "name": "vec2", + "description": "desc2", + "type": DataType.BINARY_VECTOR, + "params": {"dim": 128}, + }, + { + "name": "ID", + "description": "ID", + "type": DataType.INT64, + "is_primary": True, + "auto_id": False + }, + ] + } def test_constructor_from_dict(self, raw_dict): schema = CollectionSchema.construct_from_dict(raw_dict) + assert schema.enable_dynamic_field == raw_dict.get("enable_dynamic_field", False) assert schema.description, raw_dict['description'] assert len(schema.fields) == len(raw_dict['fields']) f = schema.primary_field @@ -55,50 +52,83 @@ def test_to_dict(self, raw_dict): assert target == raw_dict assert target is not raw_dict + def test_init_with_functions(self, raw_dict): + functions = [ + Function("func1", FunctionType.BM25, ["field1"], ["field2"]) + ] + schema = CollectionSchema.construct_from_dict(raw_dict) + schema_with_func = CollectionSchema(schema.fields, schema.description, functions=functions) + assert schema_with_func.functions == functions + class TestFieldSchema: @pytest.fixture(scope="function") def raw_dict_float_vector(self): - _dict = dict() - _dict["name"] = "TestFieldSchema_name_floatvector" - _dict["description"] = "TestFieldSchema_description_floatvector" - _dict["type"] = DataType.FLOAT_VECTOR - _dict["params"] = {"dim": 128} - return _dict + return { + "name": "TestFieldSchema_name_floatvector", + "description": "TestFieldSchema_description_floatvector", + "type": DataType.FLOAT_VECTOR, + "params": {"dim": 128}, + } @pytest.fixture(scope="function") def raw_dict_binary_vector(self): - _dict = dict() - _dict["name"] = "TestFieldSchema_name_binary_vector" - _dict["description"] = "TestFieldSchema_description_binary_vector" - _dict["type"] = DataType.BINARY_VECTOR - _dict["params"] = {"dim": 128} - return _dict + return { + "name": "TestFieldSchema_name_binary_vector", + "description": "TestFieldSchema_description_binary_vector", + "type": DataType.BINARY_VECTOR, + "params": {"dim": 128}, + } + + @pytest.fixture(scope="function") + def raw_dict_float16_vector(self): + return { + "name": "TestFieldSchema_name_float16_vector", + "description": "TestFieldSchema_description_float16_vector", + "type": DataType.FLOAT16_VECTOR, + "params": {"dim": 128}, + } + + @pytest.fixture(scope="function") + def raw_dict_bfloat16_vector(self): + return { + "name": "TestFieldSchema_name_bfloat16_vector", + "description": "TestFieldSchema_description_bfloat16_vector", + "type": DataType.BFLOAT16_VECTOR, + "params": {"dim": 128}, + } + + @pytest.fixture(scope="function") + def raw_dict_int8_vector(self): + return { + "name": "TestFieldSchema_name_int8_vector", + "description": "TestFieldSchema_description_int8_vector", + "type": DataType.INT8_VECTOR, + "params": {"dim": 128}, + } @pytest.fixture(scope="function") def raw_dict_norm(self): - _dict = dict() - _dict["name"] = "TestFieldSchema_name_norm" - _dict["description"] = "TestFieldSchema_description_norm" - _dict["type"] = DataType.INT64 - return _dict + return { + "name": "TestFieldSchema_name_norm", + "description": "TestFieldSchema_description_norm", + "type": DataType.INT64, + } @pytest.fixture(scope="function") def dataframe1(self): - import pandas data = { 'float': [1.0], 'int32': [2], - 'float_vec': [numpy.array([3, 4.0], numpy.float32)] + 'float_vec': [np.array([3, 4.0], np.float32)] } - df1 = pandas.DataFrame(data) - return df1 + return pd.DataFrame(data) def test_constructor_from_float_dict(self, raw_dict_float_vector): field = FieldSchema.construct_from_dict(raw_dict_float_vector) assert field.dtype == DataType.FLOAT_VECTOR assert field.description == raw_dict_float_vector['description'] - assert field.is_primary == False + assert field.is_primary is False assert field.name == raw_dict_float_vector['name'] assert field.dim == raw_dict_float_vector['params']['dim'] @@ -106,21 +136,44 @@ def test_constructor_from_binary_dict(self, raw_dict_binary_vector): field = FieldSchema.construct_from_dict(raw_dict_binary_vector) assert field.dtype == DataType.BINARY_VECTOR assert field.description == raw_dict_binary_vector['description'] - assert field.is_primary == False + assert field.is_primary is False assert field.name == raw_dict_binary_vector['name'] assert field.dim == raw_dict_binary_vector['params']['dim'] + def test_constructor_from_float16_dict(self, raw_dict_float16_vector): + field = FieldSchema.construct_from_dict(raw_dict_float16_vector) + assert field.dtype == DataType.FLOAT16_VECTOR + assert field.description == raw_dict_float16_vector['description'] + assert field.is_primary is False + assert field.name == raw_dict_float16_vector['name'] + assert field.dim == raw_dict_float16_vector['params']['dim'] + + def test_constructor_from_bfloat16_dict(self, raw_dict_bfloat16_vector): + field = FieldSchema.construct_from_dict(raw_dict_bfloat16_vector) + assert field.dtype == DataType.BFLOAT16_VECTOR + assert field.description == raw_dict_bfloat16_vector['description'] + assert field.is_primary is False + assert field.name == raw_dict_bfloat16_vector['name'] + assert field.dim == raw_dict_bfloat16_vector['params']['dim'] + + def test_constructor_from_int8_dict(self, raw_dict_int8_vector): + field = FieldSchema.construct_from_dict(raw_dict_int8_vector) + assert field.dtype == DataType.INT8_VECTOR + assert field.description == raw_dict_int8_vector['description'] + assert field.is_primary is False + assert field.name == raw_dict_int8_vector['name'] + assert field.dim == raw_dict_int8_vector['params']['dim'] + def test_constructor_from_norm_dict(self, raw_dict_norm): field = FieldSchema.construct_from_dict(raw_dict_norm) assert field.dtype == DataType.INT64 assert field.description == raw_dict_norm['description'] - assert field.is_primary == False + assert field.is_primary is False assert field.name == raw_dict_norm['name'] assert field.dim is None assert field.dummy is None def test_cmp(self, raw_dict_binary_vector): - import copy field1 = FieldSchema.construct_from_dict(raw_dict_binary_vector) field2 = FieldSchema.construct_from_dict(raw_dict_binary_vector) assert field1 == field2 @@ -140,10 +193,3 @@ def test_to_dict(self, raw_dict_norm, raw_dict_float_vector, raw_dict_binary_vec target = f.to_dict() assert target == dicts[i] assert target is not dicts[i] - - # def test_parse_fields_from_dataframe(self, dataframe1): - # fields = parse_fields_from_dataframe(dataframe1) - # assert len(fields) == len(dataframe1.columns) - # for f in fields: - # if f.dtype == DataType.FLOAT_VECTOR: - # assert f.dim == len(dataframe1['float_vec'].values[0]) diff --git a/tests/test_search_iterator.py b/tests/test_search_iterator.py new file mode 100644 index 000000000..8cdc90608 --- /dev/null +++ b/tests/test_search_iterator.py @@ -0,0 +1,180 @@ +from unittest.mock import Mock, patch + +import numpy as np +import pytest +from pymilvus.client.search_iterator import SearchIteratorV2 +from pymilvus.client.search_result import SearchResult +from pymilvus.exceptions import ParamError, ServerVersionIncompatibleException +from pymilvus.grpc_gen import schema_pb2 + + +class TestSearchIteratorV2: + @pytest.fixture + def mock_connection(self): + connection = Mock() + connection.describe_collection.return_value = {"collection_id": "test_id"} + return connection + + @pytest.fixture + def search_data(self): + rng = np.random.default_rng(seed=19530) + return rng.random((1, 8)).tolist() + + def create_mock_search_result(self, num_results=10): + # Create mock search results + mock_ids = schema_pb2.IDs( + int_id=schema_pb2.LongArray(data=list(range(num_results))) + ) + result = schema_pb2.SearchResultData( + num_queries=1, + top_k=num_results, + scores=[1.0 * i for i in range(num_results)], + ids=mock_ids, + topks=[num_results], + ) + + # Create mock iterator info + result.search_iterator_v2_results.token = "test_token" + result.search_iterator_v2_results.last_bound = 0.5 + + return SearchResult(result) + + def test_init_basic(self, mock_connection, search_data): + iterator = SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100 + ) + + assert iterator._batch_size == 100 + assert iterator._left_res_cnt is None + assert iterator._collection_id == "test_id" + + def test_init_with_limit(self, mock_connection, search_data): + iterator = SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100, + limit=50 + ) + + assert iterator._left_res_cnt == 50 + + def test_invalid_batch_size(self, mock_connection, search_data): + with pytest.raises(ParamError): + SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=-1 + ) + + def test_invalid_offset(self, mock_connection, search_data): + with pytest.raises(ParamError): + SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100, + offset=10 + ) + + def test_multiple_vectors_error(self, mock_connection): + with pytest.raises(ParamError): + SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=[[1, 2], [3, 4]], # Multiple vectors + batch_size=100 + ) + + @patch('pymilvus.client.search_iterator.SearchIteratorV2._probe_for_compability') + def test_next_without_external_filter(self, mock_probe, mock_connection, search_data): + mock_connection.search.return_value = self.create_mock_search_result() + iterator = SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100 + ) + + result = iterator.next() + assert result is not None + assert len(result) == 10 # Number of results from mock + + @patch('pymilvus.client.search_iterator.SearchIteratorV2._probe_for_compability') + def test_next_with_limit(self, mock_probe, mock_connection, search_data): + mock_connection.search.return_value = self.create_mock_search_result() + iterator = SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100, + limit=5 + ) + + result = iterator.next() + assert result is not None + assert len(result) == 5 # Limited to 5 results + + def test_server_incompatible(self, mock_connection, search_data): + # Mock search result with empty token + mock_result = self.create_mock_search_result() + mock_result._search_iterator_v2_results.token = "" + mock_connection.search.return_value = mock_result + + with pytest.raises(ServerVersionIncompatibleException): + SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100 + ) + + @patch('pymilvus.client.search_iterator.SearchIteratorV2._probe_for_compability') + def test_external_filter(self, mock_probe, mock_connection, search_data): + mock_connection.search.return_value = self.create_mock_search_result() + + def filter_func(hits): + return [hit for hit in hits if hit["distance"] < 5.0] + + iterator = SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100, + external_filter_func=filter_func + ) + + result = iterator.next() + assert result is not None + assert all(hit["distance"] < 5.0 for hit in result) + + @patch('pymilvus.client.search_iterator.SearchIteratorV2._probe_for_compability') + def test_filter_and_external_filter(self, mock_probe, mock_connection, search_data): + # Create mock search result with field values + mock_result = self.create_mock_search_result() + for hit in mock_result[0]: + hit["entity"]["field_1"] = hit["id"] % 2 + mock_result[0] = list(filter(lambda x: x["entity"]["field_1"] < 5, mock_result[0])) + mock_connection.search.return_value = mock_result + + expr_filter = "field_1 < 5" + + def filter_func(hits): + return [hit for hit in hits if hit["distance"] < 5.0] # Only hits with distance < 5.0 should pass + + iterator = SearchIteratorV2( + connection=mock_connection, + collection_name="test_collection", + data=search_data, + batch_size=100, + filter=expr_filter, + external_filter_func=filter_func + ) + + result = iterator.next() + assert result is not None + assert all(hit["distance"] < 5.0 and hit["entity"]["field_1"] < 5 for hit in result) diff --git a/tests/test_search_result.py b/tests/test_search_result.py new file mode 100644 index 000000000..c6b10a2d2 --- /dev/null +++ b/tests/test_search_result.py @@ -0,0 +1,221 @@ +import logging +import os +import random +from typing import Dict + +import pytest +import orjson +from pymilvus.client.search_result import Hit, Hits, HybridHits, SearchResult +from pymilvus.client.types import DataType +from pymilvus.grpc_gen import schema_pb2 + +LOGGER = logging.getLogger(__name__) + + +class TestHit: + @pytest.mark.parametrize("pk_dist", [ + {"id": 1, "distance": 0.1, "entity":{}}, + {"id": 2, "distance": 0.3, "entity":{}}, + {"id": "a", "distance": 0.4, "entity":{}}, + ]) + def test_hit_no_fields(self, pk_dist: Dict): + h = Hit(pk_dist, pk_name="id") + assert h.id == h["id"] == h.get("id") == pk_dist["id"] + assert h.score == h.distance == h["distance"] == h.get("distance") == pk_dist["distance"] + assert h.entity == h + assert h["entity"] == h.get("entity") == {} + assert hasattr(h, "id") is True + assert hasattr(h, "distance") is True + assert hasattr(h, "a_random_attribute") is False + + @pytest.mark.parametrize("pk_dist_fields", [ + {"id": 1, "distance": 0.1, "entity": {"vector": [1., 2., 3., 4.], "description": "This is a test", 'd_a': "dynamic a"}}, + {"id": 2, "distance": 0.3, "entity": {"vector": [3., 4., 5., 6.], "description": "This is a test too", 'd_b': "dynamic b"}}, + {"id": "a","distance": 0.4, "entity": {"vector": [4., 4., 4., 4.], "description": "This is a third test", 'd_a': "dynamic a twice"}}, + ]) + def test_hit_with_fields(self, pk_dist_fields: Dict): + h = Hit(pk_dist_fields, pk_name="id") + + # fixed attributes + assert h.id == pk_dist_fields["id"] + assert h.id == h.get("id") == h["id"] + assert h.score == pk_dist_fields["distance"] + assert h.distance == h.score + assert h.distance == h.get("distance") == h["distance"] + assert h.entity == pk_dist_fields + assert pk_dist_fields["entity"] == h.get("entity")==h["entity"] + assert hasattr(h, "id") is True + assert hasattr(h, "distance") is True + + # dynamic attributes + assert h.description == pk_dist_fields["entity"].get("description") + assert h.vector == pk_dist_fields["entity"].get("vector") + assert hasattr(h, "description") is True + assert hasattr(h, "vector") is True + + assert hasattr(h, "a_random_attribute") is False + + with pytest.raises(AttributeError): + _ = h.field_not_exits + + LOGGER.info(h) + + +class TestSearchResult: + @pytest.mark.parametrize("pk", [ + schema_pb2.IDs(int_id=schema_pb2.LongArray(data=list(range(6)))), + schema_pb2.IDs(str_id=schema_pb2.StringArray(data=[str(i*10) for i in range(6)])) + ]) + @pytest.mark.parametrize("round_decimal", [ + None, + -1, + 4, + ]) + def test_search_result_no_fields_data(self, pk, round_decimal): + result = schema_pb2.SearchResultData( + num_queries=2, + top_k=3, + scores=[1.*i for i in range(6)], + ids=pk, + topks=[3, 3], + ) + r = SearchResult(result, round_decimal) + + # Iterable + assert len(r) == 2 + for hits in r: + assert isinstance(hits, (Hits, HybridHits)) + assert len(hits.ids) == 3 + assert len(hits.distances) == 3 + + # slicable + assert len(r[1:]) == 1 + first_q, _ = r[0], r[1] + assert len(first_q) == 3 + assert len(first_q[:]) == 3 + assert len(first_q[1:]) == 2 + assert len(first_q[2:]) == 1 + assert len(first_q[3:]) == 0 + LOGGER.info(first_q[:]) + LOGGER.info(first_q[1:]) + LOGGER.info(first_q[2:]) + + first_hit = first_q[0] + LOGGER.info(first_hit) + assert first_hit["distance"] == 0. + assert first_hit["entity"] == {} + + @pytest.mark.parametrize("pk", [ + schema_pb2.IDs(int_id=schema_pb2.LongArray(data=list(range(6)))), + schema_pb2.IDs(str_id=schema_pb2.StringArray(data=[str(i*10) for i in range(6)])) + ]) + def test_search_result_with_fields_data(self, pk): + fields_data = [ + schema_pb2.FieldData(type=DataType.BOOL, field_name="bool_field", field_id=100, + scalars=schema_pb2.ScalarField(bool_data=schema_pb2.BoolArray(data=[True for i in range(6)]))), + schema_pb2.FieldData(type=DataType.INT8, field_name="int8_field", field_id=101, + scalars=schema_pb2.ScalarField(int_data=schema_pb2.IntArray(data=list(range(6))))), + schema_pb2.FieldData(type=DataType.INT16, field_name="int16_field", field_id=102, + scalars=schema_pb2.ScalarField(int_data=schema_pb2.IntArray(data=list(range(6))))), + schema_pb2.FieldData(type=DataType.INT32, field_name="int32_field", field_id=103, + scalars=schema_pb2.ScalarField(int_data=schema_pb2.IntArray(data=list(range(6))))), + schema_pb2.FieldData(type=DataType.INT64, field_name="int64_field", field_id=104, + scalars=schema_pb2.ScalarField(long_data=schema_pb2.LongArray(data=list(range(6))))), + schema_pb2.FieldData(type=DataType.FLOAT, field_name="float_field", field_id=105, + scalars=schema_pb2.ScalarField(float_data=schema_pb2.FloatArray(data=[i*1. for i in range(6)]))), + schema_pb2.FieldData(type=DataType.DOUBLE, field_name="double_field", field_id=106, + scalars=schema_pb2.ScalarField(double_data=schema_pb2.DoubleArray(data=[i*1. for i in range(6)]))), + schema_pb2.FieldData(type=DataType.VARCHAR, field_name="varchar_field", field_id=107, + scalars=schema_pb2.ScalarField(string_data=schema_pb2.StringArray(data=[str(i*10) for i in range(6)]))), + schema_pb2.FieldData(type=DataType.ARRAY, field_name="int16_array_field", field_id=108, + scalars=schema_pb2.ScalarField( + array_data=schema_pb2.ArrayArray( + data=[schema_pb2.ScalarField(int_data=schema_pb2.IntArray(data=list(range(10)))) for i in range(6)], + element_type=DataType.INT16, + ), + )), + schema_pb2.FieldData(type=DataType.ARRAY, field_name="int64_array_field", field_id=109, + scalars=schema_pb2.ScalarField( + array_data=schema_pb2.ArrayArray( + data=[schema_pb2.ScalarField(long_data=schema_pb2.LongArray(data=list(range(10)))) for i in range(6)], + element_type=DataType.INT64, + ), + )), + schema_pb2.FieldData(type=DataType.ARRAY, field_name="float_array_field", field_id=110, + scalars=schema_pb2.ScalarField( + array_data=schema_pb2.ArrayArray( + data=[schema_pb2.ScalarField(float_data=schema_pb2.FloatArray(data=[j*1. for j in range(10)])) for i in range(6)], + element_type=DataType.FLOAT, + ), + )), + schema_pb2.FieldData(type=DataType.ARRAY, field_name="varchar_array_field", field_id=110, + scalars=schema_pb2.ScalarField( + array_data=schema_pb2.ArrayArray( + data=[schema_pb2.ScalarField(string_data=schema_pb2.StringArray(data=[str(j*1.) for j in range(10)])) for i in range(6)], + element_type=DataType.VARCHAR, + ), + )), + + schema_pb2.FieldData(type=DataType.JSON, field_name="normal_json_field", field_id=111, + scalars=schema_pb2.ScalarField(json_data=schema_pb2.JSONArray(data=[orjson.dumps({str(i): i for i in range(3)}) for i in range(6)])), + ), + schema_pb2.FieldData(type=DataType.JSON, field_name="$meta", field_id=112, + is_dynamic=True, + scalars=schema_pb2.ScalarField(json_data=schema_pb2.JSONArray(data=[orjson.dumps({str(i*100): i}) for i in range(6)])), + ), + + schema_pb2.FieldData(type=DataType.FLOAT_VECTOR, field_name="float_vector_field", field_id=113, + vectors=schema_pb2.VectorField( + dim=4, + float_vector=schema_pb2.FloatArray(data=[random.random() for i in range(24)]), + ), + ), + schema_pb2.FieldData(type=DataType.BINARY_VECTOR, field_name="binary_vector_field", field_id=114, + vectors=schema_pb2.VectorField( + dim=8, + binary_vector=os.urandom(6), + ), + ), + schema_pb2.FieldData(type=DataType.FLOAT16_VECTOR, field_name="float16_vector_field", field_id=115, + vectors=schema_pb2.VectorField( + dim=16, + float16_vector=os.urandom(32), + ), + ), + schema_pb2.FieldData(type=DataType.BFLOAT16_VECTOR, field_name="bfloat16_vector_field", field_id=116, + vectors=schema_pb2.VectorField( + dim=16, + bfloat16_vector=os.urandom(32), + ), + ), + schema_pb2.FieldData(type=DataType.INT8_VECTOR, field_name="int8_vector_field", field_id=117, + vectors=schema_pb2.VectorField( + dim=16, + int8_vector=os.urandom(32), + ), + ), + ] + result = schema_pb2.SearchResultData( + fields_data=fields_data, + num_queries=2, + top_k=3, + scores=[1.*i for i in range(6)], + ids=pk, + topks=[3, 3], + output_fields=['$meta'] + ) + r = SearchResult(result) + LOGGER.info(r[0]) + assert len(r) == 2 + assert 3 == len(r[0]) == len(r[1]) + assert r[0][0].get("entity").get("normal_json_field") == {'0': 0, '1': 1, '2': 2} + # dynamic field + assert r[0][1].get("entity").get('100') == 1 + + assert r[0][0].get("entity").get("int32_field") == 0 + assert r[0][1].get("entity").get("int8_field") == 1 + assert r[0][2].get("entity").get("int16_field") == 2 + assert r[0][1].get("entity").get("int64_array_field") == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + assert len(r[0][0].get("entity").get("bfloat16_vector_field")) == 32 + assert len(r[0][0].get("entity").get("float16_vector_field")) == 32 + assert len(r[0][0].get("entity").get("int8_vector_field")) == 16 diff --git a/tests/test_ts_utils.py b/tests/test_ts_utils.py index e795c748c..4cadf4bbe 100644 --- a/tests/test_ts_utils.py +++ b/tests/test_ts_utils.py @@ -1,6 +1,4 @@ -import datetime import threading -import pytest from pymilvus.client import ts_utils @@ -33,24 +31,19 @@ def test_update_and_get(self): ins = ts_utils._get_gts_dict() assert ins.get(1) == 0 - ins.update(1, -1) - assert ins.get(1) == 0 + ins.update("coll1", -1) + assert ins.get("coll1") == 0 - ins.update(1, 2) - assert ins.get(1) == 2 + ins.update("coll1", 2) + assert ins.get("coll1") == 2 - ins.update(2, 100) - assert ins.get(2) == 100 + ins.update("coll2", 100) + assert ins.get("coll2") == 100 def test_get_current_bounded_ts(self): - now = datetime.datetime.now().timestamp() - ts1 = ts_utils.get_current_bounded_ts() - assert ts1 < ts_utils.mkts_from_unixtime(now) - ts2 = ts_utils.get_current_bounded_ts(200) - assert ts2 > ts1 + ts = ts_utils.get_bounded_ts() + assert ts == ts_utils.BOUNDED_TS def test_get_eventually_ts(self): ts = ts_utils.get_eventually_ts() assert ts == ts_utils.EVENTUALLY_TS - - diff --git a/tests/test_types.py b/tests/test_types.py index 9e1e485dc..a2437f094 100644 --- a/tests/test_types.py +++ b/tests/test_types.py @@ -9,96 +9,50 @@ # is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express # or implied. See the License for the specific language governing permissions and limitations under the License. +import numpy as np import pytest from pymilvus import DataType -from pymilvus.client.exceptions import InvalidConsistencyLevel -from pymilvus.client.types import get_consistency_level, ConsistencyLevel -import pandas as pd -import numpy as np +from pymilvus.client.constants import DEFAULT_RESOURCE_GROUP +from pymilvus.client.types import ( + ConsistencyLevel, + Group, + Replica, + Shard, + get_consistency_level, +) +from pymilvus.exceptions import InvalidConsistencyLevel +from pymilvus.orm.types import ( + infer_dtype_bydata, +) -@pytest.mark.xfail class TestTypes: - def test_map_numpy_dtype_to_datatype(self): - data1 = { - 'double': [2.0], - 'float32': [np.float32(1.0)], - 'double2': [np.float64(1.0)], - 'int8': [np.int8(1)], - 'int16': [2], - 'int32': [4], - 'int64': [8], - 'bool': [True], - 'float_vec': [np.array([1.1, 1.2])], - } - - df = pd.DataFrame(data1) - - wants1 = [ - DataType.DOUBLE, - DataType.DOUBLE, - DataType.DOUBLE, - DataType.INT64, - DataType.INT64, - DataType.INT64, - DataType.INT64, - DataType.BOOL, - DataType.UNKNOWN, - ] - - ret1 = [map_numpy_dtype_to_datatype(x) for x in df.dtypes] - assert ret1 == wants1 - - df2 = pd.DataFrame(data=[1, 2, 3], columns=['a'], - dtype=np.int8) - assert DataType.INT8 == map_numpy_dtype_to_datatype(df2.dtypes[0]) - - df2 = pd.DataFrame(data=[1, 2, 3], columns=['a'], - dtype=np.int16) - assert DataType.INT16 == map_numpy_dtype_to_datatype(df2.dtypes[0]) - - df2 = pd.DataFrame(data=[1, 2, 3], columns=['a'], - dtype=np.int32) - assert DataType.INT32 == map_numpy_dtype_to_datatype(df2.dtypes[0]) - - df2 = pd.DataFrame(data=[1, 2, 3], columns=['a'], - dtype=np.int64) - assert DataType.INT64 == map_numpy_dtype_to_datatype(df2.dtypes[0]) - - def test_infer_dtype_bydata(self): - data1 = [ - [1], - [True], - [1.0, 2.0], - ["abc"], - bytes("abc", encoding='ascii'), - 1, - True, - "abc", - np.int8(1), - np.int16(1), - [np.int8(1)] - ] - - wants = [ - DataType.FLOAT_VECTOR, - DataType.UNKNOWN, - DataType.FLOAT_VECTOR, - DataType.UNKNOWN, - DataType.BINARY_VECTOR, - DataType.INT64, - DataType.BOOL, - DataType.STRING, - DataType.INT8, - DataType.INT16, - DataType.FLOAT_VECTOR, - ] - - actual = [] - for d in data1: - actual.append(infer_dtype_bydata(d)) - - assert actual == wants + @pytest.mark.parametrize( + "data,expect",[ + ([1], DataType.FLOAT_VECTOR), + ([True], DataType.UNKNOWN), + ([1.0, 2.0], DataType.FLOAT_VECTOR), + (["abc"], DataType.UNKNOWN), + (bytes("abc", encoding="ascii"), DataType.BINARY_VECTOR), + (1, DataType.INT64), + (True, DataType.BOOL), + ("abc", DataType.VARCHAR), + (np.int8(1), DataType.INT8), + (np.int16(1), DataType.INT16), + pytest.param([np.float16(1.0)], DataType.FLOAT16_VECTOR, marks=pytest.mark.xfail(reason="fix me")), + pytest.param([np.float16(1.0)], DataType.INT8_VECTOR, marks=pytest.mark.xfail(reason="fix me")), + # ([np.int8(1)], DataType.INT8_VECTOR), + ], + ) + def test_infer_dtype_bydata(self, data, expect): + got = infer_dtype_bydata(data) + assert got == expect + + def test_str_of_data_type(self): + for v in DataType: + assert isinstance(v, DataType) + assert str(v) == str(v.value) + assert str(v) != v.name class TestConsistencyLevel: @@ -115,3 +69,26 @@ def test_consistency_level_invalid(self, invalid): with pytest.raises(InvalidConsistencyLevel): get_consistency_level(invalid) + +class TestReplica: + def test_shard(self): + s = Shard("channel-1", (1, 2, 3), 1) + assert s.channel_name == "channel-1" + assert s.shard_nodes == {1, 2, 3} + assert s.shard_leader == 1 + + g = Group(2, [s], [1, 2, 3], DEFAULT_RESOURCE_GROUP, {}) + assert g.id == 2 + assert g.shards == [s] + assert g.group_nodes == (1, 2, 3) + + replica = Replica([g, g]) + assert replica.groups == [g, g] + + def test_shard_dup_nodeIDs(self): + s = Shard("channel-1", (1, 1, 1), 1) + assert s.channel_name == "channel-1" + assert s.shard_nodes == { + 1, + } + assert s.shard_leader == 1 diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 000000000..ad852b0a2 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,12 @@ +from pymilvus.client import utils + + +class TestUtils: + def test_get_server_type(self): + urls_and_wants = [ + ('in01-0390f61a8675594.aws-us-west-2.vectordb.zillizcloud.com', 'zilliz'), + ('something.abc.com', 'milvus'), + ('something.zillizcloud.cn', 'zilliz') + ] + for (url, want) in urls_and_wants: + assert utils.get_server_type(url) == want diff --git a/tests/utils.py b/tests/utils.py deleted file mode 100644 index ec2279193..000000000 --- a/tests/utils.py +++ /dev/null @@ -1,150 +0,0 @@ -import random -import pandas -from sklearn import preprocessing - -from pymilvus import DataType - -default_dim = 128 -default_nb = 1200 -default_nq = 10 -default_float_vec_field_name = "float_vector" - -all_index_types = [ - "FLAT", - "IVF_FLAT", - "IVF_SQ8", - "IVF_SQ8_HYBRID", - "IVF_PQ", - "HNSW", - # "NSG", - "ANNOY", - "RHNSW_PQ", - "RHNSW_SQ", - "BIN_FLAT", - "BIN_IVF_FLAT" -] - -default_index_params = [ - {"nlist": 128}, - {"nlist": 128}, - {"nlist": 128}, - {"nlist": 128}, - {"nlist": 128, "m": 16, "nbits": 8}, - {"M": 48, "efConstruction": 500}, - # {"search_length": 50, "out_degree": 40, "candidate_pool_size": 100, "knng": 50}, - {"n_trees": 50}, - {"M": 48, "efConstruction": 500, "PQM": 64}, - {"M": 48, "efConstruction": 500}, - {"nlist": 128}, - {"nlist": 128} -] - -def binary_support(): - return ["BIN_FLAT", "BIN_IVF_FLAT"] - -def gen_collection_name(): - return f'ut_collection_' + str(random.randint(100000, 999999)) - - -def gen_partition_name(): - return f'ut_partition_' + str(random.randint(100000, 999999)) - - -def gen_index_name(): - return f'ut_index_' + str(random.randint(100000, 999999)) - - -def gen_field_name(): - return f'ut_field_' + str(random.randint(100000, 999999)) - - -def gen_schema(): - from pymilvus import CollectionSchema, FieldSchema - fields = [ - FieldSchema(gen_field_name(), DataType.INT64, is_primary=True, auto_id=False), - FieldSchema(gen_field_name(), DataType.FLOAT), - FieldSchema(gen_field_name(), DataType.FLOAT_VECTOR, dim=default_dim) - ] - collection_schema = CollectionSchema(fields) - return collection_schema - - -def gen_vectors(num, dim, is_normal=True): - vectors = [[random.random() for _ in range(dim)] for _ in range(num)] - vectors = preprocessing.normalize(vectors, axis=1, norm='l2') - return vectors.tolist() - - -def gen_int_attr(row_num): - return [random.randint(0, 255) for _ in range(row_num)] - - -# pandas.DataFrame -def gen_pd_data(nb, is_normal=False): - import numpy - vectors = gen_vectors(nb, default_dim, is_normal) - datas = { - "int64": [i for i in range(nb)], - "float": numpy.array([i for i in range(nb)], dtype=numpy.float32), - default_float_vec_field_name: vectors - } - data = pandas.DataFrame(datas) - return data - - -# list or tuple data -def gen_list_data(nb, is_normal=False): - vectors = gen_vectors(nb, default_dim, is_normal) - datas = [[i for i in range(nb)], [float(i) for i in range(nb)], vectors] - return datas - - -def gen_index(): - nlists = [1, 1024, 16384] - pq_ms = [128, 64, 32, 16, 8, 4] - Ms = [5, 24, 48] - efConstructions = [100, 300, 500] - search_lengths = [10, 100, 300] - out_degrees = [5, 40, 300] - candidate_pool_sizes = [50, 100, 300] - knngs = [5, 100, 300] - - index_params = [] - for index_type in all_index_types: - if index_type in ["FLAT", "BIN_FLAT", "BIN_IVF_FLAT"]: - index_params.append({"index_type": index_type, "index_param": {"nlist": 1024}}) - elif index_type in ["IVF_FLAT", "IVF_SQ8", "IVF_SQ8_HYBRID"]: - ivf_params = [{"index_type": index_type, "index_param": {"nlist": nlist}} \ - for nlist in nlists] - index_params.extend(ivf_params) - elif index_type == "IVF_PQ": - IVFPQ_params = [{"index_type": index_type, "index_param": {"nlist": nlist, "m": m}} \ - for nlist in nlists \ - for m in pq_ms] - index_params.extend(IVFPQ_params) - elif index_type in ["HNSW", "RHNSW_SQ", "RHNSW_PQ"]: - hnsw_params = [{"index_type": index_type, "index_param": {"M": M, "efConstruction": efConstruction}} \ - for M in Ms \ - for efConstruction in efConstructions] - index_params.extend(hnsw_params) - elif index_type == "NSG": - nsg_params = [{"index_type": index_type, - "index_param": {"search_length": search_length, "out_degree": out_degree, - "candidate_pool_size": candidate_pool_size, "knng": knng}} \ - for search_length in search_lengths \ - for out_degree in out_degrees \ - for candidate_pool_size in candidate_pool_sizes \ - for knng in knngs] - index_params.extend(nsg_params) - - return index_params - -def gen_simple_index(): - index_params = [] - for i in range(len(all_index_types)): - if all_index_types[i] in binary_support(): - continue - dic = {"index_type": all_index_types[i], "metric_type": "L2"} - dic.update({"params": default_index_params[i]}) - index_params.append(dic) - return index_params