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

Reply via email to