int main(int argc, char* argv[]) { setbuf(stdout, NULL); // disables the buffer so that print statements are not buffered and display immediately (?) Env = TEnv(argc, argv, TNotify::StdNotify); Env.PrepArgs(TStr::Fmt("Node centrality. build: %s, %s. Time: %s", __TIME__, __DATE__, TExeTm::GetCurTm())); TExeTm ExeTm; Try const TStr InFNm = Env.GetIfArgPrefixStr("-i:", "", "input network"); const TStr OutFNm = Env.GetIfArgPrefixStr("-o:", "", "output prefix (filename extensions added)"); const TStr BseFNm = OutFNm.RightOfLast('/'); const double eps = Env.GetIfArgPrefixFlt("-eps:", 1.0e-5, "minimum quality improvement threshold"); const double min_moves = Env.GetIfArgPrefixFlt("-moves:", 1.0e-2, "minimum number of moves required (proportional)"); const double max_iters = Env.GetIfArgPrefixFlt("-iters:", 1.0e+4, "maximum number of iterations"); // Load graph and create directed and undirected graphs (pointer to the same memory) printf("\nLoading %s...", InFNm.CStr()); PFltWNGraph WGraph = TSnap::LoadFltWEdgeList<TWNGraph>(InFNm); printf(" DONE\n"); printf(" nodes: %d\n", WGraph->GetNodes()); printf(" edges: %d\n", WGraph->GetEdges()); printf(" time elapsed: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); // Declare variables // COMMUNITY // TODO // Louvain method (modularity objective) Catch printf("\nrun time: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); return 0; }
TEST(TStr, LeftOfRightOf) { TStr Str = "abcdef"; TStr Empty = ""; EXPECT_EQ(Str.LeftOf('d'), "abc"); EXPECT_EQ(Str.RightOf('c'), "def"); EXPECT_EQ(Str.LeftOf('a'), ""); EXPECT_EQ(Empty.RightOf('c'), ""); // edge cases EXPECT_EQ(Str.RightOf('f'), ""); EXPECT_EQ(Empty.LeftOf('d'), ""); TStr Str2 = "abcdefabcdef"; EXPECT_EQ(Str2.LeftOfLast('d'), "abcdefabc"); EXPECT_EQ(Str2.RightOfLast('c'), "def"); EXPECT_EQ(Empty.LeftOfLast('d'), ""); EXPECT_EQ(Empty.RightOfLast('c'), ""); // edge cases Str2 = "xabcdefabcdef"; EXPECT_EQ(Str2.LeftOfLast('x'), ""); EXPECT_EQ(Str2.RightOfLast('f'), ""); }
int main(int argc, char* argv[]) { setbuf(stdout, NULL); // disables the buffer so that print statements are not buffered and display immediately (?) Env = TEnv(argc, argv, TNotify::StdNotify); Env.PrepArgs(TStr::Fmt("Graph connectivity. build: %s, %s. Time: %s", __TIME__, __DATE__, TExeTm::GetCurTm())); TExeTm ExeTm; Try const TStr InFNm = Env.GetIfArgPrefixStr("-i:", "", "input network"); const TStr SubsetNIdVFNm = Env.GetIfArgPrefixStr("-j:", "", "subset of nodes"); const TStr OutFNm = Env.GetIfArgPrefixStr("-o:", "", "output prefix (filename extensions added)"); const TStr BseFNm = OutFNm.RightOfLast('/'); const bool c = Env.GetIfArgPrefixBool("-c:", false, "collate centralities into matrix (T / F)"); // Load graph and create directed and undirected graphs (pointer to the same memory) printf("\nLoading %s...", InFNm.CStr()); PNGraph Graph = TSnap::LoadEdgeList<PNGraph>(InFNm); printf(" DONE\n"); printf(" nodes: %d\n", Graph->GetNodes()); printf(" edges: %d\n", Graph->GetEdges()); printf(" time elapsed: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); // Load subset nodes TIntV SubsetNIdV = TSnap::LoadTxtIntV(SubsetNIdVFNm); // Declare variables TIntIntH InNodesH, InDiameterH, OutNodesH, OutDiameterH, NodesH, DiameterH; TNGraph::TNodeI NI; // SUBSET DIAMETER AND NODE COUNTS printf("Computing subset diameter and node counts\n"); TSnap::TFixedMemorySubsetDiameter<PNGraph> FixedMemorySubsetDiameter(Graph); printf(" ..."); FixedMemorySubsetDiameter.ComputeInSubsetDiameter(SubsetNIdV, InNodesH, InDiameterH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf(" ..."); FixedMemorySubsetDiameter.ComputeOutSubsetDiameter(SubsetNIdV, OutNodesH, OutDiameterH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf(" ..."); FixedMemorySubsetDiameter.ComputeSubsetDiameter(SubsetNIdV, NodesH, DiameterH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); // OUTPUTTING (mostly verbose printing statements, don't get scared) if (c) { printf("\nSaving %s.diameters.combined...", BseFNm.CStr()); const TStr CombinedFNm = TStr::Fmt("%s.diameters.combined", OutFNm.CStr()); FILE *F = fopen(CombinedFNm.CStr(), "wt"); fprintf(F,"# Subset diameters and node counts (in / out / undirected)\n"); fprintf(F,"# Nodes: %d\tEdges: %d\t Subset size: %d\n", Graph->GetNodes(), Graph->GetEdges(), SubsetNIdV.Len()); fprintf(F,"# SubsetNodeId\tInDiameter\tInNodes\tOutDiameter\tOutNodes\tDiameter\tNodes\n"); for (NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) { const int NId = NI.GetId(); fprintf(F, "%d", NId); fprintf(F, "\t%d\t%d", int(InDiameterH.GetDat(NId)), int(InNodesH.GetDat(NId))); fprintf(F, "\t%d\t%d", int(OutDiameterH.GetDat(NId)), int(OutNodesH.GetDat(NId))); fprintf(F, "\t%d\t%d", int(DiameterH.GetDat(NId)), int(NodesH.GetDat(NId))); fprintf(F, "\n"); } printf(" DONE\n"); } else { printf("\nSaving %s.nodes.IN...", BseFNm.CStr()); TSnap::SaveTxt(InNodesH, TStr::Fmt("%s.nodes.IN", OutFNm.CStr()), "Number of nodes in neighborhood (in) ", "Node", "Number"); printf(" DONE"); printf("\nSaving %s.nodes.OUT...", BseFNm.CStr()); TSnap::SaveTxt(OutNodesH, TStr::Fmt("%s.nodes.OUT", OutFNm.CStr()), "Number of nodes in neighborhood (out) ", "Node", "Number"); printf(" DONE"); printf("\nSaving %s.nodes...", BseFNm.CStr()); TSnap::SaveTxt(NodesH, TStr::Fmt("%s.nodes", OutFNm.CStr()), "Number of nodes in neighborhood (undirected) ", "Node", "Number"); printf(" DONE\n"); printf("\nSaving %s.diameter.IN...", BseFNm.CStr()); TSnap::SaveTxt(InDiameterH, TStr::Fmt("%s.diameter.IN", OutFNm.CStr()), "Diameter of neighborhood (in) ", "Node", "Diameter"); printf(" DONE"); printf("\nSaving %s.diameter.OUT...", BseFNm.CStr()); TSnap::SaveTxt(OutDiameterH, TStr::Fmt("%s.diameter.OUT", OutFNm.CStr()), "Diameter of neighborhood (out) ", "Node", "Diameter"); printf(" DONE"); printf("\nSaving %s.diameter...", BseFNm.CStr()); TSnap::SaveTxt(DiameterH, TStr::Fmt("%s.diameter", OutFNm.CStr()), "Diameter of neighborhood (undirected) ", "Node", "Diameter"); printf(" DONE\n"); } Catch printf("\nTotal run time: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); return 0; }
int main(int argc, char* argv[]) { setbuf(stdout, NULL); // disables the buffer so that print statements are not buffered and display immediately (?) Env = TEnv(argc, argv, TNotify::StdNotify); Env.PrepArgs(TStr::Fmt("Node centrality. build: %s, %s. Time: %s", __TIME__, __DATE__, TExeTm::GetCurTm())); TExeTm ExeTm; Try const TStr InFNm = Env.GetIfArgPrefixStr("-i:", "", "input network"); const TStr OutFNm = Env.GetIfArgPrefixStr("-o:", "", "output prefix (filename extensions added)"); const TStr BseFNm = OutFNm.RightOfLast('/'); const int k = Env.GetIfArgPrefixInt("-k:", 1, "depth of weighted degree distributions (1 / 2 / ...)"); const bool c = Env.GetIfArgPrefixBool("-c:", false, "collate centralities into matrix (T / F)"); // Load graph and create directed and undirected graphs (pointer to the same memory) printf("\nLoading %s...", InFNm.CStr()); PFltWNGraph WGraph = TSnap::LoadFltWEdgeList<TWNGraph>(InFNm); printf(" DONE\n"); printf(" nodes: %d\n", WGraph->GetNodes()); printf(" edges: %d\n", WGraph->GetEdges()); printf(" time elapsed: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); // Declare variables TIntFltVH FirstWDegVH; TIntFltVH kWInDegVH, kWOutDegVH, kWDegVH; TIntFltVH WDegCentrVH, WEigCentrVH; TFltV WEigDiffV; TIntFltH WPgRH; double WPgRDiff; TFltWNGraph::TNodeI NI; TFltV::TIter VI; // CENTRALITY (computations) // Weighted first degree distributions printf("\nComputing weighted degree distributions..."); TSnap::GetWDegVH(WGraph, FirstWDegVH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); // 1:k degree distributions printf("Computing egonet degrees for k = 1 to %d (in / out / undirected)\n", k); TSnap::TFixedMemorykWDeg<TFlt, TWNGraph> FixedMemorykWDeg(WGraph, k); printf(" ..."); FixedMemorykWDeg.GetkWInDegSeqH(kWInDegVH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf(" ..."); FixedMemorykWDeg.GetkWOutDegSeqH(kWOutDegVH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf(" ..."); FixedMemorykWDeg.GetkWDegSeqH(kWDegVH); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); // Centrality measures printf("Computing weighted degree centrality..."); TSnap::GetWDegreeCentrVH(WGraph, WDegCentrVH, 0.5); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf("Computing weighted eigenvector centrality..."); WEigDiffV = TSnap::GetWEigenVectorCentrVH<TFlt>(WGraph, WEigCentrVH, 1e-4, 1000); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf(" convergence differences (in / out / undirected)\n"); printf(" %f\n", double(WEigDiffV[0])); printf(" %f\n", double(WEigDiffV[1])); printf(" %f\n", double(WEigDiffV[2])); printf("Computing weighted PageRank centrality..."); WPgRDiff = TSnap::GetWPageRank<TFlt>(WGraph, WPgRH, 0.85, 1e-4, 1000); printf(" DONE (time elapsed: %s (%s))\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); printf(" convergence difference: %f\n", double(WPgRDiff)); // OUTPUTTING (mostly verbose printing statements, don't get scared) if (c) { printf("\nSaving %s.wcentr...", BseFNm.CStr()); const TStr AggFNm = TStr::Fmt("%s.wcentr", OutFNm.CStr()); FILE *F = fopen(AggFNm.CStr(), "wt"); fprintf(F,"# Node centrality distributions on the directed / undirected graph (as applicable)\n"); fprintf(F,"# Nodes: %d\tEdges: %d\n", WGraph->GetNodes(), WGraph->GetEdges()); fprintf(F,"# NodeId\tWInDegCentr\tWOutDegCentr\tWDegCentr\tWInEigCentr\tWOutEigCentr\tWEigCentr\tWPgRCentr\n"); for (NI = WGraph->BegNI(); NI < WGraph->EndNI(); NI++) { const int NId = NI.GetId(); fprintf(F, "%d", NId); const TFltV WDegCentrV = WDegCentrVH.GetDat(NId); for (VI = WDegCentrV.BegI(); VI < WDegCentrV.EndI(); VI++) { fprintf(F, "\t%f", VI->Val); } const TFltV WEigCentrV = WEigCentrVH.GetDat(NId); for (VI = WEigCentrV.BegI(); VI < WEigCentrV.EndI(); VI++) { fprintf(F, "\t%f", VI->Val); } const double WPgRCentr = WPgRH.GetDat(NId); fprintf(F, "\t%f", WPgRCentr); fprintf(F, "\n"); } printf(" DONE\n"); } else { printf("\nSaving %s.wdeg.centr...", BseFNm.CStr()); TSnap::SaveTxt(WDegCentrVH, TStr::Fmt("%s.wdeg.centr", OutFNm.CStr()), "Weighted degree centrality (in / out / undirected)", "NodeId", "WInDegCentr\tWOutDegCentr\tWDegCentr"); printf(" DONE\n"); printf("Saving %s.weig...", BseFNm.CStr()); TSnap::SaveTxt(WEigCentrVH, TStr::Fmt("%s.weig", OutFNm.CStr()), "Weighted eigenvector centrality (in / out / undirected)", "NodeId", "WInEigCentr\tWOutEigCentr\tWEigCentr"); printf(" DONE\n"); printf("Saving %s.wpgr...", BseFNm.CStr()); TSnap::SaveTxt(WPgRH, TStr::Fmt("%s.wpgr", OutFNm.CStr()), "Weighted PageRank centrality (wpgr)", "NodeId", "WPageRank"); printf(" DONE\n"); } printf("Saving %s.wdeg...", BseFNm.CStr()); TSnap::SaveTxt(FirstWDegVH, TStr::Fmt("%s.wdeg", OutFNm.CStr()), "Weighted degree distributions (in / out / undirected)", "NodeId", "WInDeg\tWOutDeg\tWDeg"); printf(" DONE\n"); printf("Saving %s.kwdeg.IN...", BseFNm.CStr()); TSnap::SaveTxt(kWInDegVH, TStr::Fmt("%s.kwdeg.IN", OutFNm.CStr()), TStr::Fmt("1 to %d weighted in degree distributions (kdeg.IN)", k), "NodeId", "kWInDegH"); printf(" DONE\n"); printf("Saving %s.kwdeg.OUT...", BseFNm.CStr()); TSnap::SaveTxt(kWOutDegVH, TStr::Fmt("%s.kwdeg.OUT", OutFNm.CStr()), TStr::Fmt("1 to %d weighted out degree distributions (kdeg.OUT)", k), "NodeId", "kWOutDegH"); printf(" DONE\n"); printf("Saving %s.kwdeg...", BseFNm.CStr()); TSnap::SaveTxt(kWDegVH, TStr::Fmt("%s.kwdeg", OutFNm.CStr()), TStr::Fmt("1 to %d weighted degree distributions (kdeg)", k), "NodeId", "kWDegH"); printf(" DONE\n"); Catch printf("\nrun time: %s (%s)\n", ExeTm.GetTmStr(), TSecTm::GetCurTm().GetTmStr().CStr()); return 0; }