14 else {
return ! Res; }
18 return operator()(*GS1, *GS2);
26 TakeStat(Graph, GraphTm, StatFSet, GraphName);
30 TakeStat(Graph, GraphTm, StatFSet, GraphName);
34 TakeStat(Graph, GraphTm, StatFSet, GraphName);
37 ValStatH(GStat.ValStatH), DistrStatH(GStat.DistrStatH) {
62 if (
Time<GStat.
Time) {
return true; }
63 if (
Time>GStat.
Time) {
return false; }
76 if (StatVal ==
gsvIndex) {
return true; }
82 if (StatVal ==
gsvIndex) {
return -1; }
134 printf(
"**[%s]\n", FullTm.GetTmStr());
166 printf(
"**[%s]\n", FullTm.GetTmStr());
175 if (_TakeSngVals == -1) { _TakeSngVals =
TakeSngVals; }
178 printf(
"sing-vals...");
182 SngValV1.Sort(
false);
184 SngValV.
Gen(SngValV1.Len(), 0);
185 for (
int i = 0; i < SngValV1.Len(); i++) {
191 printf(
"sing-vec...");
196 SngVec.
Gen(LeftV.
Len(), 0);
198 if (LeftV[i] > 0) { SngVec.
Add(
TFltPr(i+1, LeftV[i])); }
223 if (! FSet.
In(Distr)) {
continue; }
224 Plot(Distr, FNmPref, Desc, PowerFit);
231 Plot(Distr, FNmPref, Desc, PowerFit);
238 if (!
HasVal(Val)) {
continue; }
244 AvgGStat(GStatVec->GetGStatV(), ClipAt1);
248 if (GStatV.
Empty())
return;
249 Time = GStatV[0]->Time;
252 for (
int statVal = 0; statVal >
gsvMx; statVal++) {
255 for (
int i = 0; i < GStatV.
Len(); i++) {
256 if (GStatV[i]->
HasVal(GStatVal)) {
270 for (
int i = 0; i < GStatV.
Len(); i++) {
271 if (GStatV[i]->
HasDistr(GStatDistr)) {
272 const TFltPrV& D = GStatV[i]->GetDistr(GStatDistr);
273 for (
int d = 0; d < D.
Len(); d++) {
274 ValToSumH.
AddDat(D[d].Val1) += D[d].Val2; }
278 IAssert(DistrCnt==0 || DistrCnt==GStatV.
Len());
281 for (
int i = 0; i < AvgStatV.Len(); i++) {
282 AvgStatV[i].Val2 /= double(DistrCnt);
283 if (ClipAt1 && AvgStatV[i].Val2 < 1) { AvgStatV[i].Val2 = 1; }
294 case gsdWcc :
return "WccDist";
295 case gsdScc :
return "SccDist";
309 if (ValTyStrH.
Empty()) {
348 return ValTyStrH.
GetDat(
int(Val));
416 TmUnit(_TmUnit), StatFSet(TakeGrowthStat), GStatV() {
420 TmUnit(GStat.TmUnit), StatFSet(GStat.StatFSet), GStatV(GStat.GStatV) {
431 return new TGStatVec(_TmUnit, TakeGrowthStat);
441 if (
this != &GStat) {
461 printf(
" ** TGStatVec::Add: graph too small (%d nodes).SKIP\n", Graph->
GetNodes());
469 printf(
" ** TGStatVec::Add: graph too small (%d nodes).SKIP\n", Graph->
GetNodes());
477 printf(
" ** TGStatVec::Add: graph too small (%d nodes).SKIP\n", Graph->GetNodes());
489 for (
int i = 0; i <
Len(); i++) {
490 if (
At(i)->Time >= Tm) { NewTickV.
Add(
At(i)); }
497 for (
int i = 0; i <
Len(); i++) {
498 if (
At(i)->Time <= Tm) { NewTickV.
Add(
At(i)); }
505 for (
int i = 0; i <
Len(); i++) {
506 if (
At(i)->GetNodes() >= MinNodes) { NewTickV.
Add(
At(i)); }
514 for (
int t = 0; t <
Len(); t++) {
517 else { x =
At(t)->GetVal(XVal); }
525 Stat->AvgGStat(
GStatV, ClipAt1);
535 if (Desc.
Empty()) { Desc = OutFNm; }
540 Last()->GetNodes(),
Last()->GetEdges()));
552 if (SkipStat.
In(Stat)) {
continue; }
553 if (
Last()->HasVal(Stat) &&
Last()->HasVal(XVal) && Stat!=XVal) {
554 Plot(XVal, Stat, OutFNm, Desc, Scale, PowerFit);
560 const bool& PowerFit,
const TGpSeriesTy& PlotWith,
const TStr& Style)
const {
565 At(0)->GetNodes(),
At(0)->GetEdges(),
Last()->GetNodes(),
Last()->GetEdges()));
569 for (
int at = 0; at <
Len(); at++) {
570 TStr Legend =
At(at)->GetNm();
571 if (Legend.
Empty()) { Legend =
At(at)->GetTmStr(); }
573 plotId = GnuPlot.
AddPlot(
At(at)->GetDistr(Distr), PlotWith, Legend, Style); }
577 plotId = GnuPlot.
AddPlot(ExpBinV, PlotWith, Legend, Style);
585 FILE *F = fopen(
TStr::Fmt(
"growth.%s.tab", FNmPref.
CStr()).CStr(),
"wt");
586 fprintf(F,
"# %s\n", Desc.
CStr());
589 for (
int i = 0; i <
Len(); i++) {
595 for (
int sv = 0; sv < StatValV.
Len(); sv++) {
597 fprintf(F,
"Time\n");
598 for (
int i = 0; i <
Len(); i++) {
600 for (
int sv = 0; sv < StatValV.
Len(); sv++) {
static const T & Mn(const T &LVal, const T &RVal)
bool HasVal(const TGStatVal &Stat) const
PGStat GetAvgGStat(const bool &ClipAt1=false)
static const TFltPrV EmptyV
#define IAssertR(Cond, Reason)
static TStr GetValStr(const TGStatVal &Val)
void ImposeDistr(const TGStatDistr &Distr, const TStr &FNmPref, TStr Desc=TStr(), const bool &ExpBin=false, const bool &PowerFit=false, const TGpSeriesTy &PlotWith=gpwLinesPoints, const TStr &Style="") const
static void MakeExpBins(const TFltPrV &XYValV, TFltPrV &ExpXYValV, const double &BinFactor=2, const double &MinYVal=1)
void SavePng(const int &SizeX=1000, const int &SizeY=800, const TStr &Comment=TStr())
PGraph GetMxWcc(const PGraph &Graph)
Returns a graph representing the largest weakly connected component on an input Graph.
void Save(TSOut &SOut) const
void TakeSpectral(const PNGraph &Graph, const int _TakeSngVals=-1)
void Save(TSOut &SOut) const
bool operator==(const TGStat &GStat) const
int GetEdges() const
Returns the number of edges in the graph.
static TFSet NoDiamStat()
int GetEdges() const
Returns the number of edges in the graph.
TSizeTy Len() const
Returns the number of elements in the vector.
void TakeConnComp(const PGraph &Graph)
void Save(TSOut &SOut) const
void PlotAllVsX(const TGStatVal &XVal, const TStr &OutFNm, TStr Desc=TStr(), const TGpScaleTy &Scale=gpsAuto, const bool &PowerFit=false) const
static TFSet NoDistrStat()
void GetKeyV(TVec< TKey > &KeyV) const
int GetNodes() const
Returns the number of nodes in the graph.
void AvgGStat(const PGStatVec &GStatVec, const bool &ClipAt1=false)
void SetXYLabel(const TStr &XLabel, const TStr &YLabel)
TGStatVec & operator=(const TGStatVec &GStat)
static TStr GetDistrStr(const TGStatDistr &Distr)
const TDat & GetDat(const TKey &Key) const
bool HasDistr(const TGStatDistr &Distr) const
void Sort(const TGStatVal &SortBy=gsvNodes, const bool &Asc=true)
bool HasDistr(const TGStatDistr &Stat) const
int AddPwrFit(const int &PlotId, const TGpSeriesTy &SeriesTy=gpwLines, const TStr &Style=TStr())
int GetNodes() const
Returns the number of nodes in the graph.
void Save(TSOut &SOut) const
void Save(TSOut &SOut) const
bool Empty() const
Tests whether the vector is empty.
void SaveTxt(const TStr &FNmPref, const TStr &Desc) const
bool operator()(const TGStat &GS1, const TGStat &GS2) const
Graph Statistics Sequence.
void Swap(TVec< TVal, TSizeTy > &Vec)
Swaps the contents of the vector with Vec.
int GetTime(const int &ValN) const
const char * GetTmStr() const
static TPlotInfo GetPlotInfo(const TGStatVal &Val)
void GetSngVec(const PNGraph &Graph, TFltV &LeftSV, TFltV &RightSV)
Computes the leading left and right singular vector of the adjacency matrix representing a directed G...
void Save(TSOut &SOut) const
void TakeStat(const PNGraph &Graph, const TSecTm &Time, TFSet StatFSet, const TStr &GraphName)
void TakeTriadPart(const PGraph &Graph)
void Add(const TFlt &Val, const TFlt &Wgt=1)
void Sort(const bool &Asc=true)
Sorts the elements of the vector.
THash< TInt, TFltPrV > DistrStatH
Statistics of a Graph Snapshot.
void DelBefore(const TSecTm &Tm)
void Save(TSOut &SOut, const bool &IsSmall=false) const
void TakeClustCf(const PGraph &Graph, const int &SampleNodes=-1)
static PGStat New(const TSecTm &Time=TSecTm(), const TStr &GraphName=TStr())
void DelSmallNodes(const int &MinNodes)
bool HasVal(const TGStatVal &StatVal) const
void TakeBccStat(const PGraph &Graph, TFSet StatFSet)
int AddKey(const TKey &Key)
const TVal & Last() const
Returns a reference to the last element of the vector.
TGStatVec(const TTmUnit &_TmUnit=tmu1Sec)
static uint MinNodesEdges
TPair< TFlt, TFlt > TFltPr
void SaveEps(const int &FontSz=30, const TStr &Comment=TStr())
void SetVal(const TGStatVal &StatVal, const double &Val)
void Save(TSOut &SOut) const
void GetSngVals(const PNGraph &Graph, const int &SngVals, TFltV &SngValV)
Computes largest SngVals singular values of the adjacency matrix representing a directed Graph...
PGStat At(const int &ValN) const
void PlotAll(const TStr &FNmPref, TStr Desc=TStr(), bool PowerFit=false) const
static TStr GetTmUnitStr(const TTmUnit &TmUnit)
void SetScale(const TGpScaleTy &GpScaleTy)
TStr GetStr(const TLoc &Loc=lUs) const
static TStr Fmt(const char *FmtStr,...)
TQuad< TStr, TStr, TStr, TGpScaleTy > TPlotInfo
void DelAfter(const TSecTm &Tm)
void GetValV(const TGStatVal &XVal, const TGStatVal &YVal, TFltPrV &ValV) const
void GetKeyDatPrV(TVec< TPair< TKey, TDat > > &KeyDatPrV) const
void Plot(const TGStatDistr &Distr, const TStr &FNmPref, TStr Desc=TStr(), bool PowerFit=false) const
TGStat & operator=(const TGStat &GStat)
int AddPlot(const TIntV &YValV, const TGpSeriesTy &SeriesTy=gpwLinesPoints, const TStr &Label=TStr(), const TStr &Style=TStr())
void Gen(const TSizeTy &_Vals)
Constructs a vector (an array) of _Vals elements.
TGStat(const TSecTm &GraphTm=TSecTm(), const TStr &GraphName=TStr())
void TakeSccStat(const PGraph &Graph, TFSet StatFSet)
double GetVal(const TGStatVal &StatVal) const
void SortCmp(const TCmp &Cmp)
Sorts the elements of the vector using the comparator Cmp.
bool IsKey(const TKey &Key) const
static PGStatVec New(const TTmUnit &_TmUnit=tmu1Sec)
TSizeTy Add()
Adds a new element at the end of the vector, after its current last element.
void SetDistr(const TGStatDistr &Distr, const TFltPrV &FltPrV)
TDat & AddDat(const TKey &Key)
void Plot(const TGStatVal &XVal, const TGStatVal &YVal, const TStr &OutFNm, TStr &Desc, const TGpScaleTy &Scale=gpsAuto, const bool &PowerFit=false) const
bool operator<(const TGStat &GStat) const
const TFltPrV & GetDistr(const TGStatDistr &Distr) const
void TakeDegDistr(const PGraph &Graph)
void TakeBasicStat(const PGraph &Graph, const bool &IsMxWcc=false)
void TakeDiam(const PGraph &Graph, const bool &IsMxWcc=false)
bool In(const int &FlagN) const