Analytical Engine API Reference#

Analytical Engine#

class GrapeEngine#

GrapeEngine is responsible to assemble and start four major components of analytical engine, including VineyardServer, GrapeInstance, Dispatcher and GraphScopeServer.

Public Functions

inline GrapeEngine(std::string host, int port)#

Construct a new GrapeEngine object in service mode, listening at the host:port for incoming rpc requests.

Parameters:
  • host

  • port

inline explicit GrapeEngine(std::string dag_file)#

Construct a new GrapeEngine object in job mode, processing the workflow defined in the dagfile.

Parameters:

dag_file

inline void Start()#
inline void Stop()#
inline int RunDAGFile()#
class GrapeInstance : public gs::Subscriber#

MPI management.

This controller initials MPI communication world, assign a rank to each process. According to the assigned rank, determines whether this process runs as a coordinator or a worker. It also in charges of execute commands from coordinator.

Public Functions

explicit GrapeInstance(const grape::CommSpec &comm_spec)#
void Init(const std::string &vineyard_socket)#
virtual bl::result<std::shared_ptr<DispatchResult>> OnReceive(std::shared_ptr<CommandDetail> cmd) override#
class GSObject#

GSObject is the base class of GraphScope object. Every object which is managed by ObjectManager should inherit GSObject.

Subclassed by gs::AppEntry, gs::IContextWrapper, gs::IFragmentWrapper, gs::Projector, gs::PropertyGraphUtils

Public Functions

inline explicit GSObject(std::string id, ObjectType type)#
inline virtual ~GSObject()#
inline const std::string &id() const#
inline ObjectType type() const#
inline virtual std::string ToString() const#
class ObjectManager#

ObjectManager manages GSObject like fragment wrapper, loaded app and more.

Public Functions

inline bl::result<void> PutObject(std::shared_ptr<GSObject> obj)#
inline bl::result<void> RemoveObject(const std::string &id)#
inline bl::result<std::shared_ptr<GSObject>> GetObject(const std::string &id)#
template<typename T>
inline bl::result<std::shared_ptr<T>> GetObject(const std::string &id)#
inline bool HasObject(const std::string &id)#
class AnalyticalServer#

AnalyticalServer is responsible for create and start the gRPC service.

Public Functions

inline AnalyticalServer(std::shared_ptr<Dispatcher> dispatcher, std::string host, int port)#
void StartServer()#
void StopServer()#
struct EngineConfig#

EngineConfig contains configurations about the analytical engine, such as networkx features in enabled or not, vineyard socket, and vineyard rpc endpoint.

Public Functions

inline std::string ToJsonString() const#

Public Members

std::string networkx#
std::string vineyard_socket#
std::string vineyard_rpc_endpoint#
std::string enable_java_sdk#
class Dispatcher#

The dispatcher broadcast commands to every worker using MPI.

Public Functions

explicit Dispatcher(const grape::CommSpec &comm_spec)#
void Start()#
void Stop()#
std::vector<DispatchResult> Dispatch(std::shared_ptr<CommandDetail> cmd)#
void Subscribe(std::shared_ptr<Subscriber> subscriber)#
void SetCommand(std::shared_ptr<CommandDetail> cmd)#
class DispatchResult#

DispatchResult wraps computation result, metadata and error message for python client.

Public Types

enum AggregatePolicy#

Values:

enumerator kPickFirst#
enumerator kPickFirstNonEmpty#
enumerator kRequireConsistent#
enumerator kConcat#
enumerator kPickFirstNonEmptyGraphDef#
enumerator kMergeGraphDef#

Public Functions

DispatchResult() = default#
inline explicit DispatchResult(int worker_id, rpc::Code error_code = rpc::Code::OK)#
inline int worker_id() const#
inline void set_error(rpc::Code error_code, const std::string &message)#
inline rpc::Code error_code() const#
inline std::string message()#
inline bool has_large_data() const#
inline void set_graph_def(const rpc::graph::GraphDefPb &graph_def, AggregatePolicy policy = AggregatePolicy::kMergeGraphDef)#

Set the graph metadata. The meta should be kept consistent among all workers.

Parameters:

graph_def

inline const rpc::graph::GraphDefPb &graph_def() const#
inline rpc::graph::GraphDefPb &graph_def()#
inline void set_data(const std::string &data, AggregatePolicy policy = AggregatePolicy::kRequireConsistent, bool large_data = false)#
inline void set_data(const grape::InArchive &arc, AggregatePolicy policy = AggregatePolicy::kRequireConsistent, bool large_data = false)#
inline const std::string &data() const#
inline AggregatePolicy aggregate_policy() const#

Fragments in GraphScope#

template<typename FRAG_T>
class FragmentWrapper#

This is a fragment wrapper, which means a series of methods are provided to serialize/transform the data attached to the fragment. An AddColumn method is provided to add properties to create a new fragment from the original one.

Template Parameters:

FRAG_T

template<typename OID_T, typename VID_T, typename VDATA_T, typename EDATA_T, typename VERTEX_MAP_T = vineyard::ArrowVertexMap<typename vineyard::InternalType<OID_T>::type, VID_T>, bool COMPACT = false>
class ArrowProjectedFragment : public gs::ArrowProjectedFragmentBase, public vineyard::BareRegistered<ArrowProjectedFragment<OID_T, VID_T, VDATA_T, EDATA_T, vineyard::ArrowVertexMap<typename vineyard::InternalType<OID_T>::type, VID_T>, false>>#

This class represents the fragment projected from ArrowFragment which contains only one vertex label and edge label. The fragment has no label and property.

Template Parameters:
  • OID_T – OID type

  • VID_T – VID type

  • VDATA_T – The type of data attached with the vertex

  • EDATA_T – The type of data attached with the edge

Public Types

using oid_t = OID_T#
using vid_t = VID_T#
using internal_oid_t = typename vineyard::InternalType<oid_t>::type#
using eid_t = vineyard::property_graph_types::EID_TYPE#
using vertex_range_t = grape::VertexRange<vid_t>#
using inner_vertices_t = vertex_range_t#
using outer_vertices_t = vertex_range_t#
using vertices_t = vertex_range_t#
using sub_vertices_t = vertex_range_t#
using vertex_t = grape::Vertex<vid_t>#
using nbr_t = arrow_projected_fragment_impl::Nbr<vid_t, eid_t, EDATA_T>#
using compact_nbr_t = arrow_projected_fragment_impl::CompactNbr<vid_t, eid_t, EDATA_T>#
using nbr_unit_t = vineyard::property_graph_utils::NbrUnit<vid_t, eid_t>#
using adj_list_t = arrow_projected_fragment_impl::AdjList<vid_t, eid_t, EDATA_T>#
using compact_adj_list_t = arrow_projected_fragment_impl::CompactAdjList<vid_t, eid_t, EDATA_T>#
using const_adj_list_t = adj_list_t#
using const_compact_adj_list_t = compact_adj_list_t#
using property_vertex_map_t = VERTEX_MAP_T#
using vertex_map_t = ArrowProjectedVertexMap<internal_oid_t, vid_t, property_vertex_map_t>#
using label_id_t = vineyard::property_graph_types::LABEL_ID_TYPE#
using prop_id_t = vineyard::property_graph_types::PROP_ID_TYPE#
using vdata_t = VDATA_T#
using edata_t = EDATA_T#
using property_graph_t = vineyard::ArrowFragment<oid_t, vid_t, property_vertex_map_t, COMPACT>#
using vid_array_t = typename vineyard::ConvertToArrowType<vid_t>::ArrayType#
using eid_array_t = typename vineyard::ConvertToArrowType<eid_t>::ArrayType#
template<typename DATA_T>
using vertex_array_t = grape::VertexArray<vertices_t, DATA_T>#
template<typename DATA_T>
using inner_vertex_array_t = grape::VertexArray<inner_vertices_t, DATA_T>#
template<typename DATA_T>
using outer_vertex_array_t = grape::VertexArray<outer_vertices_t, DATA_T>#

Public Functions

inline ~ArrowProjectedFragment()#
inline void Construct(const vineyard::ObjectMeta &meta) override#
inline void PrepareToRunApp(const grape::CommSpec &comm_spec, grape::PrepareConf conf)#
inline fid_t fid() const#
inline fid_t fnum() const#
inline label_id_t vertex_label() const#
inline label_id_t edge_label() const#
inline prop_id_t vertex_prop_id() const#
inline prop_id_t edge_prop_id() const#
inline vertex_range_t Vertices() const#
inline vertex_range_t InnerVertices() const#
inline vertex_range_t OuterVertices() const#
inline vertex_range_t OuterVertices(fid_t fid) const#
inline const std::vector<vertex_t> &MirrorVertices(fid_t fid) const#
inline bool GetVertex(const oid_t &oid, vertex_t &v) const#
inline oid_t GetId(const vertex_t &v) const#
inline internal_oid_t GetInternalId(const vertex_t &v) const#
inline fid_t GetFragId(const vertex_t &v) const#
inline arrow_projected_fragment_impl::TypedArray<VDATA_T>::value_type GetData(const vertex_t &v) const#
inline bool Gid2Vertex(const vid_t &gid, vertex_t &v) const#
inline vid_t Vertex2Gid(const vertex_t &v) const#
inline vid_t GetInnerVerticesNum() const#
inline vid_t GetOuterVerticesNum() const#
inline vid_t GetVerticesNum() const#
inline size_t GetEdgeNum() const#
inline size_t GetInEdgeNum() const#
inline size_t GetOutEdgeNum() const#
inline size_t GetOutgoingEdgeNum() const#
inline size_t GetIncomingEdgeNum() const#
inline size_t GetTotalVerticesNum() const#
inline bool IsInnerVertex(const vertex_t &v) const#
inline bool IsOuterVertex(const vertex_t &v) const#
inline bool GetInnerVertex(const oid_t &oid, vertex_t &v) const#
inline bool GetOuterVertex(const oid_t &oid, vertex_t &v) const#
inline oid_t GetInnerVertexId(const vertex_t &v) const#
inline internal_oid_t GetInnerVertexInternalId(const vertex_t &v) const#
inline oid_t GetOuterVertexId(const vertex_t &v) const#
inline internal_oid_t GetOuterVertexInternalId(const vertex_t &v) const#
inline oid_t Gid2Oid(const vid_t &gid) const#
inline bool Oid2Gid(const oid_t &oid, vid_t &gid) const#
inline vid_t Oid2Gid(const oid_t &oid) const#
inline bool InnerVertexGid2Vertex(const vid_t &gid, vertex_t &v) const#
inline bool OuterVertexGid2Vertex(const vid_t &gid, vertex_t &v) const#
inline vid_t GetOuterVertexGid(const vertex_t &v) const#
inline vid_t GetInnerVertexGid(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<COMPACT_, compact_adj_list_t>::type GetIncomingAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<COMPACT_, compact_adj_list_t>::type GetOutgoingAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingInnerVertexAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingInnerVertexAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingOuterVertexAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingOuterVertexAdjList(const vertex_t &v) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetIncomingAdjList(const vertex_t &v, fid_t src_fid) const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, adj_list_t>::type GetOutgoingAdjList(const vertex_t &v, fid_t dst_fid) const#
inline int GetLocalOutDegree(const vertex_t &v) const#
inline int GetLocalInDegree(const vertex_t &v) const#
inline grape::DestList IEDests(const vertex_t &v) const#
inline grape::DestList OEDests(const vertex_t &v) const#
inline grape::DestList IOEDests(const vertex_t &v) const#
inline std::shared_ptr<vertex_map_t> GetVertexMap()#
inline const std::shared_ptr<vertex_map_t> GetVertexMap() const#
inline bool directed() const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, const nbr_unit_t*>::type get_out_edges_ptr() const#
template<bool COMPACT_ = COMPACT>
inline std::enable_if<!COMPACT_, const nbr_unit_t*>::type get_in_edges_ptr() const#
inline const int64_t *get_oe_offsets_begin_ptr() const#
inline const int64_t *get_oe_offsets_end_ptr() const#
inline const int64_t *get_ie_offsets_begin_ptr() const#
inline const int64_t *get_ie_offsets_end_ptr() const#
inline arrow_projected_fragment_impl::TypedArray<EDATA_T> &get_edata_array_accessor()#
inline arrow_projected_fragment_impl::TypedArray<VDATA_T> &get_vdata_array_accessor()#
inline std::shared_ptr<vineyard::ArrowFragment<oid_t, vid_t, property_vertex_map_t, COMPACT>> get_arrow_fragment()#
inline vineyard::ObjectID vertex_map_id() const#
inline bool local_vertex_map() const#
inline bool compact_edges() const#
inline bool use_perfect_hash() const#

Public Static Functions

static inline std::shared_ptr<vineyard::Object> Create()#
static inline std::shared_ptr<ArrowProjectedFragment<oid_t, vid_t, vdata_t, edata_t, property_vertex_map_t, COMPACT>> Project(std::shared_ptr<vineyard::ArrowFragment<oid_t, vid_t, property_vertex_map_t, COMPACT>> fragment, const label_id_t &v_label, const prop_id_t &v_prop, const label_id_t &e_label, const prop_id_t &e_prop)#

Public Static Attributes

static constexpr grape::LoadStrategy load_strategy = grape::LoadStrategy::kBothOutIn#
template<typename OID_T, typename VID_T, typename VERTEX_MAP_T = vineyard::ArrowVertexMap<OID_T, VID_T>>
class ArrowProjectedVertexMap : public vineyard::Registered<ArrowProjectedVertexMap<OID_T, VID_T, vineyard::ArrowVertexMap<OID_T, VID_T>>>#

This class represents the mapping between oid and vid.

Template Parameters:
  • OID_T – OID type

  • VID_T – VID type

Public Functions

inline void Construct(const vineyard::ObjectMeta &meta)#
inline bool GetOid(vid_t gid, oid_t &oid) const#
inline bool GetGid(fid_t fid, oid_t oid, vid_t &gid) const#
inline bool GetGid(oid_t oid, vid_t &gid) const#
inline vid_t Offset2Lid(const vid_t &offset)#
inline vid_t GetOffsetFromLid(vid_t lid)#
inline size_t GetTotalVerticesNum() const#
inline VID_T GetInnerVertexSize(fid_t fid) const#
inline VID_T GetLidFromGid(vid_t gid) const#
inline fid_t GetFidFromGid(vid_t gid) const#
inline bool use_perfect_hash() const#

Public Static Functions

static inline std::shared_ptr<vineyard::Object> Create()#
static inline std::shared_ptr<ArrowProjectedVertexMap<OID_T, VID_T, VERTEX_MAP_T>> Project(std::shared_ptr<property_vertex_map_t> vm, label_id_t v_label)#
template<typename OID_T = vineyard::property_graph_types::OID_TYPE, typename VID_T = vineyard::property_graph_types::VID_TYPE, template<typename OID_T_ = typename vineyard::InternalType<OID_T>::type, typename VID_T_ = VID_T> class VERTEX_MAP_T = vineyard::ArrowVertexMap>
class ArrowFragmentLoader : public vineyard::ArrowFragmentLoader<vineyard::property_graph_types::OID_TYPE, vineyard::property_graph_types::VID_TYPE>#

This loader can load a ArrowFragment from the data source including local file, oss, numpy, pandas and vineyard.

Template Parameters:
  • OID_T – OID type

  • VID_T – VID type

Public Functions

inline ArrowFragmentLoader(vineyard::Client &client, const grape::CommSpec &comm_spec, const std::vector<std::string> &efiles, const std::vector<std::string> &vfiles, bool directed = true, bool generate_eid = false, bool retain_oid = false, bool compact_edges = false, bool use_perfect_hash = false)#
inline ArrowFragmentLoader(vineyard::Client &client, const grape::CommSpec &comm_spec, std::shared_ptr<detail::Graph> graph_info)#
~ArrowFragmentLoader() = default#
inline boost::leaf::result<std::pair<table_vec_t, std::vector<table_vec_t>>> LoadVertexEdgeTables()#
inline bl::result<table_vec_t> LoadVertexTables()#
inline bl::result<std::vector<table_vec_t>> LoadEdgeTables()#
inline boost::leaf::result<vineyard::ObjectID> LoadFragment()#
inline boost::leaf::result<vineyard::ObjectID> LoadFragmentAsFragmentGroup()#
inline bl::result<vineyard::ObjectID> AddLabelsToFragment(vineyard::ObjectID frag_id)#
inline bl::result<vineyard::ObjectID> AddDataToExistedVLable(vineyard::ObjectID frag_id, label_id_t label_id)#
inline bl::result<vineyard::ObjectID> AddDataToExistedELable(vineyard::ObjectID frag_id, label_id_t label_id)#
inline boost::leaf::result<vineyard::ObjectID> AddLabelsToFragmentAsFragmentGroup(vineyard::ObjectID frag_id)#
inline bl::result<vineyard::ObjectID> ExtendLabelData(vineyard::ObjectID frag_id, int extend_type)#
inline bl::result<void> initPartitioner()#

Warning

doxygenclass: Cannot find class “gs::ArrowFragmentAppender” in doxygen xml output for project “GraphScope” from directory: /home/runner/work/GraphScope/GraphScope/docs/_build/doxygen/xml

Analytical Apps#

template<typename FRAG_T, typename CONTEXT_T>
class AppBase#

AppBase is the base class for applications.

It contains an grape::DefaultMessageManager to process messages during execution of application. Apps derived from this class need to process messages explicitly.

Template Parameters:
  • FRAG_T – Fragment class

  • CONTEXT_T – App context class

Public Types

using message_manager_t = grape::DefaultMessageManager#

Public Functions

AppBase() = default#
virtual ~AppBase() = default#
virtual void PEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0#

Partial evaluation to implement.

Note

: This pure virtual function works as an interface, instructing users to implement in the specific app. The PEval in the inherited apps would be invoked directly, not via virtual functions.

Parameters:
  • graph

  • context

  • messages

virtual void IncEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0#

Incremental evaluation to implement.

Note

: This pure virtual function works as an interface, instructing users to implement in the specific app. The IncEval in the inherited apps would be invoked directly, not via virtual functions.

Parameters:
  • graph

  • context

  • messages

Public Static Attributes

static constexpr bool need_split_edges = false#
static constexpr grape::MessageStrategy message_strategy = grape::MessageStrategy::kSyncOnOuterVertex#
static constexpr grape::LoadStrategy load_strategy = grape::LoadStrategy::kOnlyOut#
template<typename FRAG_T, typename CONTEXT_T>
class PropertyAppBase#

PropertyAppBase is the base class for applications on property graphs.

It contains an PropertyMessageManager to process messages during execution of application. Apps derived from this class need to process messages explicitly.

Template Parameters:
  • FRAG_T

  • CONTEXT_T

Public Types

using message_manager_t = PropertyMessageManager#

Public Functions

PropertyAppBase() = default#
virtual ~PropertyAppBase() = default#
virtual void PEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0#

Partial evaluation to implement.

Note

: This pure virtual function works as an interface, instructing users to implement in the specific app. The PEval in the inherited apps would be invoked directly, not via virtual functions.

Parameters:
  • graph

  • context

  • messages

virtual void IncEval(const FRAG_T &graph, CONTEXT_T &context, message_manager_t &messages) = 0#

Incremental evaluation to implement.

Note

: This pure virtual function works as an interface, instructing users to implement in the specific app. The IncEval in the inherited apps would be invoked directly, not via virtual functions.

Parameters:
  • graph

  • context

  • messages

Public Static Attributes

static constexpr bool need_split_edges = false#
static constexpr grape::MessageStrategy message_strategy = grape::MessageStrategy::kSyncOnOuterVertex#
static constexpr grape::LoadStrategy load_strategy = grape::LoadStrategy::kBothOutIn#
template<typename FRAG_T, typename CONTEXT_T>
class PropertyAutoAppBase#

PropertyAutoAppBase is the base class for applications on property graph, with an PropertyAutoMessageManager to process messages during execution of application. Apps derived from this class do not need to process messages explicitly.

Template Parameters:
  • FRAG_T

  • CONTEXT_T

Public Functions

PropertyAutoAppBase() = default#
virtual ~PropertyAutoAppBase() = default#
virtual void PEval(const FRAG_T &graph, CONTEXT_T &context) = 0#

Partial evaluation to implement.

Note

: This pure virtual function works as an interface, instructing users to implement in the specific app. The PEval in the inherited apps would be invoked directly, not via virtual functions.

Parameters:
  • graph

  • context

  • messages

virtual void IncEval(const FRAG_T &graph, CONTEXT_T &context) = 0#

Incremental evaluation to implement.

Note

: This pure virtual function works as an interface, instructing users to implement in the specific app. The IncEval in the inherited apps would be invoked directly, not via virtual functions.

Parameters:
  • graph

  • context

  • messages

Public Static Attributes

static constexpr bool need_split_edges = false#
static constexpr grape::MessageStrategy message_strategy = grape::MessageStrategy::kSyncOnOuterVertex#
static constexpr grape::LoadStrategy load_strategy = grape::LoadStrategy::kBothOutIn#
template<typename APP_T>
class DefaultWorker#

DefaultWorker manages the computation cycle. DefaultWorker is a kind of serial worker for apps derived from AppBase.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t#
using context_t = typename APP_T::context_t#
using message_manager_t = grape::DefaultMessageManager#

Public Functions

inline DefaultWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)#
~DefaultWorker() = default#
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())#
inline void Finalize()#
template<class ...Args>
inline void Query(Args&&... args)#
inline std::shared_ptr<context_t> GetContext()#
inline void Output(std::ostream &os)#
template<typename APP_T>
class ParallelPropertyWorker#

A parallel worker for labeled fragment.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t#
using context_t = typename APP_T::context_t#
using message_manager_t = ParallelPropertyMessageManager#

Public Functions

inline ParallelPropertyWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)#
virtual ~ParallelPropertyWorker() = default#
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())#
inline void Finalize()#
template<class ...Args>
inline void Query(Args&&... args)#
inline std::shared_ptr<context_t> GetContext()#
inline void Output(std::ostream &os)#
template<typename APP_T>
class PropertyAutoWorker#

A Worker manages the computation cycle. PropertyAutoWorker is a kind of worker for apps derived from PropertyAutoAppBase.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t#
using context_t = typename APP_T::context_t#
using message_manager_t = PropertyAutoMessageManager<typename APP_T::fragment_t>#

Public Functions

inline PropertyAutoWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)#
~PropertyAutoWorker() = default#
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())#
inline void Finalize()#
template<class ...Args>
inline void Query(Args&&... args)#
inline std::shared_ptr<context_t> GetContext()#
inline void Output(std::ostream &os)#
class AppEntry : public gs::GSObject#

AppEntry is a class manages an application.

AppEntry holds the a group of function pointers to manipulate the AppFrame, such as gs::CreateWorker, DeleteWorker and Query. The method Init must be called to load the library before use.

Public Functions

inline AppEntry(std::string id, std::string lib_path)#
inline bl::result<void> Init()#
inline bl::result<std::shared_ptr<void>> CreateWorker(const std::shared_ptr<void> &fragment, const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &spec)#
inline bl::result<std::shared_ptr<IContextWrapper>> Query(void *worker_handler, const rpc::QueryArgs &query_args, const std::string &context_key, std::shared_ptr<IFragmentWrapper> &frag_wrapper)#
template<class FunctionType>
struct ArgsNum#
template<typename T>
struct ArgsUnpacker#

ArgsUnpacker is an util to unpack the Any type of proto to C++ datatype.

Template Parameters:

T – The destination type

template<std::size_t index, class FunctionType>
struct ArgTypeAt#

Analytical Workers#

template<typename APP_T>
class DefaultWorker

DefaultWorker manages the computation cycle. DefaultWorker is a kind of serial worker for apps derived from AppBase.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t
using context_t = typename APP_T::context_t
using message_manager_t = grape::DefaultMessageManager

Public Functions

inline DefaultWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)
~DefaultWorker() = default
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())
inline void Finalize()
template<class ...Args>
inline void Query(Args&&... args)
inline std::shared_ptr<context_t> GetContext()
inline void Output(std::ostream &os)
template<typename APP_T>
class DefaultPropertyWorker#

A Worker manages the computation cycle. DefaultPropertyWorker is a kind of worker for apps derived from AppBase.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t#
using context_t = typename APP_T::context_t#
using message_manager_t = PropertyMessageManager#

Public Functions

inline DefaultPropertyWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)#
~DefaultPropertyWorker() = default#
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())#
inline void Finalize()#
template<class ...Args>
inline void Query(Args&&... args)#
inline std::shared_ptr<context_t> GetContext()#
inline void Output(std::ostream &os)#
template<typename APP_T>
class ParallelPropertyWorker

A parallel worker for labeled fragment.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t
using context_t = typename APP_T::context_t
using message_manager_t = ParallelPropertyMessageManager

Public Functions

inline ParallelPropertyWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)
virtual ~ParallelPropertyWorker() = default
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())
inline void Finalize()
template<class ...Args>
inline void Query(Args&&... args)
inline std::shared_ptr<context_t> GetContext()
inline void Output(std::ostream &os)
template<typename APP_T>
class PropertyAutoWorker

A Worker manages the computation cycle. PropertyAutoWorker is a kind of worker for apps derived from PropertyAutoAppBase.

Template Parameters:

APP_T

Public Types

using fragment_t = typename APP_T::fragment_t
using context_t = typename APP_T::context_t
using message_manager_t = PropertyAutoMessageManager<typename APP_T::fragment_t>

Public Functions

inline PropertyAutoWorker(std::shared_ptr<APP_T> app, std::shared_ptr<fragment_t> graph)
~PropertyAutoWorker() = default
inline void Init(const grape::CommSpec &comm_spec, const grape::ParallelEngineSpec &pe_spec = grape::DefaultParallelEngineSpec())
inline void Finalize()
template<class ...Args>
inline void Query(Args&&... args)
inline std::shared_ptr<context_t> GetContext()
inline void Output(std::ostream &os)

App’s Context#

template<typename CTX_T, typename = void>
struct CtxWrapperBuilder#

This is a utility to build kinds of ContextWrapper instances.

Template Parameters:

CTX_T

template<typename FRAG_T>
class VertexPropertyContext : public ContextBase#

VertexPropertyContext can hold any number of columns. The context is designed for labeled fragment - ArrowFragment. Compared with LabeledVertexDataContext, the data type and column count can be determined at runtime.

Template Parameters:

FRAG_T – The fragment class (non-labeled fragment only)

Public Types

using fragment_t = FRAG_T#
using vertex_t = typename fragment_t::vertex_t#
using prop_id_t = vineyard::property_graph_types::PROP_ID_TYPE#
using oid_t = typename fragment_t::oid_t#

Public Functions

inline explicit VertexPropertyContext(const fragment_t &fragment)#
inline const fragment_t &fragment()#
inline int64_t add_column(const std::string &name, ContextDataType type)#
inline std::shared_ptr<IColumn> get_column(int64_t index)#
inline std::shared_ptr<IColumn> get_column(const std::string &name)#
template<typename DATA_T>
inline std::shared_ptr<Column<fragment_t, DATA_T>> get_typed_column(int64_t index)#
template<typename DATA_T>
inline std::shared_ptr<Column<fragment_t, DATA_T>> get_typed_column(const std::string &name)#
inline std::vector<std::shared_ptr<IColumn>> &vertex_properties()#
inline const std::map<std::string, std::shared_ptr<IColumn>> &properties_map()#
template<typename FRAG_T, typename DATA_T>
class VertexDataContextWrapper : public gs::IVertexDataContextWrapper#

This is the wrapper class for VertexDataContext. A series of methods are provided to transform the data hold by the context.

Template Parameters:
  • FRAG_T – The fragment class (Non-labeled fragment only)

  • DATA_T – The Data type hold by context

Public Functions

inline explicit VertexDataContextWrapper(const std::string &id, std::shared_ptr<IFragmentWrapper> frag_wrapper, std::shared_ptr<context_t> ctx)#
inline virtual std::string context_type() override#
inline virtual std::shared_ptr<IFragmentWrapper> fragment_wrapper() override#
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToNdArray(const grape::CommSpec &comm_spec, const Selector &selector, const std::pair<std::string, std::string> &range) override#
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToDataframe(const grape::CommSpec &comm_spec, const std::vector<std::pair<std::string, Selector>> &selectors, const std::pair<std::string, std::string> &range) override#
inline virtual bl::result<vineyard::ObjectID> ToVineyardTensor(const grape::CommSpec &comm_spec, vineyard::Client &client, const Selector &selector, const std::pair<std::string, std::string> &range) override#
inline virtual bl::result<vineyard::ObjectID> ToVineyardDataframe(const grape::CommSpec &comm_spec, vineyard::Client &client, const std::vector<std::pair<std::string, Selector>> &selectors, const std::pair<std::string, std::string> &range) override#
inline virtual bl::result<std::vector<std::pair<std::string, std::shared_ptr<arrow::Array>>>> ToArrowArrays(const grape::CommSpec &comm_spec, const std::vector<std::pair<std::string, Selector>> &selectors) override#
template<typename FRAG_T, typename DATA_T>
class TensorContext : public ContextBase#

TensorContext is designed for holding a bunch of computation results. The TensorContext should be used if the number of elements are not related to the number of the vertex.

Template Parameters:
  • FRAG_T

  • DATA_T

Public Types

using data_t = DATA_T#

Public Functions

inline explicit TensorContext(const fragment_t &fragment)#
inline const fragment_t &fragment()#
inline void assign(const std::vector<data_t> &data, const std::vector<size_t> &shape)#
inline void assign(const data_t &data)#
inline void set_shape(std::vector<std::size_t> shape)#
inline std::vector<size_t> shape() const#
inline tensor_t &tensor()#
template<typename FRAG_T, typename DATA_T, typename = void>
class TensorContextWrapper : public gs::ITensorContextWrapper#

TensorContextWrapper is the wrapper class for TensorContext.

Template Parameters:
  • FRAG_T

  • DATA_T

Public Functions

inline explicit TensorContextWrapper(const std::string &id, std::shared_ptr<IFragmentWrapper> frag_wrapper, std::shared_ptr<context_t> ctx)#
inline virtual std::string context_type() override#
inline virtual std::shared_ptr<IFragmentWrapper> fragment_wrapper() override#
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToNdArray(const grape::CommSpec &comm_spec, uint32_t axis) override#
inline virtual bl::result<std::unique_ptr<grape::InArchive>> ToDataframe(const grape::CommSpec &comm_spec) override#
inline virtual bl::result<vineyard::ObjectID> ToVineyardTensor(const grape::CommSpec &comm_spec, vineyard::Client &client, uint32_t axis) override#
inline virtual bl::result<vineyard::ObjectID> ToVineyardDataframe(const grape::CommSpec &comm_spec, vineyard::Client &client) override#
inline virtual bl::result<std::vector<std::pair<std::string, std::shared_ptr<arrow::Array>>>> ToArrowArrays(const grape::CommSpec &comm_spec, const std::vector<std::pair<std::string, Selector>> &selectors) override#