diff --git a/src/include/detail/linalg/tdb_io.h b/src/include/detail/linalg/tdb_io.h index 95abbbf65..30f4ed3f2 100644 --- a/src/include/detail/linalg/tdb_io.h +++ b/src/include/detail/linalg/tdb_io.h @@ -128,7 +128,10 @@ void create_empty_for_matrix( size_t cols, size_t row_extent, size_t col_extent, - std::optional filter = std::nullopt) { + tiledb_filter_type_t filter) { + tiledb::FilterList filter_list(ctx); + filter_list.add_filter({ctx, filter}); + tiledb::Domain domain(ctx); domain .add_dimensions(tiledb::Dimension::create( @@ -137,18 +140,13 @@ void create_empty_for_matrix( ctx, "cols", {{0, std::max(0, (int)cols - 1)}}, col_extent)); tiledb::ArraySchema schema(ctx, TILEDB_DENSE); - auto order = std::is_same_v ? TILEDB_ROW_MAJOR : TILEDB_COL_MAJOR; schema.set_domain(domain).set_order({{order, order}}); - schema.add_attribute(tiledb::Attribute::create(ctx, "values")); - - if (filter) { - tiledb::FilterList fl(ctx); - fl.add_filter(tiledb::Filter(ctx, *filter)); - schema.set_coords_filter_list(fl); - } + schema.add_attribute( + tiledb::Attribute::create(ctx, "values", filter_list)); + schema.set_coords_filter_list(filter_list); tiledb::Array::create(uri, schema); } @@ -161,7 +159,7 @@ void create_matrix( const tiledb::Context& ctx, const Matrix& A, const std::string& uri, - std::optional filter = std::nullopt) { + tiledb_filter_type_t filter) { // @todo: make this a parameter size_t num_parts = 10; @@ -201,7 +199,7 @@ void write_matrix( scoped_timer _{tdb_func__ + " " + std::string{uri}}; if (create) { - create_matrix(ctx, A, uri); + create_matrix(ctx, A, uri, TILEDB_FILTER_NONE); } if (A.num_rows() == 0 || A.num_cols() == 0) { @@ -252,17 +250,20 @@ void create_empty_for_vector( const tiledb::Context& ctx, const std::string& uri, size_t rows, - size_t row_extent, - std::optional filter = std::nullopt) { + int32_t row_extent, + tiledb_filter_type_t filter) { + tiledb::FilterList filter_list(ctx); + filter_list.add_filter({ctx, filter}); + tiledb::Domain domain(ctx); - domain.add_dimensions(tiledb::Dimension::create( + domain.add_dimensions(tiledb::Dimension::create( ctx, "rows", {{0, std::max(0, (int)rows - 1)}}, row_extent)); - // The array will be dense. tiledb::ArraySchema schema(ctx, TILEDB_DENSE); schema.set_domain(domain).set_order({{TILEDB_COL_MAJOR, TILEDB_COL_MAJOR}}); - - schema.add_attribute(tiledb::Attribute::create(ctx, "values")); + schema.add_attribute( + tiledb::Attribute::create(ctx, "values", filter_list)); + schema.set_coords_filter_list(filter_list); tiledb::Array::create(uri, schema); } @@ -279,7 +280,7 @@ void create_vector( const tiledb::Context& ctx, const V& v, const std::string& uri, - std::optional filter = std::nullopt) { + tiledb_filter_type_t filter) { using value_type = std::ranges::range_value_t; size_t num_parts = 10; @@ -313,7 +314,7 @@ void write_vector( using value_type = std::remove_const_t>; if (create) { - create_vector(ctx, v, uri); + create_vector(ctx, v, uri, TILEDB_FILTER_NONE); } if (size(v) == 0) { diff --git a/src/include/test/unit_api_feature_vector_array.cc b/src/include/test/unit_api_feature_vector_array.cc index b9bcd969c..58a1b0128 100644 --- a/src/include/test/unit_api_feature_vector_array.cc +++ b/src/include/test/unit_api_feature_vector_array.cc @@ -541,7 +541,13 @@ TEST_CASE("load empty matrix", "[api][index]") { } create_empty_for_matrix( - ctx, tmp_matrix_uri, dimension, domain, dimension, tile_extent); + ctx, + tmp_matrix_uri, + dimension, + domain, + dimension, + tile_extent, + TILEDB_FILTER_NONE); auto X = FeatureVectorArray(ctx, tmp_matrix_uri); } diff --git a/src/include/test/unit_tdb_matrix.cc b/src/include/test/unit_tdb_matrix.cc index 02626fca6..e556be61e 100644 --- a/src/include/test/unit_tdb_matrix.cc +++ b/src/include/test/unit_tdb_matrix.cc @@ -286,7 +286,8 @@ TEST_CASE("empty matrix", "[tdb_matrix]") { matrix_dimension, matrix_domain, matrix_dimension, - tile_extent); + tile_extent, + TILEDB_FILTER_NONE); { // No rows and no cols. diff --git a/src/include/test/unit_tdb_matrix_with_ids.cc b/src/include/test/unit_tdb_matrix_with_ids.cc index 826afb8dd..70c50a07f 100644 --- a/src/include/test/unit_tdb_matrix_with_ids.cc +++ b/src/include/test/unit_tdb_matrix_with_ids.cc @@ -260,9 +260,10 @@ TEST_CASE("empty matrix", "[tdb_matrix_with_ids]") { matrix_dimension, matrix_domain, matrix_dimension, - tile_extent); + tile_extent, + TILEDB_FILTER_NONE); create_empty_for_vector( - ctx, tmp_ids_uri, matrix_domain, tile_extent); + ctx, tmp_ids_uri, matrix_domain, tile_extent, TILEDB_FILTER_NONE); { // Empty.