Skip to content

Commit

Permalink
Merge pull request #300 from unum-cloud/287-bug-python-tests-fail
Browse files Browse the repository at this point in the history
Fix: Python tests fail
  • Loading branch information
ashvardanian authored Mar 31, 2023
2 parents 88e0178 + b0e49cf commit 901e18c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 25 deletions.
47 changes: 23 additions & 24 deletions python/networkx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -97,19 +97,19 @@ struct nodes_stream_t {
keys_stream_t native;
docs_collection_t& collection;
bool read_data;
ukv_str_view_t field;
ukv_str_view_t default_value;
std::string field;
std::string default_value;

embedded_blobs_t attrs;
ptr_range_gt<ukv_key_t const> nodes;
std::size_t index = 0;

nodes_stream_t(
keys_stream_t&& stream, docs_collection_t& col, bool data, ukv_str_view_t field, ukv_str_view_t default_value)
keys_stream_t&& stream, docs_collection_t& col, bool data, std::string field, std::string default_value)
: native(std::move(stream)), collection(col), read_data(data), field(field), default_value(default_value) {
nodes = native.keys_batch();
if (read_data)
attrs = read_attributes(collection, nodes.strided(), field);
attrs = read_attributes(collection, nodes.strided(), field.size() ? field.c_str() : nullptr);
}

py::object next() {
Expand All @@ -119,12 +119,12 @@ struct nodes_stream_t {
native.seek_to_next_batch();
nodes = native.keys_batch();
if (read_data)
attrs = read_attributes(collection, nodes.strided(), field);
attrs = read_attributes(collection, nodes.strided(), field.size() ? field.c_str() : nullptr);
index = 0;
}
py::object ret;
if (read_data) {
auto data = attrs[index] && !attrs[index].empty() ? attrs[index] : default_value;
auto data = attrs[index] && !attrs[index].empty() ? attrs[index] : value_view_t(default_value);
ret = py::make_tuple(nodes[index], py::reinterpret_steal<py::object>(from_json(json_t::parse(data))));
}
else
Expand All @@ -138,19 +138,19 @@ struct edges_stream_t {
graph_stream_t native;
docs_collection_t& collection;
bool read_data;
ukv_str_view_t field;
ukv_str_view_t default_value;
std::string field;
std::string default_value;

embedded_blobs_t attrs;
edges_span_t edges;
std::size_t index = 0;

edges_stream_t(
graph_stream_t&& stream, docs_collection_t& col, bool data, ukv_str_view_t field, ukv_str_view_t default_value)
graph_stream_t&& stream, docs_collection_t& col, bool data, std::string field, std::string default_value)
: native(std::move(stream)), collection(col), read_data(data), field(field), default_value(default_value) {
edges = native.edges_batch();
if (read_data)
attrs = read_attributes(collection, edges.edge_ids.immutable(), field);
attrs = read_attributes(collection, edges.edge_ids.immutable(), field.size() ? field.c_str() : nullptr);
}

py::object next() {
Expand All @@ -160,13 +160,13 @@ struct edges_stream_t {
native.seek_to_next_batch();
edges = native.edges_batch();
if (read_data)
attrs = read_attributes(collection, edges.edge_ids.immutable(), field);
attrs = read_attributes(collection, edges.edge_ids.immutable(), field.size() ? field.c_str() : nullptr);
index = 0;
}
auto edge = edges[index];
py::object ret;
if (read_data) {
auto data = attrs[index] && !attrs[index].empty() ? attrs[index] : default_value;
auto data = attrs[index] && !attrs[index].empty() ? attrs[index] : value_view_t(default_value);
ret = py::make_tuple(edge.source_id,
edge.target_id,
py::reinterpret_steal<py::object>(from_json(json_t::parse(data))));
Expand All @@ -182,11 +182,10 @@ struct edges_nbunch_iter_t {
edges_span_t edges;
embedded_blobs_t attrs;
bool read_data;
ukv_str_view_t default_value;

std::string default_value;
std::size_t index = 0;

edges_nbunch_iter_t(edges_span_t edges_span, embedded_blobs_t attributes, bool data, ukv_str_view_t default_value)
edges_nbunch_iter_t(edges_span_t edges_span, embedded_blobs_t attributes, bool data, std::string default_value)
: edges(edges_span), attrs(attributes), read_data(data), default_value(default_value) {}

py::object next() {
Expand All @@ -195,7 +194,7 @@ struct edges_nbunch_iter_t {
edge_t edge = edges[index];
py::object ret;
if (read_data) {
value_view_t data = attrs[index] && !attrs[index].empty() ? attrs[index] : default_value;
value_view_t data = attrs[index] && !attrs[index].empty() ? attrs[index] : value_view_t(default_value);
ret = py::make_tuple(edge.source_id,
edge.target_id,
py::reinterpret_steal<py::object>(from_json(json_t::parse(data))));
Expand Down Expand Up @@ -354,8 +353,8 @@ void ukv::wrap_networkx(py::module& m) {
return nodes_stream_t {std::move(range.native).begin(),
range.collection,
range.read_data,
range.field.size() ? range.field.c_str() : nullptr,
range.default_value.c_str()};
range.field,
range.default_value};
});

nodes_range.def(
Expand Down Expand Up @@ -386,21 +385,21 @@ void ukv::wrap_networkx(py::module& m) {
auto edges_range = py::class_<edges_range_t, std::shared_ptr<edges_range_t>>(m, "EdgesRange", py::module_local());
edges_range.def("__iter__", [](edges_range_t& range) {
py_graph_t& g = *range.net_ptr.lock().get();
auto field = range.field.size() ? range.field.c_str() : nullptr;

if (range.vertices.size()) {
auto vertices = strided_range(range.vertices).immutable();
auto role = ukv_vertex_source_k;
auto edges = g.ref().edges_containing(vertices, {{&role}, 1}).throw_or_release();
auto attrs = read_attributes(g.relations_attrs, edges.edge_ids.immutable(), field);
return py::cast(edges_nbunch_iter_t(edges, attrs, range.read_data, range.default_value.c_str()));
auto attrs = read_attributes(g.relations_attrs,
edges.edge_ids.immutable(),
range.field.size() ? range.field.c_str() : nullptr);
return py::cast(edges_nbunch_iter_t(edges, attrs, range.read_data, range.default_value));
}
auto edges = g.ref().edges(ukv_vertex_source_k).throw_or_release();
return py::cast(edges_stream_t(std::move(edges).begin(),
g.relations_attrs,
range.read_data,
field,
range.default_value.c_str()));
range.field,
range.default_value));
});

edges_range.def(
Expand Down
2 changes: 1 addition & 1 deletion python/pack.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
rm -rf src/ukv.egg-info ukv.egg-info build CMakeCache.txt \
&& cmake . -DCMAKE_BUILD_TYPE=Debug -DUKV_BUILD_SDK_PYTHON=1 -DUKV_BUILD_ENGINE_UMEM=1 \
-DPYARROW_DIR="$(python3 -c 'import site; print(site.getsitepackages()[0])')/pyarrow/" \
-DPYARROW_DIR="$(python3 -c 'import pyarrow; print(pyarrow.__path__[0])')" \
&& make -j32 py_umem && UKV_DEBUG_PYTHON=0 python3 -m pip install --upgrade --force-reinstall . && pytest --capture=no python/tests/

0 comments on commit 901e18c

Please sign in to comment.