Code Documentation 3.8
Social Network Visualizer
Loading...
Searching...
No Matches
cli_common.h
Go to the documentation of this file.
1#pragma once
2
3#include <QJsonObject>
4#include <QJsonArray>
5#include <QTextStream>
6#include <QString>
7
8namespace cli
9{
10
11 struct CliConfig
12 {
13 bool verbose = false;
14
15 QString inputPath;
16 int fileFormat = 0;
17 QString delimiter;
18 int twoMode = 0;
19 bool hasLabels = false;
20
22 bool considerWeights = false;
23 bool inverseWeights = true;
24 bool dropIsolates = false;
25
26 QString dumpJsonPath;
28
29 int benchRuns = 0; // 0 = off
30 QString kernel; // "distance", etc.
31 bool strict = false; // if true, timing regressions fail (exit non-zero)
32
33 QString connectivityType = "weak"; // "weak"|"strong", for --kernel connectivity on directed graphs
34
35 QString connMode = "global"; // "local"|"global", for --kernel vertex_connectivity
36 int connSource = -1; // required for connMode == "local"
37 int connTarget = -1; // required for connMode == "local"
38
39 // #281: cross-checks Graph::graphConnectivity() (Esfahanian-Hakimi, O(n+delta^2))
40 // against Graph::graphConnectivityNaive() (full O(n^2) pairwise sweep, kept as a
41 // trustworthy ground truth) for --kernel vertex_connectivity --conn-mode global. Only
42 // meaningful for global mode - graphNodeConnectivity() (local mode) has no naive/fast
43 // pair to compare, it's the same single max-flow call either way.
44 bool verifyNaive = false;
45
46 qreal katzAlpha = -1; // >= 0 enables Katz Centrality for --kernel prominence
47
48 qreal bonacichAlpha = -1; // >= 0 enables Bonacich Power Centrality for --kernel prominence
49 qreal bonacichBeta = 0;
50
51 // "off"|"all"|"out"|"in" - enables PN Centrality (WS18 P3) for --kernel prominence when
52 // not "off". "all" is undirected-only, "out"/"in" are directed-only - matches PNMode.
53 QString pnMode = "off";
54
55 // "simple_matching"|"jaccard"|"pearson", for --kernel matrix's similarity category.
56 // Fix #279: selects which similarity/correlation measure the kernel dumps, so the
57 // NaN-guard fix on each measure's degenerate (empty-sample) path can be covered by
58 // a dedicated golden baseline instead of only ever exercising simple_matching.
59 QString similarityMeasure = "simple_matching";
60
61 // "adjacency"|"distances", for --kernel matrix's similarity category. Selects which
62 // Matrix-producing operation feeds similarityMatrix(): the adjacency matrix (AM, the
63 // long-standing default - never contains RAND_MAX) or the geodesic distances matrix
64 // (DM, which does contain RAND_MAX for unreachable pairs on a disconnected network).
65 // similarityMatrix()'s Jaccard branch didn't exclude RAND_MAX from its match/ties
66 // count the way distancesMatrix() does, so two actors both unreachable from some
67 // third node counted as a false-positive match - only reachable via the "distances"
68 // input, hence this flag.
69 QString similarityInput = "adjacency";
70
71 // "euclidean"|"manhattan"|"jaccard"|"hamming"|"chebyshev", for --kernel matrix's
72 // dissimilarity category (Graph::createMatrixDissimilarities()). Always runs on the
73 // adjacency matrix - unlike similarity, dissimilarity has no separate "distances" input
74 // mode since it's a numeric-distance measure, not a binary-match one.
75 QString dissimilarityMeasure = "euclidean";
76
77 // "single"|"complete"|"average"|"upgma", for --kernel clustering's hierarchical
78 // clustering category (Graph::graphClusteringHierarchical()). Selects the linkage
79 // method used to compute distances between a newly merged cluster and the remaining
80 // clusters. "average" is WPGMA (unweighted mean of the two prior cluster distances);
81 // "upgma" weights that mean by each old cluster's member count.
82 QString clusteringMethod = "average";
83
84 // "adjacency"|"distances", for --kernel clustering's hierarchical clustering category.
85 // Selects the structural-equivalence input matrix fed into graphClusteringHierarchical()
86 // (which then derives a dissimilarities matrix from it via dissimilarityMeasure).
87 QString clusteringInput = "adjacency";
88 };
89
90 // ---------------- printing ----------------
91
92 void printKV(const QString &k, double v);
93 void printKV(const QString &k, const QString &v);
94 void printKV(const QString &k, int v);
95 void printKV(const QString &k, qint64 v);
96
97 // ---------------- deterministic formatting ----------------
98
99 QString d2s(double v);
100
101 // ---------------- JSON I/O ----------------
102
103 bool writeJsonFile(const QString &path, const QJsonObject &obj, QString *err);
104 bool readJsonFile(const QString &path, QJsonObject *outObj, QString *err);
105
106 // ---------------- compare helpers ----------------
107
108 bool cmpStr(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err);
109 bool cmpInt(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err);
110 bool cmpBool(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err);
111
112 bool almostEqual(double a, double b, double rel = 1e-15, double abs = 0.0);
113
114 bool cmpNumStrTol(const QJsonObject &e, const QJsonObject &a,
115 const QString &k, QTextStream &err,
116 double rel = 1e-15, double abs = 0.0);
117
118 bool cmpIntArray(const QJsonArray &e, const QJsonArray &a,
119 QTextStream &err, const QString &what);
120
121 bool cmpStrArray(const QJsonArray &e, const QJsonArray &a,
122 QTextStream &err, const QString &what);
123
124} // namespace cli
Definition cli_common.cpp:18
void printKV(const QString &k, double v)
Definition cli_common.cpp:22
bool cmpStr(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err)
Definition cli_common.cpp:92
bool cmpInt(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err)
Definition cli_common.cpp:104
bool almostEqual(double a, double b, double rel, double abs)
Definition cli_common.cpp:129
bool writeJsonFile(const QString &path, const QJsonObject &obj, QString *err)
Definition cli_common.cpp:52
bool readJsonFile(const QString &path, QJsonObject *outObj, QString *err)
Definition cli_common.cpp:66
bool cmpNumStrTol(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err, double rel, double abs)
Definition cli_common.cpp:147
bool cmpStrArray(const QJsonArray &e, const QJsonArray &a, QTextStream &err, const QString &what)
Definition cli_common.cpp:201
QString d2s(double v)
Definition cli_common.cpp:44
bool cmpBool(const QJsonObject &e, const QJsonObject &a, const QString &k, QTextStream &err)
Definition cli_common.cpp:116
bool cmpIntArray(const QJsonArray &e, const QJsonArray &a, QTextStream &err, const QString &what)
Definition cli_common.cpp:181
Definition cli_common.h:12
int fileFormat
Definition cli_common.h:16
int connTarget
Definition cli_common.h:37
bool strict
Definition cli_common.h:31
QString dumpJsonPath
Definition cli_common.h:26
bool hasLabels
Definition cli_common.h:19
int connSource
Definition cli_common.h:36
bool verifyNaive
Definition cli_common.h:44
QString similarityMeasure
Definition cli_common.h:59
QString dissimilarityMeasure
Definition cli_common.h:75
QString clusteringInput
Definition cli_common.h:87
QString kernel
Definition cli_common.h:30
QString similarityInput
Definition cli_common.h:69
QString pnMode
Definition cli_common.h:53
int benchRuns
Definition cli_common.h:29
bool verbose
Definition cli_common.h:13
qreal katzAlpha
Definition cli_common.h:46
QString connectivityType
Definition cli_common.h:33
bool inverseWeights
Definition cli_common.h:23
int twoMode
Definition cli_common.h:18
QString clusteringMethod
Definition cli_common.h:82
qreal bonacichBeta
Definition cli_common.h:49
QString connMode
Definition cli_common.h:35
QString compareJsonPath
Definition cli_common.h:27
QString inputPath
Definition cli_common.h:15
bool considerWeights
Definition cli_common.h:22
bool dropIsolates
Definition cli_common.h:24
qreal bonacichAlpha
Definition cli_common.h:48
bool computeCentralities
Definition cli_common.h:21
QString delimiter
Definition cli_common.h:17