Your message dated Sun, 05 Feb 2023 11:09:01 +0000
with message-id <e1poctj-00aucm...@fasolo.debian.org>
and subject line Bug#1030489: fixed in tiledb-py 0.20.0-1
has caused the Debian Bug report #1030489,
regarding tiledb-py: FTBFS: tiledb/cc/array.cc:149:11: error: no matching 
function for call to ‘pybind11::class_<tiledb::Array>::def(const char [13], 
<unresolved overloaded function type>)’
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1030489: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030489
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: tiledb-py
Version: 0.19.1-1
Severity: serious
Justification: FTBFS
Tags: bookworm sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20230203 ftbfs-bookworm

Hi,

During a rebuild of all packages in sid, your package failed to build
on amd64.


Relevant part (hopefully):
> x86_64-linux-gnu-gcc -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g 
> -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC 
> -I/usr/lib/python3/dist-packages/pybind11/include 
> -I/usr/lib/python3/dist-packages/numpy/core/include -I/usr/include/python3.11 
> -c tiledb/cc/array.cc -o 
> build/temp.linux-x86_64-cpython-311/tiledb/cc/array.o -fvisibility=hidden -g 
> -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat 
> -Werror=format-security -std=c++17 -Wno-deprecated-declarations 
> -fvisibility=hidden
> tiledb/cc/array.cc: In function ‘void 
> libtiledbcpp::init_array(pybind11::module&)’:
> tiledb/cc/array.cc:149:11: error: no matching function for call to 
> ‘pybind11::class_<tiledb::Array>::def(const char [13], <unresolved overloaded 
> function type>)’
>    15 |   py::class_<tiledb::Array>(m, "Array")
>       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    16 |       //.def(py::init<py::object, py::object, py::iterable, 
> py::object,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    17 |       //              py::object, py::object>())
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    18 |       .def(
>       |       ~~~~~
>    19 |           py::init<const Context &, const std::string &, 
> tiledb_query_type_t>(),
>       |           
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    20 |           py::keep_alive<1, 2>() /* Array keeps Context alive */)
>       |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    21 |       // TODO capsule Array(const Context& ctx, tiledb_array_t* 
> carray,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    22 |       // tiledb_config_t* config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    23 |       .def("is_open", &Array::is_open)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    24 |       .def("uri", &Array::uri)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    25 |       .def("schema", &Array::schema)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    26 |       //.def("ptr", [](Array& arr){ return py::capsule(arr.ptr()); } )
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    27 |       // open with encryption key
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    28 |       .def("open",
>       |       ~~~~~~~~~~~~
>    29 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    30 |                             const std::string &)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~
>    31 |                Array::open)
>       |                ~~~~~~~~~~~~
>    32 |       // open with encryption key and timestamp
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    33 |       .def("open",
>       |       ~~~~~~~~~~~~
>    34 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    35 |                             const std::string &, uint64_t)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    36 |                Array::open)
>       |                ~~~~~~~~~~~~
>    37 |       .def("reopen", &Array::reopen)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    38 |       .def("set_open_timestamp_start", 
> &Array::set_open_timestamp_start)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    39 |       .def("set_open_timestamp_end", &Array::set_open_timestamp_end)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    40 |       .def_property_readonly("open_timestamp_start",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    41 |                              &Array::open_timestamp_start)
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    42 |       .def_property_readonly("open_timestamp_end", 
> &Array::open_timestamp_end)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    43 |       .def("set_config", &Array::set_config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    44 |       .def("config", &Array::config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    45 |       .def("close", &Array::close)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    46 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    47 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    48 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    49 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    50 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    51 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    52 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    53 |       //(void (Array::*)(const Context&, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    54 |       //                 tiledb_encryption_type_t, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    55 |       //                 Config* 
> const)&Array::consolidate)&Array::consolidate)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    56 |       .def("vacuum", &Array::vacuum)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    57 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    58 |            py::overload_cast<const std::string &, const ArraySchema &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    59 |                              tiledb_encryption_type_t, const 
> std::string &>(
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    60 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    61 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    62 |            py::overload_cast<const std::string &, const ArraySchema 
> &>(
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    63 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    64 |       .def("load_schema",
>       |       ~~~~~~~~~~~~~~~~~~~
>    65 |            py::overload_cast<const Context &, const std::string &>(
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    66 |                &Array::load_schema))
>       |                ~~~~~~~~~~~~~~~~~~~~~
>    67 |       .def("encryption_type", &Array::encryption_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    68 | 
>       |            
>    69 |       // TODO non_empty_domain
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    70 |       // TODO non_empty_domain_var
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    71 | 
>       |            
>    72 |       .def("query_type", &Array::query_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    73 |       .def("consolidate_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    74 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    75 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    76 |                              Config 
> *const>(&Array::consolidate_metadata))
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    77 |       .def("put_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>    78 |            [](Array &self, std::string &key, tiledb_datatype_t 
> tdb_type,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |               const py::buffer &b) {
>       |               ~~~~~~~~~~~~~~~~~~~~~~
>    80 |              py::buffer_info info = b.request();
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    81 | 
>       |            
>    82 |              // size_t size = std::reduce(info.shape.begin(),
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    83 |              // info.shape.end());
>       |              ~~~~~~~~~~~~~~~~~~~~~
>    84 |              size_t size = 1;
>       |              ~~~~~~~~~~~~~~~~
>    85 |              for (auto s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    86 |                size *= s;
>       |                ~~~~~~~~~~
>    87 |              }
>       |              ~
>    88 |              // size_t nbytes = size * info.itemsize;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    89 | 
>       |            
>    90 |              self.put_metadata(key, tdb_type, size, info.ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    91 |              /*
>       |              ~~
>    92 |              std::cout << "ndim: " << info.ndim << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    93 | 
>       |            
>    94 | 
>       |            
>    95 |              std::cout << "sz: " << size << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |              std::cout << "imsz: " << info.itemsize << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    97 | 
>       |            
>    98 |              std::cout << "--|" << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    99 |              for (auto& s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   100 |                   std::cout << s << std::endl;
>       |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   101 |              }
>       |              ~
>   102 |              */
>       |              ~~
>   103 |            })
>       |            ~~
>   104 |       .def("get_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   105 |            [](Array &self, std::string &key) -> py::buffer {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   106 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   107 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   108 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   109 | 
>       |            
>   110 |              self.get_metadata(key, &tdb_type, &value_num, &data_ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   111 | 
>       |            
>   112 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   113 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   114 |              }
>       |              ~
>   115 | 
>       |            
>   116 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   117 |              return py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   118 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   119 |            })
>       |            ~~
>   120 |       .def("get_metadata_from_index",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   121 |            [](Array &self, uint64_t index) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   122 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   123 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   124 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   125 |              std::string key;
>       |              ~~~~~~~~~~~~~~~~
>   126 | 
>       |            
>   127 |              self.get_metadata_from_index(index, &key, &tdb_type, 
> &value_num,
>       |              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   128 |                                           &data_ptr);
>       |                                           ~~~~~~~~~~~
>   129 | 
>       |            
>   130 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   131 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   132 |              }
>       |              ~
>   133 |              // TODO handle empty value case
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   134 | 
>       |            
>   135 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   136 |              auto buf = py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   137 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   138 | 
>       |            
>   139 |              return py::make_tuple(tdb_type, buf);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   140 |            })
>       |            ~~
>   141 |       .def("delete_metadata", &Array::delete_metadata)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   142 |       .def("has_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   143 |            [](Array &self, std::string &key) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   144 |              tiledb_datatype_t has_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   145 |              bool has_it = self.has_metadata(key, &has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   146 |              return py::make_tuple(has_it, has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   147 |            })
>       |            ~~
>   148 |       .def("metadata_num", &Array::metadata_num)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   149 |       .def("delete_array", &Array::delete_array);
>       |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from 
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/numpy.h:12,
>                  from tiledb/cc/array.cc:4:
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1567:13: 
> note: candidate: ‘template<class Func, class ... Extra> 
> pybind11::class_<type_, options>& pybind11::class_<type_, options>::def(const 
> char*, Func&&, const Extra& ...) [with Extra = Func; type_ = tiledb::Array; 
> options = {}]’
>  1567 |     class_ &def(const char *name_, Func &&f, const Extra &...extra) {
>       |             ^~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1567:13: 
> note:   template argument deduction/substitution failed:
> tiledb/cc/array.cc:149:11: note:   couldn’t deduce template parameter ‘Func’
>    15 |   py::class_<tiledb::Array>(m, "Array")
>       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    16 |       //.def(py::init<py::object, py::object, py::iterable, 
> py::object,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    17 |       //              py::object, py::object>())
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    18 |       .def(
>       |       ~~~~~
>    19 |           py::init<const Context &, const std::string &, 
> tiledb_query_type_t>(),
>       |           
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    20 |           py::keep_alive<1, 2>() /* Array keeps Context alive */)
>       |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    21 |       // TODO capsule Array(const Context& ctx, tiledb_array_t* 
> carray,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    22 |       // tiledb_config_t* config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    23 |       .def("is_open", &Array::is_open)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    24 |       .def("uri", &Array::uri)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    25 |       .def("schema", &Array::schema)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    26 |       //.def("ptr", [](Array& arr){ return py::capsule(arr.ptr()); } )
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    27 |       // open with encryption key
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    28 |       .def("open",
>       |       ~~~~~~~~~~~~
>    29 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    30 |                             const std::string &)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~
>    31 |                Array::open)
>       |                ~~~~~~~~~~~~
>    32 |       // open with encryption key and timestamp
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    33 |       .def("open",
>       |       ~~~~~~~~~~~~
>    34 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    35 |                             const std::string &, uint64_t)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    36 |                Array::open)
>       |                ~~~~~~~~~~~~
>    37 |       .def("reopen", &Array::reopen)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    38 |       .def("set_open_timestamp_start", 
> &Array::set_open_timestamp_start)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    39 |       .def("set_open_timestamp_end", &Array::set_open_timestamp_end)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    40 |       .def_property_readonly("open_timestamp_start",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    41 |                              &Array::open_timestamp_start)
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    42 |       .def_property_readonly("open_timestamp_end", 
> &Array::open_timestamp_end)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    43 |       .def("set_config", &Array::set_config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    44 |       .def("config", &Array::config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    45 |       .def("close", &Array::close)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    46 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    47 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    48 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    49 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    50 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    51 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    52 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    53 |       //(void (Array::*)(const Context&, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    54 |       //                 tiledb_encryption_type_t, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    55 |       //                 Config* 
> const)&Array::consolidate)&Array::consolidate)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    56 |       .def("vacuum", &Array::vacuum)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    57 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    58 |            py::overload_cast<const std::string &, const ArraySchema &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    59 |                              tiledb_encryption_type_t, const 
> std::string &>(
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    60 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    61 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    62 |            py::overload_cast<const std::string &, const ArraySchema 
> &>(
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    63 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    64 |       .def("load_schema",
>       |       ~~~~~~~~~~~~~~~~~~~
>    65 |            py::overload_cast<const Context &, const std::string &>(
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    66 |                &Array::load_schema))
>       |                ~~~~~~~~~~~~~~~~~~~~~
>    67 |       .def("encryption_type", &Array::encryption_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    68 | 
>       |            
>    69 |       // TODO non_empty_domain
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    70 |       // TODO non_empty_domain_var
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    71 | 
>       |            
>    72 |       .def("query_type", &Array::query_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    73 |       .def("consolidate_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    74 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    75 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    76 |                              Config 
> *const>(&Array::consolidate_metadata))
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    77 |       .def("put_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>    78 |            [](Array &self, std::string &key, tiledb_datatype_t 
> tdb_type,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |               const py::buffer &b) {
>       |               ~~~~~~~~~~~~~~~~~~~~~~
>    80 |              py::buffer_info info = b.request();
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    81 | 
>       |            
>    82 |              // size_t size = std::reduce(info.shape.begin(),
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    83 |              // info.shape.end());
>       |              ~~~~~~~~~~~~~~~~~~~~~
>    84 |              size_t size = 1;
>       |              ~~~~~~~~~~~~~~~~
>    85 |              for (auto s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    86 |                size *= s;
>       |                ~~~~~~~~~~
>    87 |              }
>       |              ~
>    88 |              // size_t nbytes = size * info.itemsize;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    89 | 
>       |            
>    90 |              self.put_metadata(key, tdb_type, size, info.ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    91 |              /*
>       |              ~~
>    92 |              std::cout << "ndim: " << info.ndim << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    93 | 
>       |            
>    94 | 
>       |            
>    95 |              std::cout << "sz: " << size << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |              std::cout << "imsz: " << info.itemsize << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    97 | 
>       |            
>    98 |              std::cout << "--|" << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    99 |              for (auto& s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   100 |                   std::cout << s << std::endl;
>       |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   101 |              }
>       |              ~
>   102 |              */
>       |              ~~
>   103 |            })
>       |            ~~
>   104 |       .def("get_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   105 |            [](Array &self, std::string &key) -> py::buffer {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   106 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   107 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   108 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   109 | 
>       |            
>   110 |              self.get_metadata(key, &tdb_type, &value_num, &data_ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   111 | 
>       |            
>   112 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   113 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   114 |              }
>       |              ~
>   115 | 
>       |            
>   116 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   117 |              return py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   118 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   119 |            })
>       |            ~~
>   120 |       .def("get_metadata_from_index",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   121 |            [](Array &self, uint64_t index) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   122 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   123 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   124 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   125 |              std::string key;
>       |              ~~~~~~~~~~~~~~~~
>   126 | 
>       |            
>   127 |              self.get_metadata_from_index(index, &key, &tdb_type, 
> &value_num,
>       |              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   128 |                                           &data_ptr);
>       |                                           ~~~~~~~~~~~
>   129 | 
>       |            
>   130 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   131 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   132 |              }
>       |              ~
>   133 |              // TODO handle empty value case
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   134 | 
>       |            
>   135 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   136 |              auto buf = py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   137 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   138 | 
>       |            
>   139 |              return py::make_tuple(tdb_type, buf);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   140 |            })
>       |            ~~
>   141 |       .def("delete_metadata", &Array::delete_metadata)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   142 |       .def("has_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   143 |            [](Array &self, std::string &key) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   144 |              tiledb_datatype_t has_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   145 |              bool has_it = self.has_metadata(key, &has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   146 |              return py::make_tuple(has_it, has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   147 |            })
>       |            ~~
>   148 |       .def("metadata_num", &Array::metadata_num)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   149 |       .def("delete_array", &Array::delete_array);
>       |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1592:13: 
> note: candidate: ‘template<class T, class ... Extra, typename 
> std::enable_if<T::op_enable_if_hook, int>::type <anonymous> > 
> pybind11::class_<type_, options>& pybind11::class_<type_, options>::def(const 
> T&, const Extra& ...) [with Extra = T; typename 
> std::enable_if<T::op_enable_if_hook, int>::type <anonymous> = {Extra ...}; 
> type_ = tiledb::Array; options = {}]’
>  1592 |     class_ &def(const T &op, const Extra &...extra) {
>       |             ^~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1592:13: 
> note:   template argument deduction/substitution failed:
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1591:95: 
> error: ‘op_enable_if_hook’ is not a member of ‘char [13]’
>  1591 |     template <typename T, typename... Extra, 
> detail::enable_if_t<T::op_enable_if_hook, int> = 0>
>       |                                                                       
>                         ^
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1604:13: 
> note: candidate: ‘template<class ... Args, class ... Extra> 
> pybind11::class_<type_, options>& pybind11::class_<type_, options>::def(const 
> pybind11::detail::initimpl::constructor<Args ...>&, const Extra& ...) [with 
> Args = {Args ...}; Extra = {Extra ...}; type_ = tiledb::Array; options = {}]’
>  1604 |     class_ &def(const detail::initimpl::constructor<Args...> &init, 
> const Extra &...extra) {
>       |             ^~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1604:13: 
> note:   template argument deduction/substitution failed:
> tiledb/cc/array.cc:149:11: note:   mismatched types ‘const 
> pybind11::detail::initimpl::constructor<Args ...>’ and ‘const char [13]’
>    15 |   py::class_<tiledb::Array>(m, "Array")
>       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    16 |       //.def(py::init<py::object, py::object, py::iterable, 
> py::object,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    17 |       //              py::object, py::object>())
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    18 |       .def(
>       |       ~~~~~
>    19 |           py::init<const Context &, const std::string &, 
> tiledb_query_type_t>(),
>       |           
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    20 |           py::keep_alive<1, 2>() /* Array keeps Context alive */)
>       |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    21 |       // TODO capsule Array(const Context& ctx, tiledb_array_t* 
> carray,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    22 |       // tiledb_config_t* config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    23 |       .def("is_open", &Array::is_open)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    24 |       .def("uri", &Array::uri)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    25 |       .def("schema", &Array::schema)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    26 |       //.def("ptr", [](Array& arr){ return py::capsule(arr.ptr()); } )
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    27 |       // open with encryption key
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    28 |       .def("open",
>       |       ~~~~~~~~~~~~
>    29 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    30 |                             const std::string &)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~
>    31 |                Array::open)
>       |                ~~~~~~~~~~~~
>    32 |       // open with encryption key and timestamp
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    33 |       .def("open",
>       |       ~~~~~~~~~~~~
>    34 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    35 |                             const std::string &, uint64_t)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    36 |                Array::open)
>       |                ~~~~~~~~~~~~
>    37 |       .def("reopen", &Array::reopen)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    38 |       .def("set_open_timestamp_start", 
> &Array::set_open_timestamp_start)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    39 |       .def("set_open_timestamp_end", &Array::set_open_timestamp_end)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    40 |       .def_property_readonly("open_timestamp_start",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    41 |                              &Array::open_timestamp_start)
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    42 |       .def_property_readonly("open_timestamp_end", 
> &Array::open_timestamp_end)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    43 |       .def("set_config", &Array::set_config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    44 |       .def("config", &Array::config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    45 |       .def("close", &Array::close)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    46 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    47 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    48 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    49 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    50 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    51 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    52 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    53 |       //(void (Array::*)(const Context&, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    54 |       //                 tiledb_encryption_type_t, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    55 |       //                 Config* 
> const)&Array::consolidate)&Array::consolidate)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    56 |       .def("vacuum", &Array::vacuum)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    57 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    58 |            py::overload_cast<const std::string &, const ArraySchema &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    59 |                              tiledb_encryption_type_t, const 
> std::string &>(
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    60 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    61 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    62 |            py::overload_cast<const std::string &, const ArraySchema 
> &>(
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    63 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    64 |       .def("load_schema",
>       |       ~~~~~~~~~~~~~~~~~~~
>    65 |            py::overload_cast<const Context &, const std::string &>(
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    66 |                &Array::load_schema))
>       |                ~~~~~~~~~~~~~~~~~~~~~
>    67 |       .def("encryption_type", &Array::encryption_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    68 | 
>       |            
>    69 |       // TODO non_empty_domain
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    70 |       // TODO non_empty_domain_var
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    71 | 
>       |            
>    72 |       .def("query_type", &Array::query_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    73 |       .def("consolidate_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    74 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    75 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    76 |                              Config 
> *const>(&Array::consolidate_metadata))
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    77 |       .def("put_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>    78 |            [](Array &self, std::string &key, tiledb_datatype_t 
> tdb_type,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |               const py::buffer &b) {
>       |               ~~~~~~~~~~~~~~~~~~~~~~
>    80 |              py::buffer_info info = b.request();
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    81 | 
>       |            
>    82 |              // size_t size = std::reduce(info.shape.begin(),
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    83 |              // info.shape.end());
>       |              ~~~~~~~~~~~~~~~~~~~~~
>    84 |              size_t size = 1;
>       |              ~~~~~~~~~~~~~~~~
>    85 |              for (auto s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    86 |                size *= s;
>       |                ~~~~~~~~~~
>    87 |              }
>       |              ~
>    88 |              // size_t nbytes = size * info.itemsize;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    89 | 
>       |            
>    90 |              self.put_metadata(key, tdb_type, size, info.ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    91 |              /*
>       |              ~~
>    92 |              std::cout << "ndim: " << info.ndim << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    93 | 
>       |            
>    94 | 
>       |            
>    95 |              std::cout << "sz: " << size << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |              std::cout << "imsz: " << info.itemsize << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    97 | 
>       |            
>    98 |              std::cout << "--|" << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    99 |              for (auto& s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   100 |                   std::cout << s << std::endl;
>       |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   101 |              }
>       |              ~
>   102 |              */
>       |              ~~
>   103 |            })
>       |            ~~
>   104 |       .def("get_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   105 |            [](Array &self, std::string &key) -> py::buffer {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   106 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   107 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   108 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   109 | 
>       |            
>   110 |              self.get_metadata(key, &tdb_type, &value_num, &data_ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   111 | 
>       |            
>   112 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   113 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   114 |              }
>       |              ~
>   115 | 
>       |            
>   116 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   117 |              return py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   118 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   119 |            })
>       |            ~~
>   120 |       .def("get_metadata_from_index",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   121 |            [](Array &self, uint64_t index) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   122 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   123 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   124 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   125 |              std::string key;
>       |              ~~~~~~~~~~~~~~~~
>   126 | 
>       |            
>   127 |              self.get_metadata_from_index(index, &key, &tdb_type, 
> &value_num,
>       |              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   128 |                                           &data_ptr);
>       |                                           ~~~~~~~~~~~
>   129 | 
>       |            
>   130 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   131 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   132 |              }
>       |              ~
>   133 |              // TODO handle empty value case
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   134 | 
>       |            
>   135 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   136 |              auto buf = py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   137 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   138 | 
>       |            
>   139 |              return py::make_tuple(tdb_type, buf);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   140 |            })
>       |            ~~
>   141 |       .def("delete_metadata", &Array::delete_metadata)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   142 |       .def("has_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   143 |            [](Array &self, std::string &key) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   144 |              tiledb_datatype_t has_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   145 |              bool has_it = self.has_metadata(key, &has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   146 |              return py::make_tuple(has_it, has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   147 |            })
>       |            ~~
>   148 |       .def("metadata_num", &Array::metadata_num)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   149 |       .def("delete_array", &Array::delete_array);
>       |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1611:13: 
> note: candidate: ‘template<class ... Args, class ... Extra> 
> pybind11::class_<type_, options>& pybind11::class_<type_, options>::def(const 
> pybind11::detail::initimpl::alias_constructor<Args ...>&, const Extra& ...) 
> [with Args = {Args ...}; Extra = {Extra ...}; type_ = tiledb::Array; options 
> = {}]’
>  1611 |     class_ &def(const detail::initimpl::alias_constructor<Args...> 
> &init, const Extra &...extra) {
>       |             ^~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1611:13: 
> note:   template argument deduction/substitution failed:
> tiledb/cc/array.cc:149:11: note:   mismatched types ‘const 
> pybind11::detail::initimpl::alias_constructor<Args ...>’ and ‘const char [13]’
>    15 |   py::class_<tiledb::Array>(m, "Array")
>       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    16 |       //.def(py::init<py::object, py::object, py::iterable, 
> py::object,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    17 |       //              py::object, py::object>())
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    18 |       .def(
>       |       ~~~~~
>    19 |           py::init<const Context &, const std::string &, 
> tiledb_query_type_t>(),
>       |           
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    20 |           py::keep_alive<1, 2>() /* Array keeps Context alive */)
>       |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    21 |       // TODO capsule Array(const Context& ctx, tiledb_array_t* 
> carray,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    22 |       // tiledb_config_t* config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    23 |       .def("is_open", &Array::is_open)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    24 |       .def("uri", &Array::uri)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    25 |       .def("schema", &Array::schema)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    26 |       //.def("ptr", [](Array& arr){ return py::capsule(arr.ptr()); } )
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    27 |       // open with encryption key
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    28 |       .def("open",
>       |       ~~~~~~~~~~~~
>    29 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    30 |                             const std::string &)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~
>    31 |                Array::open)
>       |                ~~~~~~~~~~~~
>    32 |       // open with encryption key and timestamp
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    33 |       .def("open",
>       |       ~~~~~~~~~~~~
>    34 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    35 |                             const std::string &, uint64_t)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    36 |                Array::open)
>       |                ~~~~~~~~~~~~
>    37 |       .def("reopen", &Array::reopen)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    38 |       .def("set_open_timestamp_start", 
> &Array::set_open_timestamp_start)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    39 |       .def("set_open_timestamp_end", &Array::set_open_timestamp_end)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    40 |       .def_property_readonly("open_timestamp_start",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    41 |                              &Array::open_timestamp_start)
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    42 |       .def_property_readonly("open_timestamp_end", 
> &Array::open_timestamp_end)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    43 |       .def("set_config", &Array::set_config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    44 |       .def("config", &Array::config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    45 |       .def("close", &Array::close)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    46 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    47 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    48 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    49 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    50 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    51 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    52 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    53 |       //(void (Array::*)(const Context&, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    54 |       //                 tiledb_encryption_type_t, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    55 |       //                 Config* 
> const)&Array::consolidate)&Array::consolidate)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    56 |       .def("vacuum", &Array::vacuum)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    57 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    58 |            py::overload_cast<const std::string &, const ArraySchema &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    59 |                              tiledb_encryption_type_t, const 
> std::string &>(
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    60 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    61 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    62 |            py::overload_cast<const std::string &, const ArraySchema 
> &>(
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    63 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    64 |       .def("load_schema",
>       |       ~~~~~~~~~~~~~~~~~~~
>    65 |            py::overload_cast<const Context &, const std::string &>(
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    66 |                &Array::load_schema))
>       |                ~~~~~~~~~~~~~~~~~~~~~
>    67 |       .def("encryption_type", &Array::encryption_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    68 | 
>       |            
>    69 |       // TODO non_empty_domain
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    70 |       // TODO non_empty_domain_var
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    71 | 
>       |            
>    72 |       .def("query_type", &Array::query_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    73 |       .def("consolidate_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    74 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    75 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    76 |                              Config 
> *const>(&Array::consolidate_metadata))
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    77 |       .def("put_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>    78 |            [](Array &self, std::string &key, tiledb_datatype_t 
> tdb_type,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |               const py::buffer &b) {
>       |               ~~~~~~~~~~~~~~~~~~~~~~
>    80 |              py::buffer_info info = b.request();
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    81 | 
>       |            
>    82 |              // size_t size = std::reduce(info.shape.begin(),
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    83 |              // info.shape.end());
>       |              ~~~~~~~~~~~~~~~~~~~~~
>    84 |              size_t size = 1;
>       |              ~~~~~~~~~~~~~~~~
>    85 |              for (auto s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    86 |                size *= s;
>       |                ~~~~~~~~~~
>    87 |              }
>       |              ~
>    88 |              // size_t nbytes = size * info.itemsize;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    89 | 
>       |            
>    90 |              self.put_metadata(key, tdb_type, size, info.ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    91 |              /*
>       |              ~~
>    92 |              std::cout << "ndim: " << info.ndim << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    93 | 
>       |            
>    94 | 
>       |            
>    95 |              std::cout << "sz: " << size << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |              std::cout << "imsz: " << info.itemsize << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    97 | 
>       |            
>    98 |              std::cout << "--|" << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    99 |              for (auto& s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   100 |                   std::cout << s << std::endl;
>       |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   101 |              }
>       |              ~
>   102 |              */
>       |              ~~
>   103 |            })
>       |            ~~
>   104 |       .def("get_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   105 |            [](Array &self, std::string &key) -> py::buffer {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   106 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   107 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   108 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   109 | 
>       |            
>   110 |              self.get_metadata(key, &tdb_type, &value_num, &data_ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   111 | 
>       |            
>   112 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   113 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   114 |              }
>       |              ~
>   115 | 
>       |            
>   116 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   117 |              return py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   118 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   119 |            })
>       |            ~~
>   120 |       .def("get_metadata_from_index",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   121 |            [](Array &self, uint64_t index) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   122 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   123 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   124 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   125 |              std::string key;
>       |              ~~~~~~~~~~~~~~~~
>   126 | 
>       |            
>   127 |              self.get_metadata_from_index(index, &key, &tdb_type, 
> &value_num,
>       |              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   128 |                                           &data_ptr);
>       |                                           ~~~~~~~~~~~
>   129 | 
>       |            
>   130 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   131 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   132 |              }
>       |              ~
>   133 |              // TODO handle empty value case
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   134 | 
>       |            
>   135 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   136 |              auto buf = py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   137 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   138 | 
>       |            
>   139 |              return py::make_tuple(tdb_type, buf);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   140 |            })
>       |            ~~
>   141 |       .def("delete_metadata", &Array::delete_metadata)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   142 |       .def("has_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   143 |            [](Array &self, std::string &key) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   144 |              tiledb_datatype_t has_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   145 |              bool has_it = self.has_metadata(key, &has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   146 |              return py::make_tuple(has_it, has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   147 |            })
>       |            ~~
>   148 |       .def("metadata_num", &Array::metadata_num)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   149 |       .def("delete_array", &Array::delete_array);
>       |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1618:13: 
> note: candidate: ‘template<class ... Args, class ... Extra> 
> pybind11::class_<type_, options>& pybind11::class_<type_, 
> options>::def(pybind11::detail::initimpl::factory<Args ...>&&, const Extra& 
> ...) [with Args = {Args ...}; Extra = {Extra ...}; type_ = tiledb::Array; 
> options = {}]’
>  1618 |     class_ &def(detail::initimpl::factory<Args...> &&init, const 
> Extra &...extra) {
>       |             ^~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1618:13: 
> note:   template argument deduction/substitution failed:
> tiledb/cc/array.cc:149:11: note:   mismatched types 
> ‘pybind11::detail::initimpl::factory<Args ...>’ and ‘const char [13]’
>    15 |   py::class_<tiledb::Array>(m, "Array")
>       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    16 |       //.def(py::init<py::object, py::object, py::iterable, 
> py::object,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    17 |       //              py::object, py::object>())
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    18 |       .def(
>       |       ~~~~~
>    19 |           py::init<const Context &, const std::string &, 
> tiledb_query_type_t>(),
>       |           
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    20 |           py::keep_alive<1, 2>() /* Array keeps Context alive */)
>       |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    21 |       // TODO capsule Array(const Context& ctx, tiledb_array_t* 
> carray,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    22 |       // tiledb_config_t* config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    23 |       .def("is_open", &Array::is_open)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    24 |       .def("uri", &Array::uri)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    25 |       .def("schema", &Array::schema)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    26 |       //.def("ptr", [](Array& arr){ return py::capsule(arr.ptr()); } )
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    27 |       // open with encryption key
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    28 |       .def("open",
>       |       ~~~~~~~~~~~~
>    29 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    30 |                             const std::string &)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~
>    31 |                Array::open)
>       |                ~~~~~~~~~~~~
>    32 |       // open with encryption key and timestamp
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    33 |       .def("open",
>       |       ~~~~~~~~~~~~
>    34 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    35 |                             const std::string &, uint64_t)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    36 |                Array::open)
>       |                ~~~~~~~~~~~~
>    37 |       .def("reopen", &Array::reopen)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    38 |       .def("set_open_timestamp_start", 
> &Array::set_open_timestamp_start)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    39 |       .def("set_open_timestamp_end", &Array::set_open_timestamp_end)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    40 |       .def_property_readonly("open_timestamp_start",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    41 |                              &Array::open_timestamp_start)
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    42 |       .def_property_readonly("open_timestamp_end", 
> &Array::open_timestamp_end)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    43 |       .def("set_config", &Array::set_config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    44 |       .def("config", &Array::config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    45 |       .def("close", &Array::close)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    46 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    47 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    48 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    49 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    50 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    51 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    52 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    53 |       //(void (Array::*)(const Context&, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    54 |       //                 tiledb_encryption_type_t, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    55 |       //                 Config* 
> const)&Array::consolidate)&Array::consolidate)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    56 |       .def("vacuum", &Array::vacuum)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    57 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    58 |            py::overload_cast<const std::string &, const ArraySchema &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    59 |                              tiledb_encryption_type_t, const 
> std::string &>(
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    60 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    61 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    62 |            py::overload_cast<const std::string &, const ArraySchema 
> &>(
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    63 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    64 |       .def("load_schema",
>       |       ~~~~~~~~~~~~~~~~~~~
>    65 |            py::overload_cast<const Context &, const std::string &>(
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    66 |                &Array::load_schema))
>       |                ~~~~~~~~~~~~~~~~~~~~~
>    67 |       .def("encryption_type", &Array::encryption_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    68 | 
>       |            
>    69 |       // TODO non_empty_domain
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    70 |       // TODO non_empty_domain_var
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    71 | 
>       |            
>    72 |       .def("query_type", &Array::query_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    73 |       .def("consolidate_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    74 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    75 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    76 |                              Config 
> *const>(&Array::consolidate_metadata))
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    77 |       .def("put_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>    78 |            [](Array &self, std::string &key, tiledb_datatype_t 
> tdb_type,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |               const py::buffer &b) {
>       |               ~~~~~~~~~~~~~~~~~~~~~~
>    80 |              py::buffer_info info = b.request();
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    81 | 
>       |            
>    82 |              // size_t size = std::reduce(info.shape.begin(),
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    83 |              // info.shape.end());
>       |              ~~~~~~~~~~~~~~~~~~~~~
>    84 |              size_t size = 1;
>       |              ~~~~~~~~~~~~~~~~
>    85 |              for (auto s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    86 |                size *= s;
>       |                ~~~~~~~~~~
>    87 |              }
>       |              ~
>    88 |              // size_t nbytes = size * info.itemsize;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    89 | 
>       |            
>    90 |              self.put_metadata(key, tdb_type, size, info.ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    91 |              /*
>       |              ~~
>    92 |              std::cout << "ndim: " << info.ndim << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    93 | 
>       |            
>    94 | 
>       |            
>    95 |              std::cout << "sz: " << size << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |              std::cout << "imsz: " << info.itemsize << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    97 | 
>       |            
>    98 |              std::cout << "--|" << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    99 |              for (auto& s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   100 |                   std::cout << s << std::endl;
>       |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   101 |              }
>       |              ~
>   102 |              */
>       |              ~~
>   103 |            })
>       |            ~~
>   104 |       .def("get_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   105 |            [](Array &self, std::string &key) -> py::buffer {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   106 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   107 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   108 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   109 | 
>       |            
>   110 |              self.get_metadata(key, &tdb_type, &value_num, &data_ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   111 | 
>       |            
>   112 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   113 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   114 |              }
>       |              ~
>   115 | 
>       |            
>   116 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   117 |              return py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   118 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   119 |            })
>       |            ~~
>   120 |       .def("get_metadata_from_index",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   121 |            [](Array &self, uint64_t index) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   122 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   123 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   124 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   125 |              std::string key;
>       |              ~~~~~~~~~~~~~~~~
>   126 | 
>       |            
>   127 |              self.get_metadata_from_index(index, &key, &tdb_type, 
> &value_num,
>       |              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   128 |                                           &data_ptr);
>       |                                           ~~~~~~~~~~~
>   129 | 
>       |            
>   130 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   131 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   132 |              }
>       |              ~
>   133 |              // TODO handle empty value case
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   134 | 
>       |            
>   135 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   136 |              auto buf = py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   137 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   138 | 
>       |            
>   139 |              return py::make_tuple(tdb_type, buf);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   140 |            })
>       |            ~~
>   141 |       .def("delete_metadata", &Array::delete_metadata)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   142 |       .def("has_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   143 |            [](Array &self, std::string &key) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   144 |              tiledb_datatype_t has_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   145 |              bool has_it = self.has_metadata(key, &has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   146 |              return py::make_tuple(has_it, has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   147 |            })
>       |            ~~
>   148 |       .def("metadata_num", &Array::metadata_num)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   149 |       .def("delete_array", &Array::delete_array);
>       |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1624:13: 
> note: candidate: ‘template<class ... Args, class ... Extra> 
> pybind11::class_<type_, options>& pybind11::class_<type_, 
> options>::def(pybind11::detail::initimpl::pickle_factory<Args ...>&&, const 
> Extra& ...) [with Args = {Args ...}; Extra = {Extra ...}; type_ = 
> tiledb::Array; options = {}]’
>  1624 |     class_ &def(detail::initimpl::pickle_factory<Args...> &&pf, const 
> Extra &...extra) {
>       |             ^~~
> /usr/lib/python3/dist-packages/pybind11/include/pybind11/pybind11.h:1624:13: 
> note:   template argument deduction/substitution failed:
> tiledb/cc/array.cc:149:11: note:   mismatched types 
> ‘pybind11::detail::initimpl::pickle_factory<Args ...>’ and ‘const char [13]’
>    15 |   py::class_<tiledb::Array>(m, "Array")
>       |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    16 |       //.def(py::init<py::object, py::object, py::iterable, 
> py::object,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    17 |       //              py::object, py::object>())
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    18 |       .def(
>       |       ~~~~~
>    19 |           py::init<const Context &, const std::string &, 
> tiledb_query_type_t>(),
>       |           
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    20 |           py::keep_alive<1, 2>() /* Array keeps Context alive */)
>       |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    21 |       // TODO capsule Array(const Context& ctx, tiledb_array_t* 
> carray,
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    22 |       // tiledb_config_t* config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    23 |       .def("is_open", &Array::is_open)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    24 |       .def("uri", &Array::uri)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    25 |       .def("schema", &Array::schema)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    26 |       //.def("ptr", [](Array& arr){ return py::capsule(arr.ptr()); } )
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    27 |       // open with encryption key
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    28 |       .def("open",
>       |       ~~~~~~~~~~~~
>    29 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    30 |                             const std::string &)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~
>    31 |                Array::open)
>       |                ~~~~~~~~~~~~
>    32 |       // open with encryption key and timestamp
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    33 |       .def("open",
>       |       ~~~~~~~~~~~~
>    34 |            (void (Array::*)(tiledb_query_type_t, 
> tiledb_encryption_type_t,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    35 |                             const std::string &, uint64_t)) &
>       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    36 |                Array::open)
>       |                ~~~~~~~~~~~~
>    37 |       .def("reopen", &Array::reopen)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    38 |       .def("set_open_timestamp_start", 
> &Array::set_open_timestamp_start)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    39 |       .def("set_open_timestamp_end", &Array::set_open_timestamp_end)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    40 |       .def_property_readonly("open_timestamp_start",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    41 |                              &Array::open_timestamp_start)
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    42 |       .def_property_readonly("open_timestamp_end", 
> &Array::open_timestamp_end)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    43 |       .def("set_config", &Array::set_config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    44 |       .def("config", &Array::config)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    45 |       .def("close", &Array::close)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    46 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    47 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    48 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    49 |       .def("consolidate",
>       |       ~~~~~~~~~~~~~~~~~~~
>    50 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    51 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    52 |                              Config *const>(&Array::consolidate))
>       |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    53 |       //(void (Array::*)(const Context&, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    54 |       //                 tiledb_encryption_type_t, const std::string&,
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    55 |       //                 Config* 
> const)&Array::consolidate)&Array::consolidate)
>       |       
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    56 |       .def("vacuum", &Array::vacuum)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    57 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    58 |            py::overload_cast<const std::string &, const ArraySchema &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    59 |                              tiledb_encryption_type_t, const 
> std::string &>(
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    60 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    61 |       .def("create",
>       |       ~~~~~~~~~~~~~~
>    62 |            py::overload_cast<const std::string &, const ArraySchema 
> &>(
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    63 |                &Array::create))
>       |                ~~~~~~~~~~~~~~~~
>    64 |       .def("load_schema",
>       |       ~~~~~~~~~~~~~~~~~~~
>    65 |            py::overload_cast<const Context &, const std::string &>(
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    66 |                &Array::load_schema))
>       |                ~~~~~~~~~~~~~~~~~~~~~
>    67 |       .def("encryption_type", &Array::encryption_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    68 | 
>       |            
>    69 |       // TODO non_empty_domain
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~
>    70 |       // TODO non_empty_domain_var
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    71 | 
>       |            
>    72 |       .def("query_type", &Array::query_type)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    73 |       .def("consolidate_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    74 |            py::overload_cast<const Context &, const std::string &,
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    75 |                              tiledb_encryption_type_t, const 
> std::string &,
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    76 |                              Config 
> *const>(&Array::consolidate_metadata))
>       |                              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    77 |       .def("put_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>    78 |            [](Array &self, std::string &key, tiledb_datatype_t 
> tdb_type,
>       |            
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    79 |               const py::buffer &b) {
>       |               ~~~~~~~~~~~~~~~~~~~~~~
>    80 |              py::buffer_info info = b.request();
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    81 | 
>       |            
>    82 |              // size_t size = std::reduce(info.shape.begin(),
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    83 |              // info.shape.end());
>       |              ~~~~~~~~~~~~~~~~~~~~~
>    84 |              size_t size = 1;
>       |              ~~~~~~~~~~~~~~~~
>    85 |              for (auto s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    86 |                size *= s;
>       |                ~~~~~~~~~~
>    87 |              }
>       |              ~
>    88 |              // size_t nbytes = size * info.itemsize;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    89 | 
>       |            
>    90 |              self.put_metadata(key, tdb_type, size, info.ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    91 |              /*
>       |              ~~
>    92 |              std::cout << "ndim: " << info.ndim << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    93 | 
>       |            
>    94 | 
>       |            
>    95 |              std::cout << "sz: " << size << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    96 |              std::cout << "imsz: " << info.itemsize << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    97 | 
>       |            
>    98 |              std::cout << "--|" << std::endl;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>    99 |              for (auto& s : info.shape) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   100 |                   std::cout << s << std::endl;
>       |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   101 |              }
>       |              ~
>   102 |              */
>       |              ~~
>   103 |            })
>       |            ~~
>   104 |       .def("get_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   105 |            [](Array &self, std::string &key) -> py::buffer {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   106 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   107 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   108 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   109 | 
>       |            
>   110 |              self.get_metadata(key, &tdb_type, &value_num, &data_ptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   111 | 
>       |            
>   112 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   113 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   114 |              }
>       |              ~
>   115 | 
>       |            
>   116 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   117 |              return py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   118 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   119 |            })
>       |            ~~
>   120 |       .def("get_metadata_from_index",
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   121 |            [](Array &self, uint64_t index) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   122 |              tiledb_datatype_t tdb_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   123 |              uint32_t value_num;
>       |              ~~~~~~~~~~~~~~~~~~~
>   124 |              const void *data_ptr;
>       |              ~~~~~~~~~~~~~~~~~~~~~
>   125 |              std::string key;
>       |              ~~~~~~~~~~~~~~~~
>   126 | 
>       |            
>   127 |              self.get_metadata_from_index(index, &key, &tdb_type, 
> &value_num,
>       |              
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   128 |                                           &data_ptr);
>       |                                           ~~~~~~~~~~~
>   129 | 
>       |            
>   130 |              if (data_ptr == nullptr && value_num != 1) {
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   131 |                throw py::key_error();
>       |                ~~~~~~~~~~~~~~~~~~~~~~
>   132 |              }
>       |              ~
>   133 |              // TODO handle empty value case
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   134 | 
>       |            
>   135 |              assert(data_ptr != nullptr);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   136 |              auto buf = py::memoryview::from_memory(
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   137 |                  data_ptr, value_num * 
> tiledb_datatype_size(tdb_type));
>       |                  
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   138 | 
>       |            
>   139 |              return py::make_tuple(tdb_type, buf);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   140 |            })
>       |            ~~
>   141 |       .def("delete_metadata", &Array::delete_metadata)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   142 |       .def("has_metadata",
>       |       ~~~~~~~~~~~~~~~~~~~~
>   143 |            [](Array &self, std::string &key) -> py::tuple {
>       |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   144 |              tiledb_datatype_t has_type;
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   145 |              bool has_it = self.has_metadata(key, &has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   146 |              return py::make_tuple(has_it, has_type);
>       |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   147 |            })
>       |            ~~
>   148 |       .def("metadata_num", &Array::metadata_num)
>       |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>   149 |       .def("delete_array", &Array::delete_array);
>       |       ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> error: command '/usr/bin/x86_64-linux-gnu-gcc' failed with exit code 1
> E: pybuild pybuild:388: build: plugin distutils failed with: exit code=1: 
> /usr/bin/python3 setup.py build 
> dh_auto_build: error: pybuild --build -i python{version} -p 3.11 returned 
> exit code 13
> make[1]: *** [debian/rules:21: override_dh_auto_build] Error 25


The full build log is available from:
http://qa-logs.debian.net/2023/02/03/tiledb-py_0.19.1-1_unstable.log

All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20230203;users=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20230203&fusertaguser=lu...@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results

A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!

If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects

If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.

--- End Message ---
--- Begin Message ---
Source: tiledb-py
Source-Version: 0.20.0-1
Done: Nilesh Patra <nil...@debian.org>

We believe that the bug you reported is fixed in the latest version of
tiledb-py, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1030...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Nilesh Patra <nil...@debian.org> (supplier of updated tiledb-py package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Format: 1.8
Date: Sun, 05 Feb 2023 16:15:37 +0530
Source: tiledb-py
Architecture: source
Version: 0.20.0-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Python Team <team+pyt...@tracker.debian.org>
Changed-By: Nilesh Patra <nil...@debian.org>
Closes: 1030489
Changes:
 tiledb-py (0.20.0-1) unstable; urgency=medium
 .
   * New upstream version 0.20.0 (Closes: #1030489)
Checksums-Sha1:
 5e27796f9a3f17133b834149c9b3da1f466e09fa 1934 tiledb-py_0.20.0-1.dsc
 3132a620900005bbb07a6c4c64500121bdedbe1c 332710 tiledb-py_0.20.0.orig.tar.gz
 23358297925d1ef3ab03bc7d1e009fa12bd43e62 5192 tiledb-py_0.20.0-1.debian.tar.xz
 eb9b5f7c1723eb8d6edfd931548565e165677af7 8629 
tiledb-py_0.20.0-1_amd64.buildinfo
Checksums-Sha256:
 7ed3c39f53228ad968f45f157e4108c60cb826ee1c32d27875b63c9cfd00f5f1 1934 
tiledb-py_0.20.0-1.dsc
 31058564014d8d5bc2c8da6d58c59cf5af549c85752832416633f9a2d5225450 332710 
tiledb-py_0.20.0.orig.tar.gz
 056f024a3dd9e6327cffff084d434dca15e7538ec9877c5ac0c3bd7fc3be9dba 5192 
tiledb-py_0.20.0-1.debian.tar.xz
 39384be0b3b909302cd2557259c93f9e4a8d338c041f126d1f54b828f8f7dc24 8629 
tiledb-py_0.20.0-1_amd64.buildinfo
Files:
 8d4d70a93027de46f6803cbb255c6c4c 1934 python optional tiledb-py_0.20.0-1.dsc
 206c2919e547f65fd563fbf28f89fdd0 332710 python optional 
tiledb-py_0.20.0.orig.tar.gz
 f7c29fb6d53b3e5f385ead5855ab6106 5192 python optional 
tiledb-py_0.20.0-1.debian.tar.xz
 3d581fb559f39494dae675cb1f026d1d 8629 python optional 
tiledb-py_0.20.0-1_amd64.buildinfo

-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQSglbZu4JAkvuai8HIqJ5BL1yQ+2gUCY9+MGQAKCRAqJ5BL1yQ+
2tPQAQCLWR/nSXqbSamBeV5GUz5ujdBk6Ty1DmFTurbem9IMIQD+MPGiYkjNrc+M
aHNmiF4UL0u7o2MzQJUfsPKFv2D9uww=
=nKSL
-----END PGP SIGNATURE-----

--- End Message ---

Reply via email to