pyvectorhound 0.1.0__tar.gz → 1.1.0__tar.gz

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.
Files changed (61) hide show
  1. pyvectorhound-1.1.0/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  2. pyvectorhound-1.1.0/.github/ISSUE_TEMPLATE/feature_request.md +27 -0
  3. pyvectorhound-1.1.0/.github/dependabot.yml +35 -0
  4. pyvectorhound-1.1.0/.github/workflows/ci.yml +47 -0
  5. pyvectorhound-1.1.0/.pre-commit-config.yaml +33 -0
  6. pyvectorhound-1.1.0/ARCHITECTURE.md +249 -0
  7. pyvectorhound-1.1.0/CODE_OF_CONDUCT.md +9 -0
  8. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/Cargo.lock +16 -16
  9. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/Cargo.toml +2 -2
  10. pyvectorhound-1.1.0/Makefile +49 -0
  11. pyvectorhound-1.1.0/OKF_INTEGRATION.md +450 -0
  12. pyvectorhound-0.1.0/README.md → pyvectorhound-1.1.0/PKG-INFO +251 -79
  13. pyvectorhound-0.1.0/PKG-INFO → pyvectorhound-1.1.0/README.md +189 -130
  14. pyvectorhound-1.1.0/ROADMAP.md +73 -0
  15. pyvectorhound-1.1.0/SECURITY.md +56 -0
  16. pyvectorhound-1.1.0/examples/retrieval_debug.py +38 -0
  17. pyvectorhound-1.1.0/install.sh +32 -0
  18. pyvectorhound-1.1.0/pyproject.toml +114 -0
  19. pyvectorhound-1.1.0/pyvectorhound/__init__.py +58 -0
  20. pyvectorhound-1.1.0/pyvectorhound/_safe_exec.py +39 -0
  21. pyvectorhound-1.1.0/pyvectorhound/backends.py +427 -0
  22. pyvectorhound-1.1.0/pyvectorhound/cli.py +314 -0
  23. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/pyvectorhound/database.py +6 -2
  24. pyvectorhound-1.1.0/pyvectorhound/error_messages.py +133 -0
  25. pyvectorhound-1.1.0/pyvectorhound/errors.py +77 -0
  26. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/pyvectorhound/hound.py +4 -4
  27. pyvectorhound-1.1.0/pyvectorhound/logging_config.py +81 -0
  28. pyvectorhound-1.1.0/pyvectorhound/okf_diagnostics.py +310 -0
  29. pyvectorhound-1.1.0/pyvectorhound/py.typed +0 -0
  30. pyvectorhound-1.1.0/pyvectorhound/server.py +241 -0
  31. pyvectorhound-1.1.0/pyvectorhound/validation.py +125 -0
  32. pyvectorhound-1.1.0/rust-toolchain.toml +3 -0
  33. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/src/lib.rs +7 -5
  34. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/src/metrics.rs +20 -9
  35. pyvectorhound-1.1.0/tests/test_okf_diagnostics.py +288 -0
  36. pyvectorhound-1.1.0/tests/test_vector_operations.py +291 -0
  37. pyvectorhound-0.1.0/BENCHMARKS_AND_COMPARISON.md +0 -408
  38. pyvectorhound-0.1.0/GITHUB_OPTIMIZATION_GUIDE.md +0 -221
  39. pyvectorhound-0.1.0/IMPLEMENTATION_STATUS.md +0 -414
  40. pyvectorhound-0.1.0/INSTALL.md +0 -72
  41. pyvectorhound-0.1.0/ROADMAP.md +0 -212
  42. pyvectorhound-0.1.0/pyproject.toml +0 -84
  43. pyvectorhound-0.1.0/pyvectorhound/__init__.py +0 -18
  44. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/.gitignore +0 -0
  45. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/CHANGELOG.md +0 -0
  46. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/CONTRIBUTING.md +0 -0
  47. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/LICENSE +0 -0
  48. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/ARCHITECTURE.md +0 -0
  49. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/GUIDE.md +0 -0
  50. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PYHOUND_FINAL_STATUS.md +0 -0
  51. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PyHound_COMPETITIVE_ROADMAP.md +0 -0
  52. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PyHound_FINAL_PRODUCT.md +0 -0
  53. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PyHound_GITHUB_LAUNCH.md +0 -0
  54. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PyHound_LAUNCH_CHECKLIST.md +0 -0
  55. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PyHound_UNIFICATION_STRATEGY.md +0 -0
  56. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/docs/strategy/PyHound_vs_Observability.md +0 -0
  57. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/pyvectorhound/comparison.py +0 -0
  58. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/pyvectorhound/diagnosis.py +0 -0
  59. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/pyvectorhound/scorer.py +0 -0
  60. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/tests/test_diagnosis.py +0 -0
  61. {pyvectorhound-0.1.0 → pyvectorhound-1.1.0}/tests/test_hound.py +0 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: Bug Report
3
+ about: Report a bug to help us improve
4
+ title: "[BUG] "
5
+ labels: bug
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Description
10
+ Briefly describe the bug.
11
+
12
+ ## Steps to Reproduce
13
+ 1. ...
14
+ 2. ...
15
+ 3. ...
16
+
17
+ ## Expected Behavior
18
+ What should happen?
19
+
20
+ ## Actual Behavior
21
+ What actually happened?
22
+
23
+ ## Environment
24
+ - OS: [e.g. macOS, Linux, Windows]
25
+ - Python version: [e.g. 3.10]
26
+ - Library version: [e.g. 2.0.0]
27
+
28
+ ## Minimal Example
29
+ ```python
30
+ # Minimal code to reproduce the bug
31
+ ```
32
+
33
+ ## Error Message
34
+ ```
35
+ # Paste full error traceback here
36
+ ```
37
+
38
+ ## Additional Context
39
+ Any other context about the issue?
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: Feature Request
3
+ about: Suggest an idea to improve the project
4
+ title: "[FEATURE] "
5
+ labels: enhancement
6
+ assignees: ''
7
+ ---
8
+
9
+ ## Problem Statement
10
+ Describe the problem this feature would solve.
11
+
12
+ ## Proposed Solution
13
+ How should this feature work?
14
+
15
+ ## Use Case
16
+ What use case does this solve?
17
+
18
+ ## Example
19
+ ```python
20
+ # Example of how this would be used
21
+ ```
22
+
23
+ ## Alternatives
24
+ Any alternative approaches you've considered?
25
+
26
+ ## Additional Context
27
+ Any other context or screenshots?
@@ -0,0 +1,35 @@
1
+ version: 2
2
+ updates:
3
+ # Python dependencies (pip/pyproject.toml)
4
+ - package-ecosystem: "pip"
5
+ directory: "/"
6
+ schedule:
7
+ interval: "weekly"
8
+ day: "monday"
9
+ time: "03:00"
10
+ open-pull-requests-limit: 5
11
+ reviewers:
12
+ - "Mullassery"
13
+ labels:
14
+ - "dependencies"
15
+ - "python"
16
+ commit-message:
17
+ prefix: "chore(deps):"
18
+ include: "scope"
19
+
20
+ # GitHub Actions
21
+ - package-ecosystem: "github-actions"
22
+ directory: "/"
23
+ schedule:
24
+ interval: "weekly"
25
+ day: "monday"
26
+ time: "03:00"
27
+ open-pull-requests-limit: 3
28
+ reviewers:
29
+ - "Mullassery"
30
+ labels:
31
+ - "dependencies"
32
+ - "ci"
33
+ commit-message:
34
+ prefix: "chore(ci):"
35
+ include: "scope"
@@ -0,0 +1,47 @@
1
+ name: Tests & Build
2
+
3
+ on:
4
+ push:
5
+ branches: [main, develop]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ rust-build:
11
+ name: Rust Build & Test
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+
16
+ - uses: dtolnay/rust-toolchain
17
+
18
+ - uses: Swatinem/rust-cache@v2
19
+
20
+ - name: Build Rust
21
+ run: cargo build --release --all-features
22
+
23
+ - name: Test Rust
24
+ run: cargo test --release --all-features
25
+
26
+ python-tests:
27
+ name: Python Tests (Python ${{ matrix.python-version }})
28
+ runs-on: ubuntu-latest
29
+ strategy:
30
+ matrix:
31
+ python-version: ["3.9", "3.10", "3.11", "3.12"]
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+
35
+ - uses: dtolnay/rust-toolchain
36
+
37
+ - uses: Swatinem/rust-cache@v2
38
+
39
+ - uses: actions/setup-python@v4
40
+ with:
41
+ python-version: ${{ matrix.python-version }}
42
+
43
+ - name: Install dependencies
44
+ run: pip install -e ".[dev]"
45
+
46
+ - name: Run pytest
47
+ run: pytest tests/ -v --tb=short
@@ -0,0 +1,33 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.5.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - id: check-added-large-files
9
+ args: ['--maxkb=500']
10
+
11
+ - repo: https://github.com/rust-lang/rust-clippy
12
+ rev: v1.77.0
13
+ hooks:
14
+ - id: clippy
15
+ args: ['--all-targets', '--', '-W', 'clippy::all']
16
+
17
+ - repo: https://github.com/rust-lang/rustfmt
18
+ rev: v1.7.0
19
+ hooks:
20
+ - id: rustfmt
21
+
22
+ - repo: https://github.com/psf/black
23
+ rev: 24.1.1
24
+ hooks:
25
+ - id: black
26
+ language_version: python3
27
+
28
+ - repo: https://github.com/astral-sh/ruff-pre-commit
29
+ rev: v0.2.0
30
+ hooks:
31
+ - id: ruff
32
+ args: ['--fix']
33
+ - id: ruff-format
@@ -0,0 +1,249 @@
1
+ # PyVectorHound Architecture & PyStreamMCP Integration
2
+
3
+ ## Mission
4
+
5
+ **Debug & Optimize Retrieval**
6
+
7
+ Core Question: Why did this retrieval work (or fail)? How do we improve it?
8
+
9
+ ## Core Responsibility
10
+
11
+ PyVectorHound is **exclusively responsible** for:
12
+
13
+ - **Retrieval Debugging** — Understanding why queries returned specific results
14
+ - **Relevance Analysis** — Scoring retrieved documents for relevance
15
+ - **Failure Analysis** — Root-cause analysis of retrieval failures
16
+ - **Replay & Forensics** — Replaying queries to debug issues
17
+ - **Quality Scoring** — Measuring retrieval quality
18
+ - **Attribution Analysis** — Tracing why a result was retrieved
19
+
20
+ ## What We Do NOT Own
21
+
22
+ ### ❌ Query Optimization (PyStreamMCP)
23
+ - Query planning
24
+ - Source discovery
25
+ - Token optimization
26
+ - Streaming retrieval
27
+ - Cost estimation
28
+
29
+ **Our role:** Debug & analyze queries that PyStreamMCP produces.
30
+
31
+ ### ❌ Data Validation (StatGuardian)
32
+ - Schema validation
33
+ - Data freshness
34
+ - Drift detection
35
+
36
+ **Our role:** Assume data is valid, focus on why it was/wasn't retrieved.
37
+
38
+ ## Critical: Use PyStreamMCP, Don't Rebuild It
39
+
40
+ **IMPORTANT:** PyVectorHound must integrate with PyStreamMCP rather than rebuilding query functionality.
41
+
42
+ ### Architecture Pattern
43
+
44
+ ```
45
+ Query
46
+
47
+ PyStreamMCP (Optimization & Execution)
48
+
49
+ Retrieval Results
50
+
51
+ PyVectorHound (Debug & Analyze)
52
+
53
+ Root Cause Analysis & Insights
54
+
55
+ Feedback Loop to PyStreamMCP
56
+ ```
57
+
58
+ ### Integration Example
59
+
60
+ ```python
61
+ # ✅ CORRECT: Use PyStreamMCP's query execution
62
+ from pystreammcp import Agent, QueryExecutor
63
+ from pyvectorhound import RetrievalDebugger
64
+
65
+ # Create query with PyStreamMCP
66
+ agent = Agent(agent_id="debug_query")
67
+ query_result = agent.query("customer data")
68
+
69
+ # Debug why this query returned these results
70
+ debugger = RetrievalDebugger(query_result)
71
+ analysis = debugger.analyze()
72
+ # - Why were these documents retrieved?
73
+ # - What sources were queried?
74
+ # - What was the token cost?
75
+ # - Could we have done better?
76
+
77
+ # Get root causes
78
+ root_causes = analysis.root_causes()
79
+ # - Low relevance due to source X
80
+ # - Token budget exceeded, missing source Y
81
+ # - Query optimization missed source Z
82
+
83
+ # Recommend improvements
84
+ improvements = analysis.recommend_improvements()
85
+ # - Use token_efficient strategy
86
+ # - Include source Z in next run
87
+ # - Adjust relevance threshold
88
+ ```
89
+
90
+ ### What NOT to Do
91
+
92
+ ❌ **WRONG: Don't rebuild PyStreamMCP's functionality**
93
+
94
+ ```python
95
+ # ❌ DO NOT DO THIS
96
+ class QueryOptimizer:
97
+ def discover_sources(self): # ← PyStreamMCP owns this
98
+ pass
99
+
100
+ def optimize_for_tokens(self): # ← PyStreamMCP owns this
101
+ pass
102
+
103
+ def estimate_cost(self): # ← PyStreamMCP owns this
104
+ pass
105
+ ```
106
+
107
+ Instead, use PyStreamMCP's QueryExecutor:
108
+ ```python
109
+ # ✅ DO THIS
110
+ from pystreammcp import QueryExecutor
111
+
112
+ executor = QueryExecutor()
113
+ result = executor.execute_query(optimized_query)
114
+
115
+ # Then debug the result
116
+ debugger = RetrievalDebugger(result)
117
+ ```
118
+
119
+ ### Why?
120
+
121
+ PyStreamMCP already provides:
122
+ - ✓ Query planning & optimization
123
+ - ✓ Context discovery (6+ framework integrations)
124
+ - ✓ 7 optimization techniques
125
+ - ✓ Cost tracking & estimation
126
+ - ✓ Token efficiency (60-75% reduction)
127
+ - ✓ Streaming execution
128
+ - ✓ Multi-agent optimization
129
+
130
+ Rebuilding this in PyVectorHound would:
131
+ - Duplicate 1000+ lines of code
132
+ - Miss learned optimizations
133
+ - Create maintenance burden
134
+ - Break integration with PyStreamMCP
135
+
136
+ ## Focused Responsibility
137
+
138
+ PyVectorHound excels at what it's built for:
139
+
140
+ ✓ **Why did retrieval fail?**
141
+ - Which sources had no matches?
142
+ - Why were expected documents missing?
143
+ - Did token budget cause truncation?
144
+ - Was relevance threshold too high?
145
+
146
+ ✓ **Can we do better?**
147
+ - Which optimization would help most?
148
+ - Should we use different sources?
149
+ - Can we adjust token allocation?
150
+ - What does the replay show?
151
+
152
+ ✓ **Root Cause Analysis**
153
+ - 8-failure taxonomy
154
+ - Automatic classification
155
+ - Replay debugging
156
+ - Forensic analysis
157
+
158
+ ## Integration Points
159
+
160
+ ### With PyStreamMCP (Primary Integration)
161
+
162
+ ```python
163
+ from pystreammcp import QueryExecutor, Agent
164
+ from pyvectorhound import RetrievalDebugger, RootCauseAnalyzer
165
+
166
+ # Execute query using PyStreamMCP
167
+ executor = QueryExecutor()
168
+ result = executor.execute_query(
169
+ query="customer data",
170
+ strategy="token_efficient"
171
+ )
172
+
173
+ # Debug the result
174
+ debugger = RetrievalDebugger(result)
175
+ analysis = debugger.analyze()
176
+
177
+ # Get root causes using PyVectorHound's forensics
178
+ analyzer = RootCauseAnalyzer()
179
+ causes = analyzer.analyze(analysis)
180
+
181
+ # Example causes:
182
+ # - TokenBudgetExceeded: "Missing source X due to token limit"
183
+ # - LowRelevanceScore: "Document below 0.5 threshold"
184
+ # - SourceNotQueried: "Source Y not discovered by PyStreamMCP"
185
+ ```
186
+
187
+ ### With StatGuardian
188
+
189
+ ```python
190
+ from statguardian import ValidationGate
191
+ from pyvectorhound import RetrievalDebugger
192
+
193
+ # Check if data is valid before analyzing
194
+ validation = ValidationGate.check(source="customer_data")
195
+
196
+ if validation.is_valid():
197
+ # Safe to debug
198
+ debugger = RetrievalDebugger(result)
199
+ else:
200
+ # Data quality issue, not a retrieval issue
201
+ print(f"Data quality issue: {validation.error}")
202
+ ```
203
+
204
+ ## Module Structure
205
+
206
+ ```
207
+ src/
208
+ ├── debugger.rs # Core retrieval debugging
209
+ ├── analyzer.rs # Root cause analysis
210
+ ├── failure_taxonomy.rs # 8 failure types
211
+ ├── replay.rs # Query replay for debugging
212
+ ├── forensics/ # Forensic analysis
213
+ │ ├── source_analysis.rs
214
+ │ ├── relevance_analysis.rs
215
+ │ └── token_analysis.rs
216
+ └── storage/ # Debug data persistence
217
+ ```
218
+
219
+ ## Philosophy
220
+
221
+ PyVectorHound is to retrieval debugging what a debugger is to code execution.
222
+
223
+ - A code debugger doesn't write programs, it debugs them
224
+ - A database profiler doesn't optimize queries, it analyzes them
225
+ - PyVectorHound doesn't optimize retrieval, it debugs it
226
+
227
+ PyStreamMCP handles optimization. PyVectorHound explains why it worked or didn't.
228
+
229
+ ## Outcome
230
+
231
+ When properly integrated:
232
+
233
+ ```
234
+ Query Submitted
235
+
236
+ PyStreamMCP executes with optimizations
237
+
238
+ Results Retrieved
239
+
240
+ PyVectorHound analyzes the result
241
+
242
+ Root cause identified
243
+
244
+ Feedback to PyStreamMCP for next run
245
+
246
+ Continuous Improvement
247
+ ```
248
+
249
+ PyStreamMCP optimizes. PyVectorHound debugs. Together they form a complete retrieval intelligence system.
@@ -0,0 +1,9 @@
1
+ # Code of Conduct
2
+
3
+ This project adopts the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/),
4
+ version 2.1.
5
+
6
+ In short: be respectful and constructive. Harassment and discrimination are not tolerated.
7
+
8
+ To report unacceptable behavior, contact the maintainer at mullassery@gmail.com. Reports will
9
+ be handled confidentially.
@@ -1,6 +1,6 @@
1
1
  # This file is automatically @generated by Cargo.
2
2
  # It is not intended for manual editing.
3
- version = 4
3
+ version = 3
4
4
 
5
5
  [[package]]
6
6
  name = "autocfg"
@@ -43,9 +43,9 @@ checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
43
43
 
44
44
  [[package]]
45
45
  name = "matrixmultiply"
46
- version = "0.3.10"
46
+ version = "0.3.11"
47
47
  source = "registry+https://github.com/rust-lang/crates.io-index"
48
- checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
48
+ checksum = "3f607c237553f086e7043417a51df26b2eb899d3caff94e6a67592ff992fedc7"
49
49
  dependencies = [
50
50
  "autocfg",
51
51
  "rawpointer",
@@ -53,9 +53,9 @@ dependencies = [
53
53
 
54
54
  [[package]]
55
55
  name = "memchr"
56
- version = "2.8.2"
56
+ version = "2.8.3"
57
57
  source = "registry+https://github.com/rust-lang/crates.io-index"
58
- checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
58
+ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
59
59
 
60
60
  [[package]]
61
61
  name = "memoffset"
@@ -131,9 +131,9 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
131
131
 
132
132
  [[package]]
133
133
  name = "portable-atomic"
134
- version = "1.13.1"
134
+ version = "1.14.0"
135
135
  source = "registry+https://github.com/rust-lang/crates.io-index"
136
- checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49"
136
+ checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3"
137
137
 
138
138
  [[package]]
139
139
  name = "portable-atomic-util"
@@ -218,7 +218,7 @@ dependencies = [
218
218
 
219
219
  [[package]]
220
220
  name = "pyvectorhound"
221
- version = "0.1.0"
221
+ version = "1.0.0"
222
222
  dependencies = [
223
223
  "numpy",
224
224
  "pyo3",
@@ -243,15 +243,15 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
243
243
 
244
244
  [[package]]
245
245
  name = "rustc-hash"
246
- version = "2.1.2"
246
+ version = "2.1.3"
247
247
  source = "registry+https://github.com/rust-lang/crates.io-index"
248
- checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe"
248
+ checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
249
249
 
250
250
  [[package]]
251
251
  name = "rustversion"
252
- version = "1.0.22"
252
+ version = "1.0.23"
253
253
  source = "registry+https://github.com/rust-lang/crates.io-index"
254
- checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
254
+ checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
255
255
 
256
256
  [[package]]
257
257
  name = "serde"
@@ -298,9 +298,9 @@ dependencies = [
298
298
 
299
299
  [[package]]
300
300
  name = "syn"
301
- version = "2.0.118"
301
+ version = "2.0.119"
302
302
  source = "registry+https://github.com/rust-lang/crates.io-index"
303
- checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
303
+ checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
304
304
  dependencies = [
305
305
  "proc-macro2",
306
306
  "quote",
@@ -327,6 +327,6 @@ checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
327
327
 
328
328
  [[package]]
329
329
  name = "zmij"
330
- version = "1.0.21"
330
+ version = "1.0.23"
331
331
  source = "registry+https://github.com/rust-lang/crates.io-index"
332
- checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
332
+ checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "pyvectorhound"
3
- version = "0.1.0"
3
+ version = "1.0.0"
4
4
  edition = "2021"
5
5
  authors = ["Georgi Mammen Mullassery <mullassery@gmail.com>"]
6
6
  license = "MIT"
@@ -14,5 +14,5 @@ serde = { version = "1.0", features = ["derive"] }
14
14
  serde_json = "1.0"
15
15
 
16
16
  [lib]
17
- name = "pyhound_core"
17
+ name = "_core"
18
18
  crate-type = ["cdylib"]
@@ -0,0 +1,49 @@
1
+ .PHONY: install install-dev build test lint fmt clean help setup-hooks
2
+
3
+ help:
4
+ @echo "pyvectorhound development tasks:"
5
+ @echo " make install Install pre-commit hooks"
6
+ @echo " make build Build release wheel"
7
+ @echo " make test Run all tests"
8
+ @echo " make test-cov Run tests with coverage"
9
+ @echo " make lint Run linters (clippy, black, ruff, mypy)"
10
+ @echo " make fmt Format code"
11
+ @echo " make fmt-check Check format without changing"
12
+ @echo " make clean Remove build artifacts"
13
+
14
+ install: setup-hooks
15
+ @echo "✓ Development environment ready"
16
+
17
+ setup-hooks:
18
+ @command -v pre-commit >/dev/null 2>&1 || pip install pre-commit
19
+ pre-commit install
20
+
21
+ build:
22
+ maturin build --release
23
+
24
+ test:
25
+ pytest -v
26
+
27
+ test-cov:
28
+ pytest -v --cov=pyvectorhound --cov-report=term-missing
29
+
30
+ lint:
31
+ cargo clippy --all-targets
32
+ black --check .
33
+ ruff check .
34
+ mypy pyvectorhound
35
+
36
+ fmt:
37
+ cargo fmt --all
38
+ black .
39
+ ruff check . --fix
40
+
41
+ fmt-check:
42
+ cargo fmt --all -- --check
43
+ black --check .
44
+
45
+ clean:
46
+ cargo clean
47
+ find . -type d -name __pycache__ -exec rm -rf {} +
48
+ find . -type f -name "*.pyc" -delete
49
+ rm -rf build dist *.egg-info .pytest_cache .mypy_cache