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: E: pybuild pybuild:388: build: plugin distutils 
failed with: exit code=1: /usr/bin/python3 setup.py build
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
Tags: ftbfs
Justification: fails to build from source (but built successfully in the past)

https://buildd.debian.org/status/fetch.php?pkg=tiledb-py&arch=amd64&ver=0.19.1-1%2Bb1&stamp=1675121783&raw=0

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

Cheers
-- 
Sebastian Ramacher

--- 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