diff --git a/Cargo.lock b/Cargo.lock index d2ed0399e..4c4d5c4fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3585,7 +3585,7 @@ checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" [[package]] name = "fsst" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "rand 0.9.5", @@ -5060,7 +5060,7 @@ checksum = "e037a2e1d8d5fdbd49b16a4ea09d5d6401c1f29eca5ff29d03d3824dba16256a" [[package]] name = "lance" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arc-swap", "arrow", @@ -5136,7 +5136,7 @@ dependencies = [ [[package]] name = "lance-arrow" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-buffer", @@ -5158,7 +5158,7 @@ dependencies = [ [[package]] name = "lance-arrow-scalar" version = "58.0.0" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-buffer", @@ -5172,7 +5172,7 @@ dependencies = [ [[package]] name = "lance-arrow-stats" version = "58.0.0" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-schema", @@ -5182,7 +5182,7 @@ dependencies = [ [[package]] name = "lance-bitpacking" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrayref", "crunchy", @@ -5193,7 +5193,7 @@ dependencies = [ [[package]] name = "lance-core" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-buffer", @@ -5231,7 +5231,7 @@ dependencies = [ [[package]] name = "lance-datafusion" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow", "arrow-array", @@ -5263,7 +5263,7 @@ dependencies = [ [[package]] name = "lance-datagen" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow", "arrow-array", @@ -5281,7 +5281,7 @@ dependencies = [ [[package]] name = "lance-derive" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "proc-macro2", "quote", @@ -5291,7 +5291,7 @@ dependencies = [ [[package]] name = "lance-encoding" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-arith", "arrow-array", @@ -5325,7 +5325,7 @@ dependencies = [ [[package]] name = "lance-file" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-arith", "arrow-array", @@ -5358,7 +5358,7 @@ dependencies = [ [[package]] name = "lance-geo" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "datafusion", "geo-traits", @@ -5373,7 +5373,7 @@ dependencies = [ [[package]] name = "lance-index" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arc-swap", "arrow", @@ -5448,7 +5448,7 @@ dependencies = [ [[package]] name = "lance-index-core" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-schema", @@ -5472,7 +5472,7 @@ dependencies = [ [[package]] name = "lance-io" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow", "arrow-array", @@ -5516,7 +5516,7 @@ dependencies = [ [[package]] name = "lance-jsonb" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "byteorder", "ethnum", @@ -5534,7 +5534,7 @@ dependencies = [ [[package]] name = "lance-linalg" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-schema", @@ -5549,7 +5549,7 @@ dependencies = [ [[package]] name = "lance-namespace" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow", "async-trait", @@ -5564,7 +5564,7 @@ dependencies = [ [[package]] name = "lance-namespace-impls" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arc-swap", "arrow", @@ -5619,7 +5619,7 @@ dependencies = [ [[package]] name = "lance-select" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-buffer", @@ -5634,7 +5634,7 @@ dependencies = [ [[package]] name = "lance-table" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow", "arrow-array", @@ -5675,7 +5675,7 @@ dependencies = [ [[package]] name = "lance-testing" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "arrow-array", "arrow-schema", @@ -5689,7 +5689,7 @@ dependencies = [ [[package]] name = "lance-tokenizer" version = "14.0.0-beta.24" -source = "git+https://github.com/lance-format/lance.git?rev=5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd#5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd" +source = "git+https://github.com/lance-format/lance.git?rev=9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97#9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97" dependencies = [ "frostem", "icu_segmenter", diff --git a/Cargo.toml b/Cargo.toml index 7738c7e78..606ba22c9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,20 +13,20 @@ categories = ["database-implementations"] rust-version = "1.94.0" [workspace.dependencies] -lance = { "version" = "=14.0.0-beta.24", default-features = false, "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-core = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-datagen = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-file = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-io = { "version" = "=14.0.0-beta.24", default-features = false, "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-index = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-linalg = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-namespace = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-namespace-impls = { "version" = "=14.0.0-beta.24", default-features = false, "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-table = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-testing = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-datafusion = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-encoding = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } -lance-arrow = { "version" = "=14.0.0-beta.24", "rev" = "5f637a5ded32f0500d4113aefbe4ec4b8c5f42dd", "git" = "https://github.com/lance-format/lance.git" } +lance = { "version" = "=14.0.0-beta.24", default-features = false, "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-core = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-datagen = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-file = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-io = { "version" = "=14.0.0-beta.24", default-features = false, "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-index = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-linalg = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-namespace = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-namespace-impls = { "version" = "=14.0.0-beta.24", default-features = false, "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-table = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-testing = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-datafusion = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-encoding = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } +lance-arrow = { "version" = "=14.0.0-beta.24", "rev" = "9a5e57c0ea4e66fc3c44c4a450d9733bbfd7ba97", "git" = "https://github.com/lance-format/lance.git" } lancedb = { path = "rust/lancedb", default-features = false } ahash = "0.8" # Note that this one does not include pyarrow diff --git a/python/python/tests/test_index.py b/python/python/tests/test_index.py index 2f13e8229..4cc252d40 100644 --- a/python/python/tests/test_index.py +++ b/python/python/tests/test_index.py @@ -448,6 +448,47 @@ async def test_create_ivfrq_index(some_table: AsyncTable, num_bits, layered): assert len(set(actual["id"].to_pylist()) & set(expected["id"].to_pylist())) >= 5 +@pytest.mark.parametrize("num_bits,layered", [(5, False), (5, True), (9, True)]) +def test_create_ivfrq_append_and_optimize(tmp_path, num_bits, layered): + vectors = np.random.default_rng(4252).normal(size=(512, 32)).astype("float32") + data = pa.table( + { + "id": range(len(vectors)), + "vector": pa.FixedSizeListArray.from_arrays( + pa.array(vectors.ravel()), + 32, + mask=pa.array([row in (127, 383) for row in range(len(vectors))]), + ), + } + ) + table = connect(tmp_path).create_table( + "test", data.slice(0, 128), on_bad_vectors="null" + ) + table.add(data.slice(128, 128), on_bad_vectors="null") + table.create_index( + "vector", + config=IvfRq(num_partitions=2, num_bits=num_bits, layered=layered), + ) + for start in (256, 384): + table.add(data.slice(start, 128), on_bad_vectors="null") + table.optimize() + stats = table.index_stats("vector_idx") + assert stats.num_unindexed_rows == 0 + assert stats.num_indexed_rows == start + 128 + expected = ( + table.search(vectors[start]).bypass_vector_index().limit(10).to_arrow() + ) + actual = ( + table.search(vectors[start]) + .nprobes(2) + .refine_factor(4) + .limit(10) + .to_arrow() + ) + assert len(set(actual["id"].to_pylist()) & set(expected["id"].to_pylist())) >= 5 + assert table.to_arrow()["vector"].null_count == 2 + + @pytest.mark.parametrize("num_bits", [1, 2, 5]) @pytest.mark.parametrize("layered", [None, False, True]) def test_create_ivfrq_accelerator_preserves_layout(tmp_path, num_bits, layered):