vg
tools for working with variation graphs
Public Member Functions | Public Attributes | Protected Member Functions | Private Attributes | List of all members
vg::MemoizingGraph Class Reference

#include <memoizing_graph.hpp>

Inheritance diagram for vg::MemoizingGraph:
handlegraph::PathPositionHandleGraph handlegraph::PathHandleGraph handlegraph::HandleGraph handlegraph::PathMetadata

Public Member Functions

 MemoizingGraph (const PathPositionHandleGraph *graph)
 Initialize with a pointer to graph we want to memoize operations for. More...
 
 MemoizingGraph ()=default
 Default constructor – not actually functional. More...
 
 ~MemoizingGraph ()=default
 Default destructor. More...
 
virtual bool has_node (id_t node_id) const
 HandleGraph interface. More...
 
virtual handle_t get_handle (const id_t &node_id, bool is_reverse=false) const
 Look up the handle for the node with the given ID in the given orientation. More...
 
virtual id_t get_id (const handle_t &handle) const
 Get the ID from a handle. More...
 
virtual bool get_is_reverse (const handle_t &handle) const
 Get the orientation of a handle. More...
 
virtual handle_t flip (const handle_t &handle) const
 Invert the orientation of a handle (potentially without getting its ID) More...
 
virtual size_t get_length (const handle_t &handle) const
 Get the length of a node. More...
 
virtual string get_sequence (const handle_t &handle) const
 
virtual bool follow_edges_impl (const handle_t &handle, bool go_left, const function< bool(const handle_t &)> &iteratee) const
 
virtual bool for_each_handle_impl (const function< bool(const handle_t &)> &iteratee, bool parallel=false) const
 
virtual size_t get_node_count () const
 Return the number of nodes in the graph. More...
 
virtual id_t min_node_id () const
 
virtual id_t max_node_id () const
 
virtual size_t get_path_count () const
 Returns the number of paths stored in the graph. More...
 
virtual bool has_path (const std::string &path_name) const
 Determine if a path name exists and is legal to get a path handle for. More...
 
virtual path_handle_t get_path_handle (const std::string &path_name) const
 
virtual std::string get_path_name (const path_handle_t &path_handle) const
 Look up the name of a path from a handle to it. More...
 
virtual bool get_is_circular (const path_handle_t &path_handle) const
 Look up whether a path is circular. More...
 
virtual size_t get_step_count (const path_handle_t &path_handle) const
 Returns the number of node steps in the path. More...
 
virtual handle_t get_handle_of_step (const step_handle_t &step_handle) const
 Get a node handle (node ID and orientation) from a handle to an step on a path. More...
 
virtual path_handle_t get_path_handle_of_step (const step_handle_t &step_handle) const
 Returns a handle to the path that an step is on. More...
 
virtual step_handle_t path_begin (const path_handle_t &path_handle) const
 
virtual step_handle_t path_end (const path_handle_t &path_handle) const
 
virtual step_handle_t path_back (const path_handle_t &path_handle) const
 
virtual step_handle_t path_front_end (const path_handle_t &path_handle) const
 
virtual bool has_next_step (const step_handle_t &step_handle) const
 Returns true if the step is not the last step in a non-circular path. More...
 
virtual bool has_previous_step (const step_handle_t &step_handle) const
 Returns true if the step is not the first step in a non-circular path. More...
 
virtual step_handle_t get_next_step (const step_handle_t &step_handle) const
 
virtual step_handle_t get_previous_step (const step_handle_t &step_handle) const
 
virtual std::vector< step_handle_tsteps_of_handle (const handle_t &handle, bool match_orientation=false) const
 
virtual bool is_empty (const path_handle_t &path_handle) const
 Returns true if the given path is empty, and false otherwise. More...
 
virtual size_t get_path_length (const path_handle_t &path_handle) const
 Returns the length of a path measured in bases of sequence. More...
 
virtual size_t get_position_of_step (const step_handle_t &step) const
 
virtual step_handle_t get_step_at_position (const path_handle_t &path, const size_t &position) const
 
- Public Member Functions inherited from handlegraph::PathPositionHandleGraph
virtual ~PathPositionHandleGraph ()=default
 
- Public Member Functions inherited from handlegraph::PathHandleGraph
virtual ~PathHandleGraph ()=default
 
virtual size_t get_step_count (const handle_t &handle) const
 Returns the number of node steps on a handle. More...
 
template<typename Iteratee >
bool for_each_path_handle (const Iteratee &iteratee) const
 
template<typename Iteratee >
bool for_each_step_on_handle (const handle_t &handle, const Iteratee &iteratee) const
 
PathForEachSocket scan_path (const path_handle_t &path) const
 
template<typename Iteratee >
bool for_each_step_in_path (const path_handle_t &path, const Iteratee &iteratee) const
 
- Public Member Functions inherited from handlegraph::HandleGraph
virtual ~HandleGraph ()=default
 
template<typename Iteratee >
bool follow_edges (const handle_t &handle, bool go_left, const Iteratee &iteratee) const
 
template<typename Iteratee >
bool for_each_handle (const Iteratee &iteratee, bool parallel=false) const
 
virtual size_t get_degree (const handle_t &handle, bool go_left) const
 
virtual bool has_edge (const handle_t &left, const handle_t &right) const
 
bool has_edge (const edge_t &edge) const
 Convenient wrapper of has_edge for edge_t argument. More...
 
virtual size_t get_edge_count () const
 
virtual size_t get_total_length () const
 
virtual char get_base (const handle_t &handle, size_t index) const
 
virtual std::string get_subsequence (const handle_t &handle, size_t index, size_t size) const
 
handle_t forward (const handle_t &handle) const
 Get the locally forward version of a handle. More...
 
edge_t edge_handle (const handle_t &left, const handle_t &right) const
 
handle_t traverse_edge_handle (const edge_t &edge, const handle_t &left) const
 
template<typename Iteratee >
bool for_each_edge (const Iteratee &iteratee, bool parallel=false) const
 

Public Attributes

size_t max_handle_memo_size = 500
 The largest number of calls to get_handle we will memoize. More...
 
size_t max_steps_of_handle_memo_size = 500
 The largest number of calls to steps_of_handle we will memoize. More...
 

Protected Member Functions

virtual bool for_each_path_handle_impl (const std::function< bool(const path_handle_t &)> &iteratee) const
 
virtual bool for_each_step_on_handle_impl (const handle_t &handle, const std::function< bool(const step_handle_t &)> &iteratee) const
 
virtual bool for_each_step_position_on_handle (const handle_t &handle, const std::function< bool(const step_handle_t &, const bool &, const size_t &)> &iteratee) const
 
- Protected Member Functions inherited from handlegraph::HandleGraph
virtual bool follow_edges_impl (const handle_t &handle, bool go_left, const std::function< bool(const handle_t &)> &iteratee) const =0
 
virtual bool for_each_handle_impl (const std::function< bool(const handle_t &)> &iteratee, bool parallel=false) const =0
 

Private Attributes

const PathPositionHandleGraphgraph = nullptr
 The graph we're memoizing operations for. More...
 
unordered_map< id_t, handle_tget_handle_memo
 Memo for get_handle. More...
 
unordered_map< handle_t, vector< step_handle_t > > steps_of_handle_memo
 Memo for steps_of_handle. More...
 

Additional Inherited Members

Detailed Description

A PathPositionHandleGraph implementation that memoizes the results of get_handle and steps_of_handle.

Constructor & Destructor Documentation

◆ MemoizingGraph() [1/2]

vg::MemoizingGraph::MemoizingGraph ( const PathPositionHandleGraph graph)

Initialize with a pointer to graph we want to memoize operations for.

◆ MemoizingGraph() [2/2]

vg::MemoizingGraph::MemoizingGraph ( )
default

Default constructor – not actually functional.

◆ ~MemoizingGraph()

vg::MemoizingGraph::~MemoizingGraph ( )
default

Default destructor.

Member Function Documentation

◆ flip()

handle_t vg::MemoizingGraph::flip ( const handle_t handle) const
virtual

Invert the orientation of a handle (potentially without getting its ID)

Implements handlegraph::HandleGraph.

◆ follow_edges_impl()

bool vg::MemoizingGraph::follow_edges_impl ( const handle_t handle,
bool  go_left,
const function< bool(const handle_t &)> &  iteratee 
) const
virtual

Loop over all the handles to next/previous (right/left) nodes. Passes them to a callback which returns false to stop iterating and true to continue. Returns true if we finished and false if we stopped early.

◆ for_each_handle_impl()

bool vg::MemoizingGraph::for_each_handle_impl ( const function< bool(const handle_t &)> &  iteratee,
bool  parallel = false 
) const
virtual

Loop over all the nodes in the graph in their local forward orientations, in their internal stored order. Stop if the iteratee returns false. Can be told to run in parallel, in which case stopping after a false return value is on a best-effort basis and iteration order is not defined.

◆ for_each_path_handle_impl()

bool vg::MemoizingGraph::for_each_path_handle_impl ( const std::function< bool(const path_handle_t &)> &  iteratee) const
protectedvirtual

Execute a function on each path in the graph. If it returns false, stop iteration. Returns true if we finished and false if we stopped early.

Implements handlegraph::PathHandleGraph.

◆ for_each_step_on_handle_impl()

bool vg::MemoizingGraph::for_each_step_on_handle_impl ( const handle_t handle,
const std::function< bool(const step_handle_t &)> &  iteratee 
) const
protectedvirtual

Execute a function on each step of a handle in any path. If it returns false, stop iteration. Returns true if we finished and false if we stopped early.

Implements handlegraph::PathHandleGraph.

◆ for_each_step_position_on_handle()

bool vg::MemoizingGraph::for_each_step_position_on_handle ( const handle_t handle,
const std::function< bool(const step_handle_t &, const bool &, const size_t &)> &  iteratee 
) const
protectedvirtual

Execute an itteratee on each step and its path relative position and orientation on a handle in any path. Iteration will stop early if the iteratee returns false. This method returns false if iteration was stopped early, else true.

Reimplemented from handlegraph::PathPositionHandleGraph.

◆ get_handle()

handle_t vg::MemoizingGraph::get_handle ( const id_t node_id,
bool  is_reverse = false 
) const
virtual

Look up the handle for the node with the given ID in the given orientation.

Implements handlegraph::HandleGraph.

◆ get_handle_of_step()

handle_t vg::MemoizingGraph::get_handle_of_step ( const step_handle_t step_handle) const
virtual

Get a node handle (node ID and orientation) from a handle to an step on a path.

Implements handlegraph::PathHandleGraph.

◆ get_id()

id_t vg::MemoizingGraph::get_id ( const handle_t handle) const
virtual

Get the ID from a handle.

Implements handlegraph::HandleGraph.

◆ get_is_circular()

bool vg::MemoizingGraph::get_is_circular ( const path_handle_t path_handle) const
virtual

Look up whether a path is circular.

Implements handlegraph::PathHandleGraph.

◆ get_is_reverse()

bool vg::MemoizingGraph::get_is_reverse ( const handle_t handle) const
virtual

Get the orientation of a handle.

Implements handlegraph::HandleGraph.

◆ get_length()

size_t vg::MemoizingGraph::get_length ( const handle_t handle) const
virtual

Get the length of a node.

Implements handlegraph::HandleGraph.

◆ get_next_step()

step_handle_t vg::MemoizingGraph::get_next_step ( const step_handle_t step_handle) const
virtual

Returns a handle to the next step on the path. If the given step is the final step of a non-circular path, this method has undefined behavior. In a circular path, the "last" step will loop around to the "first" step.

Implements handlegraph::PathHandleGraph.

◆ get_node_count()

size_t vg::MemoizingGraph::get_node_count ( ) const
virtual

Return the number of nodes in the graph.

Implements handlegraph::HandleGraph.

◆ get_path_count()

size_t vg::MemoizingGraph::get_path_count ( ) const
virtual

Returns the number of paths stored in the graph.

Implements handlegraph::PathHandleGraph.

◆ get_path_handle()

path_handle_t vg::MemoizingGraph::get_path_handle ( const std::string &  path_name) const
virtual

Look up the path handle for the given path name. The path with that name must exist.

Implements handlegraph::PathHandleGraph.

◆ get_path_handle_of_step()

path_handle_t vg::MemoizingGraph::get_path_handle_of_step ( const step_handle_t step_handle) const
virtual

Returns a handle to the path that an step is on.

Implements handlegraph::PathHandleGraph.

◆ get_path_length()

size_t vg::MemoizingGraph::get_path_length ( const path_handle_t path_handle) const
virtual

Returns the length of a path measured in bases of sequence.

Implements handlegraph::PathPositionHandleGraph.

◆ get_path_name()

std::string vg::MemoizingGraph::get_path_name ( const path_handle_t path_handle) const
virtual

Look up the name of a path from a handle to it.

Implements handlegraph::PathHandleGraph.

◆ get_position_of_step()

size_t vg::MemoizingGraph::get_position_of_step ( const step_handle_t step) const
virtual

Returns the position along the path of the beginning of this step measured in bases of sequence. In a circular path, positions start at the step returned by path_begin().

Implements handlegraph::PathPositionHandleGraph.

◆ get_previous_step()

step_handle_t vg::MemoizingGraph::get_previous_step ( const step_handle_t step_handle) const
virtual

Returns a handle to the previous step on the path. If the given step is the first step of a non-circular path, this method has undefined behavior. In a circular path, it will loop around from the "first" step (i.e. the one returned by path_begin) to the "last" step.

Implements handlegraph::PathHandleGraph.

◆ get_sequence()

string vg::MemoizingGraph::get_sequence ( const handle_t handle) const
virtual

Get the sequence of a node, presented in the handle's local forward orientation.

Implements handlegraph::HandleGraph.

◆ get_step_at_position()

step_handle_t vg::MemoizingGraph::get_step_at_position ( const path_handle_t path,
const size_t &  position 
) const
virtual

Returns the step at this position, measured in bases of sequence starting at the step returned by path_begin(). If the position is past the end of the path, returns path_end().

Implements handlegraph::PathPositionHandleGraph.

◆ get_step_count()

size_t vg::MemoizingGraph::get_step_count ( const path_handle_t path_handle) const
virtual

Returns the number of node steps in the path.

Implements handlegraph::PathHandleGraph.

◆ has_next_step()

bool vg::MemoizingGraph::has_next_step ( const step_handle_t step_handle) const
virtual

Returns true if the step is not the last step in a non-circular path.

Implements handlegraph::PathHandleGraph.

◆ has_node()

bool vg::MemoizingGraph::has_node ( id_t  node_id) const
virtual

HandleGraph interface.

Method to check if a node exists by ID

Implements handlegraph::HandleGraph.

◆ has_path()

bool vg::MemoizingGraph::has_path ( const std::string &  path_name) const
virtual

Determine if a path name exists and is legal to get a path handle for.

Implements handlegraph::PathHandleGraph.

◆ has_previous_step()

bool vg::MemoizingGraph::has_previous_step ( const step_handle_t step_handle) const
virtual

Returns true if the step is not the first step in a non-circular path.

Implements handlegraph::PathHandleGraph.

◆ is_empty()

bool vg::MemoizingGraph::is_empty ( const path_handle_t path_handle) const
virtual

Returns true if the given path is empty, and false otherwise.

Reimplemented from handlegraph::PathHandleGraph.

◆ max_node_id()

id_t vg::MemoizingGraph::max_node_id ( ) const
virtual

Return the largest ID in the graph, or some larger number if the largest ID is unavailable. Return value is unspecified if the graph is empty.

Implements handlegraph::HandleGraph.

◆ min_node_id()

id_t vg::MemoizingGraph::min_node_id ( ) const
virtual

Return the smallest ID in the graph, or some smaller number if the smallest ID is unavailable. Return value is unspecified if the graph is empty.

Implements handlegraph::HandleGraph.

◆ path_back()

step_handle_t vg::MemoizingGraph::path_back ( const path_handle_t path_handle) const
virtual

Get a handle to the last step, which will be an arbitrary step in a circular path that we consider "last" based on our construction of the path. If the path is empty then the implementation must return the same value as path_front_end().

Implements handlegraph::PathHandleGraph.

◆ path_begin()

step_handle_t vg::MemoizingGraph::path_begin ( const path_handle_t path_handle) const
virtual

Get a handle to the first step, which will be an arbitrary step in a circular path that we consider "first" based on our construction of the path. If the path is empty, then the implementation must return the same value as path_end().

Implements handlegraph::PathHandleGraph.

◆ path_end()

step_handle_t vg::MemoizingGraph::path_end ( const path_handle_t path_handle) const
virtual

Get a handle to a fictitious position past the end of a path. This position is returned by get_next_step for the final step in a path in a non-circular path. Note: get_next_step will NEVER return this value for a circular path.

Implements handlegraph::PathHandleGraph.

◆ path_front_end()

step_handle_t vg::MemoizingGraph::path_front_end ( const path_handle_t path_handle) const
virtual

Get a handle to a fictitious position before the beginning of a path. This position is return by get_previous_step for the first step in a path in a non-circular path. Note: get_previous_step will NEVER return this value for a circular path.

Implements handlegraph::PathHandleGraph.

◆ steps_of_handle()

std::vector< step_handle_t > vg::MemoizingGraph::steps_of_handle ( const handle_t handle,
bool  match_orientation = false 
) const
virtual

Returns a vector of all steps of a node on paths. Optionally restricts to steps that match the handle in orientation.

Reimplemented from handlegraph::PathHandleGraph.

Member Data Documentation

◆ get_handle_memo

unordered_map<id_t, handle_t> vg::MemoizingGraph::get_handle_memo
private

Memo for get_handle.

◆ graph

const PathPositionHandleGraph* vg::MemoizingGraph::graph = nullptr
private

The graph we're memoizing operations for.

◆ max_handle_memo_size

size_t vg::MemoizingGraph::max_handle_memo_size = 500

The largest number of calls to get_handle we will memoize.

◆ max_steps_of_handle_memo_size

size_t vg::MemoizingGraph::max_steps_of_handle_memo_size = 500

The largest number of calls to steps_of_handle we will memoize.

◆ steps_of_handle_memo

unordered_map<handle_t, vector<step_handle_t> > vg::MemoizingGraph::steps_of_handle_memo
private

Memo for steps_of_handle.


The documentation for this class was generated from the following files: