usearch 0.2.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,90 @@
1
+ name: Report a bug
2
+ description: Something doesn't work as expected?
3
+ title: "Bug: "
4
+ labels: ["bug", "invalid"]
5
+ assignees:
6
+ - octocat
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Thanks for taking the time to fill out this bug report!
12
+ If you have a small question, it may be faster to ask the maintainers on [Discord](https://discord.gg/4mxGrenbNt).
13
+ - type: textarea
14
+ id: what
15
+ attributes:
16
+ label: Describe the bug
17
+ placeholder: A short description of what the bug is.
18
+ validations:
19
+ required: true
20
+ - type: textarea
21
+ id: steps
22
+ attributes:
23
+ label: Steps to reproduce
24
+ placeholder: Detail the steps taken to reproduce the behavior.
25
+ validations:
26
+ required: true
27
+ - type: textarea
28
+ id: expected
29
+ attributes:
30
+ label: Expected behavior
31
+ placeholder: A clear and concise description of what you expected to happen.
32
+ validations:
33
+ required: true
34
+ - type: input
35
+ id: version
36
+ attributes:
37
+ label: USearch version
38
+ placeholder: v0.4.X
39
+ validations:
40
+ required: true
41
+ - type: input
42
+ id: os
43
+ attributes:
44
+ label: Operating System
45
+ placeholder: Ubuntu 22.04
46
+ validations:
47
+ required: true
48
+ - type: dropdown
49
+ id: hardware
50
+ attributes:
51
+ label: Hardware architecture
52
+ options:
53
+ - x86
54
+ - Arm
55
+ validations:
56
+ required: true
57
+ - type: dropdown
58
+ id: frontend
59
+ attributes:
60
+ label: Which interface are you using?
61
+ options:
62
+ - C++ implementation
63
+ - Python bindings
64
+ - Other bindings
65
+ validations:
66
+ required: true
67
+ - type: input
68
+ id: contact
69
+ attributes:
70
+ label: Contact Details
71
+ description: How can we get in touch with you if we need more info?
72
+ placeholder: email@example.com
73
+ validations:
74
+ required: false
75
+ - type: checkboxes
76
+ id: duplicate
77
+ attributes:
78
+ label: Is there an existing issue for this?
79
+ description: Please search [our issues](https://github.com/unum-cloud/usearch/issues) to see if this bug already exists.
80
+ options:
81
+ - label: I have searched the existing issues
82
+ required: true
83
+ - type: checkboxes
84
+ id: terms
85
+ attributes:
86
+ label: Code of Conduct
87
+ description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/unum-cloud/usearch/blob/main/CODE_OF_CONDUCT.md)
88
+ options:
89
+ - label: I agree to follow this project's Code of Conduct
90
+ required: true
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: 💬 Ask on Discord
4
+ url: https://discord.gg/A6wxt6dS9j
5
+ about: Real-time communication with maintainers, contributors, and broader community
@@ -0,0 +1,64 @@
1
+ name: Request a feature
2
+ description: Something we haven't implemented yet?
3
+ title: "Feature: "
4
+ labels: ["enhancement"]
5
+ assignees:
6
+ - octocat
7
+ body:
8
+ - type: markdown
9
+ attributes:
10
+ value: |
11
+ Thanks for taking the time to fill out this feature request!
12
+ We have already scheduled a few features for our [next milestone](https://github.com/unum-cloud/usearch/milestones).
13
+ Still, if it is something we have yet to think about, we will happily extend our [roadmap](https://github.com/orgs/unum-cloud/projects/2).
14
+ It is also worth noting that choosing between speed and functionality, we generally prefer the former.
15
+ So in some cases, it makes more sense to build something on top of USearch rather than patch it 🤗
16
+ - type: textarea
17
+ id: what
18
+ attributes:
19
+ label: Describe what you are looking for
20
+ placeholder: A short description of what the feature would look like, ideally with code examples.
21
+ validations:
22
+ required: true
23
+ - type: checkboxes
24
+ id: check
25
+ attributes:
26
+ label: Can you contribute to the implementation?
27
+ options:
28
+ - label: I can contribute
29
+ - type: dropdown
30
+ id: interface
31
+ attributes:
32
+ label: Is your feature request specific to a certain interface?
33
+ options:
34
+ - It applies to everything
35
+ - C++ implementation
36
+ - Python bindings
37
+ - Other bindings
38
+ - Other
39
+ validations:
40
+ required: true
41
+ - type: input
42
+ id: contact
43
+ attributes:
44
+ label: Contact Details
45
+ description: How can we get in touch with you if we need more info?
46
+ placeholder: email@example.com
47
+ validations:
48
+ required: false
49
+ - type: checkboxes
50
+ id: duplicate
51
+ attributes:
52
+ label: Is there an existing issue for this?
53
+ description: Please search [our issues](https://github.com/unum-cloud/usearch/issues) to see if this bug already exists.
54
+ options:
55
+ - label: I have searched the existing issues
56
+ required: true
57
+ - type: checkboxes
58
+ id: terms
59
+ attributes:
60
+ label: Code of Conduct
61
+ description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/unum-cloud/usearch/blob/main/CODE_OF_CONDUCT.md)
62
+ options:
63
+ - label: I agree to follow this project's Code of Conduct
64
+ required: true
@@ -7,6 +7,7 @@ on:
7
7
  env:
8
8
  BUILD_TYPE: Release
9
9
  GH_TOKEN: ${{ secrets.SEMANTIC_RELEASE_TOKEN }}
10
+ PYTHONUTF8: 1
10
11
 
11
12
  # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
12
13
  permissions:
@@ -16,40 +17,51 @@ permissions:
16
17
 
17
18
  jobs:
18
19
 
19
- # versioning:
20
- # name: Semantic Release
21
- # runs-on: ubuntu-latest
22
- # steps:
23
- # - uses: actions/checkout@v3
24
- # with:
25
- # persist-credentials: false
26
- # - uses: actions/setup-node@v3
27
- # - run: cp .github/workflows/package.json . && npm install && npx semantic-release
20
+ versioning:
21
+ name: Semantic Release
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v3
25
+ with:
26
+ persist-credentials: false
27
+ - uses: actions/setup-node@v3
28
+ - run: npm install --save-dev @semantic-release/exec @semantic-release/git conventional-changelog-eslint semantic-release && npx semantic-release
28
29
 
29
30
  build_wheels:
30
31
  name: Build Wheels for ${{ matrix.os }}
32
+ needs: versioning
31
33
  runs-on: ${{ matrix.os }}
32
- # needs: versioning
33
34
  strategy:
34
35
  matrix:
35
- os: [ubuntu-20.04, macOS-11]
36
+ os: [ubuntu-20.04, macOS-11, windows-2022]
36
37
 
37
38
  steps:
38
39
  - uses: actions/checkout@v3
39
40
  with:
40
41
  ref: 'main'
41
42
  - uses: actions/setup-python@v3
42
- - uses: crazy-max/ghaction-setup-docker@v1.0.0
43
+
44
+ - name: Setup Docker
45
+ if: matrix.os != 'windows-2022'
46
+ uses: crazy-max/ghaction-setup-docker@v1.0.0
43
47
  with:
44
48
  version: 23.0.1
45
- - uses: docker/setup-qemu-action@v2.1.0
49
+
50
+ - name: Setup QEMU
51
+ if: matrix.os != 'windows-2022'
52
+ uses: docker/setup-qemu-action@v2.1.0
46
53
 
47
54
  - name: Install CIBuildWheel
48
55
  run: python -m pip install cibuildwheel
49
56
 
50
- - name: Build wheels
57
+ - name: Build wheels for Windows
58
+ if: matrix.os == 'windows-2022'
59
+ run: python -m cibuildwheel
60
+
61
+ - name: Build wheels for POSIX
62
+ if: matrix.os != 'windows-2022'
51
63
  run: python -m cibuildwheel
52
-
64
+
53
65
  - uses: actions/upload-artifact@v3
54
66
  with:
55
67
  path: ./wheelhouse/*.whl
@@ -57,8 +69,8 @@ jobs:
57
69
 
58
70
  publish_python:
59
71
  name: Publish Python
60
- runs-on: ubuntu-20.04
61
72
  needs: build_wheels
73
+ runs-on: ubuntu-20.04
62
74
  environment:
63
75
  name: pypi
64
76
  url: https://pypi.org/p/usearch
@@ -74,15 +86,18 @@ jobs:
74
86
  - name: Publish to PyPi
75
87
  uses: pypa/gh-action-pypi-publish@release/v1
76
88
  with:
77
- packages_dir: ./dist/artifact
89
+ packages-dir: ./dist/artifact
78
90
  verbose: true
79
- print_hash: true
91
+ print-hash: true
80
92
 
81
93
  publish_javascript:
82
94
  name: Publish JavaScript
95
+ needs: versioning
83
96
  runs-on: ubuntu-latest
84
97
  steps:
85
98
  - uses: actions/checkout@v3
99
+ with:
100
+ ref: 'main'
86
101
  - run: git submodule update --init --recursive
87
102
  - uses: actions/setup-node@v3
88
103
  with:
@@ -96,9 +111,12 @@ jobs:
96
111
 
97
112
  publish_rust:
98
113
  name: Publish Rust
114
+ needs: versioning
99
115
  runs-on: ubuntu-latest
100
116
  steps:
101
117
  - uses: actions/checkout@v3
118
+ with:
119
+ ref: 'main'
102
120
  - run: git submodule update --init --recursive
103
121
  - uses: actions-rs/toolchain@v1
104
122
  with:
@@ -110,19 +128,22 @@ jobs:
110
128
 
111
129
  publish_java:
112
130
  name: Publish Java
131
+ needs: versioning
113
132
  runs-on: ubuntu-latest
114
133
  permissions:
115
134
  contents: read
116
135
  packages: write
117
136
  steps:
118
137
  - uses: actions/checkout@v3
138
+ with:
139
+ ref: 'main'
119
140
  - run: git submodule update --init --recursive
120
141
  - uses: actions/setup-java@v3
121
142
  with:
122
143
  java-version: '11'
123
144
  distribution: 'adopt'
124
145
  - name: Setup Gradle
125
- uses: gradle/gradle-build-action@v2
146
+ uses: gradle/gradle-build-action@v2.4.2
126
147
  - name: Execute Gradle build
127
148
  run: gradle clean build
128
149
  - name: Publish package
@@ -132,9 +153,12 @@ jobs:
132
153
 
133
154
  publish_swift:
134
155
  name: Publish ObjC & Swift
156
+ needs: versioning
135
157
  runs-on: macos-latest
136
158
  steps:
137
159
  - uses: actions/checkout@v3
160
+ with:
161
+ ref: 'main'
138
162
  - run: git submodule update --init --recursive
139
163
  - name: Build
140
164
  run: swift build
@@ -147,7 +171,8 @@ jobs:
147
171
  name: github-pages
148
172
  url: ${{ steps.deployment.outputs.page_url }}
149
173
  runs-on: ubuntu-22.04
150
- needs: publish_python
174
+ if: ${{ always() }}
175
+ needs: [publish_python, publish_javascript, publish_rust, publish_java, publish_swift]
151
176
  steps:
152
177
  - name: Checkout
153
178
  uses: actions/checkout@v3
@@ -0,0 +1,6 @@
1
+ #!/bin/sh
2
+
3
+ echo $1 > VERSION &&
4
+ sed -i "s/\"version\": \".*\"/\"version\": \"$1\"/" package.json &&
5
+ sed -i "s/version = \".*\"/version = \"$1\"/" Cargo.toml &&
6
+ sed -i "s/version = '.*'/version = '$1'/" conanfile.py
package/.releaserc ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "branches": [
3
+ "main"
4
+ ],
5
+ "debug": true,
6
+ "ci": true,
7
+ "dryRun": false,
8
+ "plugins": [
9
+ [
10
+ "@semantic-release/commit-analyzer",
11
+ {
12
+ "preset": "eslint",
13
+ "releaseRules": [
14
+ {
15
+ "tag": "Add",
16
+ "release": "minor"
17
+ },
18
+ {
19
+ "tag": "Improve",
20
+ "release": "patch"
21
+ },
22
+ {
23
+ "tag": "Make",
24
+ "release": "patch"
25
+ },
26
+ {
27
+ "tag": "Refactor",
28
+ "release": false
29
+ }
30
+ ]
31
+ }
32
+ ],
33
+ [
34
+ "@semantic-release/release-notes-generator",
35
+ {
36
+ "preset": "eslint",
37
+ "releaseRules": [
38
+ {
39
+ "tag": "Add",
40
+ "release": "minor"
41
+ },
42
+ {
43
+ "tag": "Improve",
44
+ "release": "patch"
45
+ },
46
+ {
47
+ "tag": "Make",
48
+ "release": "patch"
49
+ },
50
+ {
51
+ "tag": "Refactor",
52
+ "release": false
53
+ }
54
+ ]
55
+ }
56
+ ],
57
+ "@semantic-release/github",
58
+ [
59
+ "@semantic-release/exec",
60
+ {
61
+ "prepareCmd": "bash .github/workflows/update_version.sh '${nextRelease.version}'"
62
+ }
63
+ ],
64
+ [
65
+ "@semantic-release/git",
66
+ {
67
+ "assets": [
68
+ "VERSION",
69
+ "conanfile.py",
70
+ "package.json",
71
+ "Cargo.toml",
72
+ ],
73
+ "message": "Build: Released ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
74
+ }
75
+ ]
76
+ ]
77
+ }
@@ -98,20 +98,32 @@
98
98
  "filesystem": "cpp",
99
99
  "__availability": "cpp",
100
100
  "version": "cpp",
101
- "future": "cpp"
101
+ "future": "cpp",
102
+ "__verbose_abort": "cpp"
102
103
  },
103
104
  "cSpell.words": [
104
105
  "astype",
106
+ "BLAS",
107
+ "cflags",
108
+ "downcasted",
109
+ "Downcasting",
105
110
  "dtype",
106
111
  "equidimensional",
112
+ "FAISS",
107
113
  "hashable",
114
+ "HNSW",
108
115
  "jaccard",
109
116
  "longlong",
110
117
  "memmap",
118
+ "Napi",
111
119
  "ndim",
120
+ "Numba",
112
121
  "preprocess",
122
+ "Quickstart",
113
123
  "simsimd",
114
- "usearch"
124
+ "SLOC",
125
+ "usearch",
126
+ "usecases"
115
127
  ],
116
128
  "java.configuration.updateBuildConfiguration": "interactive"
117
129
  }
@@ -0,0 +1,128 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, religion, or sexual identity
10
+ and orientation.
11
+
12
+ We pledge to act and interact in ways that contribute to an open, welcoming,
13
+ diverse, inclusive, and healthy community.
14
+
15
+ ## Our Standards
16
+
17
+ Examples of behavior that contributes to a positive environment for our
18
+ community include:
19
+
20
+ * Demonstrating empathy and kindness toward other people
21
+ * Being respectful of differing opinions, viewpoints, and experiences
22
+ * Giving and gracefully accepting constructive feedback
23
+ * Accepting responsibility and apologizing to those affected by our mistakes,
24
+ and learning from the experience
25
+ * Focusing on what is best not just for us as individuals, but for the
26
+ overall community
27
+
28
+ Examples of unacceptable behavior include:
29
+
30
+ * The use of sexualized language or imagery, and sexual attention or
31
+ advances of any kind
32
+ * Trolling, insulting or derogatory comments, and personal or political attacks
33
+ * Public or private harassment
34
+ * Publishing others' private information, such as a physical or email
35
+ address, without their explicit permission
36
+ * Other conduct which could reasonably be considered inappropriate in a
37
+ professional setting
38
+
39
+ ## Enforcement Responsibilities
40
+
41
+ Community leaders are responsible for clarifying and enforcing our standards of
42
+ acceptable behavior and will take appropriate and fair corrective action in
43
+ response to any behavior that they deem inappropriate, threatening, offensive,
44
+ or harmful.
45
+
46
+ Community leaders have the right and responsibility to remove, edit, or reject
47
+ comments, commits, code, wiki edits, issues, and other contributions that are
48
+ not aligned to this Code of Conduct, and will communicate reasons for moderation
49
+ decisions when appropriate.
50
+
51
+ ## Scope
52
+
53
+ This Code of Conduct applies within all community spaces, and also applies when
54
+ an individual is officially representing the community in public spaces.
55
+ Examples of representing our community include using an official e-mail address,
56
+ posting via an official social media account, or acting as an appointed
57
+ representative at an online or offline event.
58
+
59
+ ## Enforcement
60
+
61
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
62
+ reported to the community leaders responsible for enforcement at
63
+ info@unum.cloud.
64
+ All complaints will be reviewed and investigated promptly and fairly.
65
+
66
+ All community leaders are obligated to respect the privacy and security of the
67
+ reporter of any incident.
68
+
69
+ ## Enforcement Guidelines
70
+
71
+ Community leaders will follow these Community Impact Guidelines in determining
72
+ the consequences for any action they deem in violation of this Code of Conduct:
73
+
74
+ ### 1. Correction
75
+
76
+ **Community Impact**: Use of inappropriate language or other behavior deemed
77
+ unprofessional or unwelcome in the community.
78
+
79
+ **Consequence**: A private, written warning from community leaders, providing
80
+ clarity around the nature of the violation and an explanation of why the
81
+ behavior was inappropriate. A public apology may be requested.
82
+
83
+ ### 2. Warning
84
+
85
+ **Community Impact**: A violation through a single incident or series
86
+ of actions.
87
+
88
+ **Consequence**: A warning with consequences for continued behavior. No
89
+ interaction with the people involved, including unsolicited interaction with
90
+ those enforcing the Code of Conduct, for a specified period of time. This
91
+ includes avoiding interactions in community spaces as well as external channels
92
+ like social media. Violating these terms may lead to a temporary or
93
+ permanent ban.
94
+
95
+ ### 3. Temporary Ban
96
+
97
+ **Community Impact**: A serious violation of community standards, including
98
+ sustained inappropriate behavior.
99
+
100
+ **Consequence**: A temporary ban from any sort of interaction or public
101
+ communication with the community for a specified period of time. No public or
102
+ private interaction with the people involved, including unsolicited interaction
103
+ with those enforcing the Code of Conduct, is allowed during this period.
104
+ Violating these terms may lead to a permanent ban.
105
+
106
+ ### 4. Permanent Ban
107
+
108
+ **Community Impact**: Demonstrating a pattern of violation of community
109
+ standards, including sustained inappropriate behavior, harassment of an
110
+ individual, or aggression toward or disparagement of classes of individuals.
111
+
112
+ **Consequence**: A permanent ban from any sort of public interaction within
113
+ the community.
114
+
115
+ ## Attribution
116
+
117
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118
+ version 2.0, available at
119
+ https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120
+
121
+ Community Impact Guidelines were inspired by [Mozilla's code of conduct
122
+ enforcement ladder](https://github.com/mozilla/diversity).
123
+
124
+ [homepage]: https://www.contributor-covenant.org
125
+
126
+ For answers to common questions about this code of conduct, see the FAQ at
127
+ https://www.contributor-covenant.org/faq. Translations are available at
128
+ https://www.contributor-covenant.org/translations.
@@ -0,0 +1,12 @@
1
+ # Contribution Guide
2
+
3
+ Thank you for even opening this page!
4
+ It's always nice to have third-party contributors!
5
+
6
+ ---
7
+
8
+ To keep the quality of the code high, we have a set of guidelines common to all Unum projects.
9
+
10
+ - Whats the procedure? [answered](https://github.com/unum-cloud/awesome/blob/main/Workflow.md#organizing-software-development)
11
+ - How to organize branches? [answered](https://github.com/unum-cloud/awesome/blob/main/Workflow.md#branches)
12
+ - How to style commits? [answered](https://github.com/unum-cloud/awesome/blob/main/Workflow.md#commits)
package/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "usearch"
3
- version = "0.2.3"
3
+ version = "0.4.0"
4
4
  authors = ["Ashot Vardanian <1983160+ashvardanian@users.noreply.github.com>"]
5
5
  description = "Smaller & Faster Single-File Vector Search Engine from Unum"
6
6
  edition = "2021"