23     if      (motif_lc == 
"m1")          { 
return M1; }
 
   24     else if (motif_lc == 
"m2")          { 
return M2; }
 
   25     else if (motif_lc == 
"m3")          { 
return M3; }
 
   26     else if (motif_lc == 
"m4")          { 
return M4; }
 
   27     else if (motif_lc == 
"m5")          { 
return M5; }
 
   28     else if (motif_lc == 
"m6")          { 
return M6; }
 
   29     else if (motif_lc == 
"m7")          { 
return M7; }
 
   30     else if (motif_lc == 
"triad")          { 
return triad; }
 
   31     else if (motif_lc == 
"cycle")          { 
return cycle; }
 
   32     else if (motif_lc == 
"ffloop")          { 
return FFLoop; }
 
   33     else if (motif_lc == 
"unide")          { 
return UniDE; }
 
   34     else if (motif_lc == 
"bide")          { 
return BiDE; }
 
   35     else if (motif_lc == 
"de")          { 
return DE; }
 
   36     else if (motif_lc == 
"edge")          { 
return DE_any; }
 
   41     if      (motif_lc == 
"uedge")     { 
return UEdge; }
 
   42     else if (motif_lc == 
"clique3")     { 
return clique3; }
 
   43     else if (motif_lc == 
"clique4")     { 
return clique4; }
 
   44     else if (motif_lc == 
"clique5")     { 
return clique5; }
 
   45     else if (motif_lc == 
"clique6")     { 
return clique6; }
 
   46     else if (motif_lc == 
"clique7")     { 
return clique7; }
 
   47     else if (motif_lc == 
"clique8")     { 
return clique8; }
 
   48     else if (motif_lc == 
"clique9")     { 
return clique9; }
 
   58     case M1:      printf(
"M1\n"); 
break;
 
   59     case M2:      printf(
"M2\n"); 
break;
 
   60     case M3:      printf(
"M3\n"); 
break;
 
   61     case M4:      printf(
"M4\n"); 
break;
 
   62     case M5:      printf(
"M5\n"); 
break;
 
   63     case M6:      printf(
"M6\n"); 
break;
 
   64     case M7:      printf(
"M7\n"); 
break;
 
   65     case triad:   printf(
"triad\n"); 
break;
 
   66     case cycle:   printf(
"cycle\n"); 
break;
 
   67     case FFLoop:  printf(
"FFLoop\n"); 
break;
 
   68     case UniDE:   printf(
"UniDE\n"); 
break;
 
   69     case BiDE:    printf(
"BiDE\n"); 
break;
 
   70     case DE:      printf(
"DE\n"); 
break;
 
   71     case DE_any:  printf(
"DE_any\n"); 
break;
 
   73     case UEdge:       printf(
"UEdge\n"); 
break;
 
   74     case clique3:     printf(
"clique3\n"); 
break;
 
   75     case clique4:     printf(
"clique4\n"); 
break;
 
   76     case clique5:     printf(
"clique5\n"); 
break;
 
   77     case clique6:     printf(
"clique6\n"); 
break;
 
   78     case clique7:     printf(
"clique7\n"); 
break;
 
   79     case clique8:     printf(
"clique8\n"); 
break;
 
   80     case clique9:     printf(
"clique9\n"); 
break;
 
  148   if (level >= KSize - 1) {
 
  153       int SrcNId = EI.GetSrcNId();
 
  154       int DstNId = EI.GetDstNId();
 
  155       Counts[SrcNId](DstNId)[level-1] ++;
 
  156       Counts[DstNId](SrcNId)[level-1] ++;
 
  160     int NodeId = NI.GetId();
 
  161     int degHere = NI.GetOutDeg();
 
  162     for (
int i = 0; i < level; i ++) {
 
  163       Counts[PrevNodes[i]](NodeId)[level-1] += degHere;
 
  164       Counts[NodeId](PrevNodes[i])[level-1] += degHere;
 
  167     if (level == KSize - 2) {
 
  171     PrevNodes[level] = NodeId;
 
  173     for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  174       int nbrID = NI.GetOutNId(e);
 
  176           neighborsID.
Add(nbrID);
 
  180     int numEdges = subGraph->
GetEdges();
 
  181     for (
int i = 0; i <= level; i ++) {
 
  182       for (
int j = i + 1; j <= level; j ++) {
 
  183         Counts[PrevNodes[i]](PrevNodes[j])[level] += numEdges;
 
  184         Counts[PrevNodes[j]](PrevNodes[i])[level] += numEdges;
 
  187     countClique(subGraph, KSize, PrevNodes, level + 1);
 
  202       int NodeId = NI.GetId();
 
  203       for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  204         Weights[NodeId](NI.GetOutNId(e)) = 1;
 
  206       Weights[NodeId](NodeId) = NI.GetOutDeg();
 
  214         int NodeId = NI.GetId();
 
  215         for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  216           Counts[NodeId](NI.GetOutNId(e)) = 
TIntV(KSize - 2);
 
  219       TIntV PrevNodes(KSize - 2);
 
  226       int NodeId = NI.GetId();
 
  228       for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  229         int NbrId = NI.GetOutNId(e);
 
  230         int MtfCntHere = 
Counts[NodeId](NbrId)[KSize-3];
 
  232           Weights[NodeId](NbrId) = MtfCntHere;
 
  235           Graph_trans->DelEdge(NodeId, NbrId);
 
  238       Weights[NodeId](NodeId) = deg_w;
 
  248   Graph_org = TSnap::ConvertGraph<PUNGraph>(graph);
 
  260   if (G->IsEdge(nodeID, nbrID)) {
 
  261     if (G->IsEdge(nbrID, nodeID)) {
 
  275   if (G->IsEdge(dstNId, srcNId)) {
 
  399   int numBasicDirMtf = 9;
 
  402     int NodeId = NI.GetId();
 
  403     for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  404       Counts[NodeId](NI.GetOutNId(e)) = 
TIntV(numBasicDirMtf);
 
  408     long nodeID = NI.GetId();
 
  410     for (
long e = 0; e < NI.GetOutDeg(); e++) {
 
  411       long nbrID = NI.GetOutNId(e);
 
  413         neighborsID.
Add(nbrID);
 
  414         Counts[nodeID](nbrID)[0] ++;
 
  415         Counts[nbrID](nodeID)[0] ++;
 
  418     for (
long e = 0; e < NI.GetInDeg(); e++) {
 
  419       long nbrID = NI.GetInNId(e);
 
  421         if (graph->
IsEdge(nodeID, nbrID)) {
 
  422           Counts[nodeID](nbrID)[0] --;
 
  423           Counts[nbrID](nodeID)[0] --;
 
  424           Counts[nodeID](nbrID)[1] ++;
 
  425           Counts[nbrID](nodeID)[1] ++;
 
  427           neighborsID.
Add(nbrID);
 
  428           Counts[nodeID](nbrID)[0] ++;
 
  429           Counts[nbrID](nodeID)[0] ++;
 
  435       long srcNId = EI.GetSrcNId();
 
  436       long dstNId = EI.GetDstNId();
 
  438       if (srcNId > dstNId || !subGraph->
IsEdge(dstNId, srcNId)) {
 
  441         Counts[nodeID](srcNId)[MotifNumber] ++;
 
  442         Counts[srcNId](nodeID)[MotifNumber] ++;
 
  443         Counts[nodeID](dstNId)[MotifNumber] ++;
 
  444         Counts[dstNId](nodeID)[MotifNumber] ++;
 
  445         Counts[srcNId](dstNId)[MotifNumber] ++;
 
  446         Counts[dstNId](srcNId)[MotifNumber] ++;
 
  460     case UniDE :      {MtfInclude.
Add(0); 
break;}
 
  461     case BiDE :       MtfInclude.
Add(1); 
break;
 
  462     case DE :         MtfInclude.
Add(0); MtfInclude.
Add(1); MtfInclude.
Add(1); 
break;
 
  463     case DE_any :     MtfInclude.
Add(0); MtfInclude.
Add(1); 
break;
 
  465     case M1 :         MtfInclude.
Add(2); 
break;
 
  466     case M2 :         MtfInclude.
Add(3); 
break;
 
  467     case M3 :         MtfInclude.
Add(4); 
break;
 
  468     case M4 :         MtfInclude.
Add(5); 
break;
 
  469     case M5 :         MtfInclude.
Add(6); 
break;
 
  470     case M6 :         MtfInclude.
Add(7); 
break;
 
  471     case M7 :         MtfInclude.
Add(8); 
break;
 
  507     int NodeId = NI.GetId();
 
  509     for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  510       int NbrId = NI.GetOutNId(e);
 
  513       for (
int i = 0; i < MtfInclude.
Len(); i ++) {
 
  514         WeightHere += CountHere[MtfInclude[i]];
 
  517         Weights[NodeId](NbrId) = WeightHere;
 
  523     Weights[NodeId](NodeId) = deg_w;
 
  533     int NodeId = NI.GetId();
 
  534     for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  535       int NbrId = NI.GetOutNId(e);
 
  537       printf(
"(%d, %d): ", NodeId, NbrId);
 
  538       for (
int i = 0; i < CountThisEdge.
Len(); i ++) {
 
  539         int output = CountThisEdge[i];
 
  540         printf(
"%d ", output);
 
  549     int NodeId = NI.GetId();
 
  550     for (
int e = 0; e < NI.GetOutDeg(); e++) {
 
  551       int NbrId = NI.GetOutNId(e);
 
  552       printf(
"(%d, %d): ", NodeId, NbrId);
 
  553       if (
Weights[NodeId].IsKey(NbrId)) {
 
  554         float weight = 
Weights[NodeId](NbrId);
 
  555         printf(
"%.2f ", weight);
 
  557         printf(
"Not a key in Weights");
 
  561     float d_w = 
Weights[NodeId](NodeId);
 
  562     printf(
"\td_w(%d) = %.2f.\n", NodeId, d_w);
 
  564   printf(
"Total volume = %.2f. \n", 
TotalVol);
 
  594   if (Weights[SeedNodeId].GetDat(SeedNodeId) * eps >= 1) {
 
  598   residual(SeedNodeId) = 1;
 
  600   NodesWExcesRes.
Push(SeedNodeId);
 
  602   while (!NodesWExcesRes.
Empty()) {
 
  604     int NodeId = NodesWExcesRes.
Top();
 
  605     NodesWExcesRes.
Pop();
 
  607     float deg_w = Weights[NodeId].
GetDat(NodeId);
 
  609       appr_vec(NodeId) += residual(NodeId);
 
  611       residual(NodeId) = 0;
 
  614     float pushVal = residual(NodeId) - deg_w * eps / 2;
 
  615     appr_vec(NodeId) += pushVal * (1-alpha);
 
  617     residual(NodeId) = deg_w * eps / 2;
 
  619     pushVal *= alpha / deg_w;
 
  621     for (
int i = 0; i < NI.
GetOutDeg(); i ++) {
 
  623       float nbrValOld = residual(NbrId);
 
  624       float nbrValNew = nbrValOld + pushVal * Weights[NodeId].
GetDat(NbrId);
 
  625       residual(NbrId) = nbrValNew;
 
  626       if (nbrValOld <= eps * Weights[NbrId].GetDat(NbrId)  &&  nbrValNew > eps * Weights[NbrId].GetDat(NbrId)) {
 
  627         NodesWExcesRes.
Push(NbrId);
 
  641     int NodeId = it->Key;
 
  642     Quotient(NodeId) = it->Dat / Weights[NodeId].
GetDat(NodeId);
 
  646   double vol = 0, cut = 0;
 
  652     int NodeId = it->Key;
 
  658     vol += VolSmall * WeightsHere.
GetDat(NodeId);
 
  659     if (VolSmall == 1 && vol >= TotalVol / 2) {
 
  660       vol = TotalVol - vol;
 
  663     cut += WeightsHere.
GetDat(NodeId);
 
  664     for (
long j = 0; j < NI.
GetOutDeg(); j ++) {
 
  666       if (IsIn.
IsKey(NbrId)) {
 
  667         cut -= 2 * WeightsHere.
GetDat(NbrId);
 
  700   double minCondVal = 2;
 
  732     TExcept::Throw(
"No APPR vector has been computed! Please first do MAPPR::computeAPPR(...)!");
 
  740   } 
else if (option == -1) {
 
  745   } 
else if (option > 0) {
 
  747     for (
int i = 0; i < option; i++) {
 
  759     int NodeId = it->Key;
 
  760     float VecVal = it->Dat;
 
  761     printf(
"%d : %.7f\n", NodeId, VecVal);
 
  763   printf(
"Number of pushes: %d\n", 
NumPushs);
 
  764   printf(
"L1-norm of APPR vector: %.7f\n", 
appr_norm);
 
  769     TExcept::Throw(
"No APPR vector has been computed! Please first do MAPPR::computeAPPR(...)!");
 
  771   printf(
"Size\tNodeId\tConductance\n");
 
  775     printf(
"%d\t%d\t%.7f\n", i+1, NodeId, Cond);
 
  777       printf(
"\tGlobal minimun!!!\n");
 
  780       printf(
"\tFirst local minimun!!!\n");
 
Edge iterator. Only forward iteration (operator++) is supported. 
 
THash< TInt, TFlt > appr_vec
 
void computeAPPR(const ProcessedGraph &graph_p, const int SeedNodeId, float alpha, float eps)
 
void countClique(PUNGraph &G, int KSize, TIntV &PrevNodes, int level)
 
void assignWeights_undir(MotifType mt)
 
TNodeI BegNI() const 
Returns an iterator referring to the first node in the graph. 
 
void computeProfile(const ProcessedGraph &graph_p)
 
TEdgeI EndEI() const 
Returns an iterator referring to the past-the-end edge in the graph. 
 
const WeightVH & getWeights() const 
 
TVec< THash< TInt, TIntV > > CountVH
 
int checkTriadMotif(PNGraph &G, long nodeID, long srcNId, long dstNId)
 
TEdgeI EndEI() const 
Returns an iterator referring to the past-the-end edge in the graph. 
 
int GetMxNId() const 
Returns an ID that is larger than any node ID in the graph. 
 
MotifType ParseMotifType(const TStr &motif, const bool &IsDirected)
 
int GetEdges() const 
Returns the number of edges in the graph. 
 
TSizeTy Len() const 
Returns the number of elements in the vector. 
 
Node iterator. Only forward iteration (operator++) is supported. 
 
TEdgeI BegEI() const 
Returns an iterator referring to the first edge in the graph. 
 
bool higherDeg(PUNGraph &G, TUNGraph::TNodeI &NI1, int nodeID2)
 
void assignWeights_dir(MotifType mt)
 
void Dump(FILE *OutF=stdout) const 
Print the graph in a human readable form to an output stream OutF. 
 
const TDat & GetDat(const TKey &Key) const 
 
void countDirTriadMotif(PNGraph graph)
 
bool IsKey(const TKey &Key) const 
 
void Pop()
Removes the first element from the queue. 
 
bool Empty() const 
Tests whether the queue is empty (contains no elements). 
 
int GetOutDeg() const 
Returns out-degree of the current node (returns same as value GetDeg() since the graph is undirected)...
 
void Clr(const bool &DoDel=true, const TSizeTy &NoDelLim=-1)
Clears the contents of the vector. 
 
Edge iterator. Only forward iteration (operator++) is supported. 
 
static void Throw(const TStr &MsgStr)
 
bool IsEdge(const int &SrcNId, const int &DstNId, const bool &IsDir=true) const 
Tests whether an edge from node IDs SrcNId to DstNId exists in the graph. 
 
const TVal & GetDat(const TVal &Val) const 
Returns reference to the first occurrence of element Val. 
 
PUNGraph GetSubGraph(const PUNGraph &Graph, const TIntV &NIdV, const bool &RenumberNodes)
Returns an induced subgraph of an undirected graph Graph with NIdV nodes with an optional node renumb...
 
TNodeI GetNI(const int &NId) const 
Returns an iterator referring to the node of ID NId in the graph. 
 
TEdgeI BegEI() const 
Returns an iterator referring to the first edge in the graph. 
 
int AddKey(const TKey &Key)
 
int checkEdge(PNGraph &G, long nodeID, long nbrID)
 
void DelEdge(const int &SrcNId, const int &DstNId)
Deletes an edge between node IDs SrcNId and DstNId from the graph. 
 
TVec< THash< TInt, TFlt > > WeightVH
 
void sweepAPPR(int option=-1)
 
TNodeI EndNI() const 
Returns an iterator referring to the past-the-end node in the graph. 
 
int GetId() const 
Returns ID of the current node. 
 
int GetOutNId(const int &NodeN) const 
Returns ID of NodeN-th out-node (the node the current node points to). 
 
int GetOutDeg() const 
Returns out-degree of the current node. 
 
PUNGraph getTransformedGraph() const 
 
TIter BegI() const 
Returns an iterator pointing to the first element in the vector. 
 
void Push(const TVal &Val)
Adds an element at the end of the queue. 
 
int getCliqueSize(const MotifType &type)
 
Node iterator. Only forward iteration (operator++) is supported. 
 
TNodeI EndNI() const 
Returns an iterator referring to the past-the-end node in the graph. 
 
void Clr(const bool &DoDel=true, const int &NoDelLim=-1, const bool &ResetDat=true)
 
const TVal & Top() const 
Returns the value of the first element in the queue, but does not remove the element. 
 
int GetId() const 
Returns ID of the current node. 
 
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element. 
 
TNodeI BegNI() const 
Returns an iterator referring to the first node in the graph. 
 
bool isLocalMin(int idx, double thresh=1.2)
 
float getTotalVolume() const 
 
void printMotifType(const MotifType &type)
 
void SortByDat(const bool &Asc=true)