1 Introduction
Graph embedding methods aim to represent each node of a graph in a lowdimensional vector space while preserving certain graph’s properties
(goyal2018graph). Such methods have been used to tackle many realworld tasks, e.g., friend recommendation in social networks, genome classification in biology networks, and visualizing topics in research using collaboration networks.More recently, much attention has been devoted to extending static embedding techniques to capture graph evolution. Applications include temporal link prediction, and understanding the evolution dynamics of network communities. Most methods aim to efficiently update the embedding of the graph at each time step using information from previous embedding and from changes in the graph. Some methods also capture the temporal patterns of the evolution in the learned embedding, leading to improved link prediction performance.
In this paper, we present DynamicGEM, an easytouse toolkit of stateoftheart dynamic graph embedding methods. In contrast to existing popular graph embedding libraries like GEM (goyal3gem)
, which implement static graph embedding methods, DynamicGEM implements methods which can handle the evolution of networks over time. Further, we provide a comprehensive framework to evaluate the methods by providing support for four tasks on dynamic networks: graph reconstruction, static and temporal link prediction, node classification, and temporal visualization. For each task, our framework includes multiple evaluation metrics to quantify the performance of the methods. We further share synthetic and real networks for evaluation. Thus, our library is an endtoend framework to experiment with dynamic graph embedding. The software is available at
https://github.com/palash1992/DynamicGEM. We provide extensive documentation for installation and testing of various methods available in the library. The documentation also contains an easytouse guide for quickly adding new methods to the framework.2 Dynamic Graph Embedding Algorithms
Dynamic graph embedding algorithms aim to capture the dynamics of the network and its evolution. These methods are useful to predict the future behavior of the network, such as future connections within a network. The problem can be defined formally as follows.
Consider a weighted graph , with and as the set of vertices and edges respectively. Given an evolution of graph , where represents the state of graph at time , a dynamic graph embedding method aims to represent each node in a series of lowdimensional vector space by learning mappings and . The methods differ in the definition of and the properties of the network preserved by .
There are various existing state of the art methods trying to solve this problem that we have incorporated and included them in this python package including:

[noitemsep,topsep=0pt,parsep=0pt,partopsep=0pt,leftmargin=*]

Optimal SVD
: This method decomposes adjacency matrix of the graph at each time step using Singular Value Decomposition (SVD) to represent each node using the
largest singular values (ou2016asymmetric). 
Incremental SVD: This method utilizes a perturbation matrix capturing the dynamics of the graphs along with performing additive modification on the SVD (BRAND200620).

Rerun SVD: This method uses incremental SVD to create the dynamic graph embedding. In addition to that, it uses a tolerance threshold to restart the optimal SVD calculations and avoid deviation in incremental graph embedding (zhang2017timers).

Dynamic TRIAD: This method utilizes the triadic closure process to generate a graph embedding that preserves structural and evolution patterns of the graph (zhou2018dynamic).

AEalign: This method uses deep autoencoder to embed each node in the graph and aligns the embeddings at different time steps using a rotation matrix (goyal2018dyngem).

dynGEM: This method utilizes deep autoencoders to incrementally generate embedding of a dynamic graph at snapshot (goyal2018dyngem).

dyngraph2vecAE: This method models the interconnection of nodes within and across time using multiple fully connected layers (goyal2018dyngraph2vec)

dyngraph2vecRNN
: This method uses sparsely connected Long Short Term Memory (LSTM) networks to learn the embedding
(goyal2018dyngraph2vec) 
dyngraph2vecAERNN
: This method uses a fully connected encoder to initially acquire low dimensional hidden representation and feeds this representation into LSTMs to capture network dynamics
(goyal2018dyngraph2vec).
3 Software Package
DynamicGEM implements the stateoftheart dynamic graph embedding methods in Python and MATLAB and provides a Python interface for all the methods. The library takes as input a series of dynamic graphs as list of Networkx Digraph each corresponding to a single time step. In this section, we discuss details of library usage.
3.1 Usage
Next, we demonstrate the visualization of the graph embedding performed by dyngraph2vecRNN on stochastic block model dataset.
3.2 Documentation and Design
DynamicGEM package contains README files in DynamicGEM and its sub directories including dynamicgem/dynamictriad, and dynamicgem/graphgeneration directories containing explanation about the repository, its structure, setup, implemented methods, usage, dependencies, and other useful information for user guidance. The repository is organized in an easy to navigate manner. The subdirectories are organized based on the functionality which they serve as follows:

[noitemsep,topsep=0pt,parsep=0pt,partopsep=0pt,leftmargin=*]

DynamicGEM/embedding: It contains implementation of the algorithms listed in section 3.2. In addition to dynamic graph embedding algorithms, this sub directory contains implementation for some static graph embedding methods on which the dynamic methods are built.

DynamicGEM/evaluation: It contains implementations of graph reconstruction, static and temporal link prediction and visualization for evaluation purposes.

DynamicGEM/utils: It contains implementation of utility functions for data preparation, plotting, embedding formatting, evaluation, and a variety of other functions that are building blocks of other functions.

DynamicGEM/graphgeneration: It consists of functions to generate dynamic Stochastic Block Models (SBM) (wang1987stochastic) with diminishing community.

DynamicGEM/visualization: It contains functions for visualizing dynamic and static graph embeddings.

DynamicGEM/experiments: It contains useful hyperparameter tuning function implementations.

DynamicGEM/TIMERS: It contains the TIMERS source code.

DynamicGEM/dynamicTriad: It contains the dynamicTriad source code.
4 Conclusion
DynamicGEM is a Python library with an extensive documentation that includes implementations for a variety of stateoftheart dynamic graph embedding methods. This library can help researchers and developers to perform a wide range of experiments related to dynamic graphs that evolve over time, their different characteristics, and prediction of these characteristics that can help improvements in this field of study. The library allows easy integration of novel approaches in the domain and functions to evaluate their efficacy. The aim of the library is to evaluate such methods with greater ease.
The authors are grateful to the Defense Advanced Research Projects Agency (DARPA), contract W911NF17C0094, for their support. We would also like to acknowledge support from the National Science Foundation (NSF grant IIS9988642) and the Multidisciplinary Research Program of the Department of Defense (MURI N000140010637).