Skip to content

Commit

Permalink
throw an exception when number_of_edges() is called with edge mask
Browse files Browse the repository at this point in the history
  • Loading branch information
seunghwak committed Nov 20, 2023
1 parent b1f7bc3 commit 0c10b84
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 45 deletions.
54 changes: 21 additions & 33 deletions cpp/include/cugraph/graph_view.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,11 @@ class graph_base_t {
properties_(properties){};

vertex_t number_of_vertices() const { return number_of_vertices_; }
edge_t number_of_edges() const { return number_of_edges_; }
edge_t number_of_edges() const
{
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");
return number_of_edges_;
}

template <typename vertex_type = vertex_t>
std::enable_if_t<std::is_signed<vertex_type>::value, bool> is_valid_vertex(vertex_type v) const
Expand All @@ -285,6 +289,20 @@ class graph_base_t {
bool is_symmetric() const { return properties_.is_symmetric; }
bool is_multigraph() const { return properties_.is_multigraph; }

void attach_edge_mask(edge_property_view_t<edge_t, uint32_t const*, bool> edge_mask_view)
{
edge_mask_view_ = edge_mask_view;
}

void clear_edge_mask() { edge_mask_view_ = std::nullopt; }

bool has_edge_mask() const { return edge_mask_view_.has_value(); }

std::optional<edge_property_view_t<edge_t, uint32_t const*, bool>> edge_mask_view() const
{
return edge_mask_view_;
}

protected:
raft::handle_t const* handle_ptr() const { return handle_ptr_; };
graph_properties_t graph_properties() const { return properties_; }
Expand All @@ -296,6 +314,8 @@ class graph_base_t {
edge_t number_of_edges_{0};

graph_properties_t properties_{};

std::optional<edge_property_view_t<edge_t, uint32_t const*, bool>> edge_mask_view_{std::nullopt};
};

} // namespace detail
Expand Down Expand Up @@ -731,20 +751,6 @@ class graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if
return local_sorted_unique_edge_dst_vertex_partition_offsets_;
}

void attach_edge_mask(edge_property_view_t<edge_t, uint32_t const*, bool> edge_mask_view)
{
edge_mask_view_ = edge_mask_view;
}

void clear_edge_mask() { edge_mask_view_ = std::nullopt; }

bool has_edge_mask() const { return edge_mask_view_.has_value(); }

std::optional<edge_property_view_t<edge_t, uint32_t const*, bool>> edge_mask_view() const
{
return edge_mask_view_;
}

private:
std::vector<edge_t const*> edge_partition_offsets_{};
std::vector<vertex_t const*> edge_partition_indices_{};
Expand Down Expand Up @@ -790,8 +796,6 @@ class graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if
std::optional<raft::host_span<vertex_t const>>,
std::optional<std::byte> /* dummy */>
local_sorted_unique_edge_dst_vertex_partition_offsets_{std::nullopt};

std::optional<edge_property_view_t<edge_t, uint32_t const*, bool>> edge_mask_view_{std::nullopt};
};

// single-GPU version
Expand Down Expand Up @@ -1012,28 +1016,12 @@ class graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if
return std::nullopt;
}

void attach_edge_mask(edge_property_view_t<edge_t, uint32_t const*, bool> edge_mask_view)
{
edge_mask_view_ = edge_mask_view;
}

void clear_edge_mask() { edge_mask_view_ = std::nullopt; }

bool has_edge_mask() const { return edge_mask_view_.has_value(); }

std::optional<edge_property_view_t<edge_t, uint32_t const*, bool>> edge_mask_view() const
{
return edge_mask_view_;
}

private:
edge_t const* offsets_{nullptr};
vertex_t const* indices_{nullptr};

// segment offsets based on vertex degree, relevant only if vertex IDs are renumbered
std::optional<std::vector<vertex_t>> segment_offsets_{std::nullopt};

std::optional<edge_property_view_t<edge_t, uint32_t const*, bool>> edge_mask_view_{std::nullopt};
};

} // namespace cugraph
24 changes: 12 additions & 12 deletions cpp/src/structure/graph_view_impl.cuh
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<mul
this->partition_,
this->edge_partition_segment_offsets_);
} else {
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");
return compute_minor_degrees(handle, *this);
}
}
Expand All @@ -566,7 +566,7 @@ graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<!mu
: std::nullopt,
this->local_vertex_partition_range_size());
} else {
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");
return compute_minor_degrees(handle, *this);
}
}
Expand All @@ -577,7 +577,7 @@ graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<mul
compute_out_degrees(raft::handle_t const& handle) const
{
if (store_transposed) {
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");
return compute_minor_degrees(handle, *this);
} else {
return compute_major_degrees(handle,
Expand All @@ -598,7 +598,7 @@ graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<!mu
compute_out_degrees(raft::handle_t const& handle) const
{
if (store_transposed) {
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");
return compute_minor_degrees(handle, *this);
} else {
return compute_major_degrees(
Expand All @@ -614,7 +614,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<multi_gpu>>::
compute_max_in_degree(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

auto in_degrees = compute_in_degrees(handle);
auto it = thrust::max_element(handle.get_thrust_policy(), in_degrees.begin(), in_degrees.end());
Expand All @@ -632,7 +632,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<!multi_gpu>>::
compute_max_in_degree(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

auto in_degrees = compute_in_degrees(handle);
auto it = thrust::max_element(handle.get_thrust_policy(), in_degrees.begin(), in_degrees.end());
Expand All @@ -646,7 +646,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<multi_gpu>>::
compute_max_out_degree(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

auto out_degrees = compute_out_degrees(handle);
auto it = thrust::max_element(handle.get_thrust_policy(), out_degrees.begin(), out_degrees.end());
Expand All @@ -664,7 +664,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<!multi_gpu>>::
compute_max_out_degree(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

auto out_degrees = compute_out_degrees(handle);
auto it = thrust::max_element(handle.get_thrust_policy(), out_degrees.begin(), out_degrees.end());
Expand All @@ -678,7 +678,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<multi_gpu>>::
count_self_loops(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

return count_if_e(
handle,
Expand All @@ -693,7 +693,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<!multi_gpu>>::
count_self_loops(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

return count_if_e(
handle,
Expand All @@ -708,7 +708,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<multi_gpu>>::
count_multi_edges(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

if (!this->is_multigraph()) { return edge_t{0}; }

Expand All @@ -728,7 +728,7 @@ template <typename vertex_t, typename edge_t, bool store_transposed, bool multi_
edge_t graph_view_t<vertex_t, edge_t, store_transposed, multi_gpu, std::enable_if_t<!multi_gpu>>::
count_multi_edges(raft::handle_t const& handle) const
{
CUGRAPH_EXPECTS(!has_edge_mask(), "unimplemented.");
CUGRAPH_EXPECTS(!(this->has_edge_mask()), "unimplemented.");

if (!this->is_multigraph()) { return edge_t{0}; }

Expand Down

0 comments on commit 0c10b84

Please sign in to comment.