stats: cleanup text output stuff and fix mysql output
This commit is contained in:
parent
be2d74a25a
commit
fcaf1b74b0
4 changed files with 105 additions and 123 deletions
|
@ -1423,6 +1423,22 @@ class Vector2dBase : public DataWrapVec2d<Derived, Vector2dInfo>
|
|||
//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
struct DistParams : public StorageParams
|
||||
{
|
||||
const bool fancy;
|
||||
|
||||
/** The minimum value to track. */
|
||||
Counter min;
|
||||
/** The maximum value to track. */
|
||||
Counter max;
|
||||
/** The number of entries in each bucket. */
|
||||
Counter bucket_size;
|
||||
/** The number of buckets. Equal to (max-min)/bucket_size. */
|
||||
size_type buckets;
|
||||
|
||||
explicit DistParams(bool f) : fancy(f) {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Templatized storage and interface for a distrbution stat.
|
||||
*/
|
||||
|
@ -1430,18 +1446,9 @@ class DistStor
|
|||
{
|
||||
public:
|
||||
/** The parameters for a distribution stat. */
|
||||
struct Params : public StorageParams
|
||||
struct Params : public DistParams
|
||||
{
|
||||
/** The minimum value to track. */
|
||||
Counter min;
|
||||
/** The maximum value to track. */
|
||||
Counter max;
|
||||
/** The number of entries in each bucket. */
|
||||
Counter bucket_size;
|
||||
/** The number of buckets. Equal to (max-min)/bucket_size. */
|
||||
size_type buckets;
|
||||
|
||||
enum { fancy = false };
|
||||
Params() : DistParams(false) {}
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -1578,9 +1585,9 @@ class DistStor
|
|||
class FancyStor
|
||||
{
|
||||
public:
|
||||
struct Params : public StorageParams
|
||||
struct Params : public DistParams
|
||||
{
|
||||
enum { fancy = true };
|
||||
Params() : DistParams(true) {}
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -1654,9 +1661,9 @@ class FancyStor
|
|||
class AvgFancy
|
||||
{
|
||||
public:
|
||||
struct Params : public StorageParams
|
||||
struct Params : public DistParams
|
||||
{
|
||||
enum { fancy = true };
|
||||
Params() : DistParams(true) {}
|
||||
};
|
||||
|
||||
private:
|
||||
|
|
|
@ -583,7 +583,8 @@ MySql::configure(const DistInfoBase &info)
|
|||
if (!configure(info, "DIST"))
|
||||
return;
|
||||
|
||||
const Params *params = safe_cast<const Params *>(info.storageParams);
|
||||
const DistParams *params =
|
||||
safe_cast<const DistParams *>(info.storageParams);
|
||||
if (!params->fancy) {
|
||||
stat.size = params->buckets;
|
||||
stat.min = params->min;
|
||||
|
@ -599,7 +600,8 @@ MySql::configure(const VectorDistInfoBase &info)
|
|||
if (!configure(info, "VECTORDIST"))
|
||||
return;
|
||||
|
||||
const Params *params = safe_cast<const Params *>(info.storageParams);
|
||||
const DistParams *params =
|
||||
safe_cast<const DistParams *>(info.storageParams);
|
||||
if (!params->fancy) {
|
||||
stat.size = params->buckets;
|
||||
stat.min = params->min;
|
||||
|
@ -765,7 +767,7 @@ MySql::output(const VectorInfoBase &info)
|
|||
}
|
||||
|
||||
void
|
||||
MySql::output(const DistData &data)
|
||||
MySql::output(const DistData &data, const DistParams *params)
|
||||
{
|
||||
const int db_sum = -1;
|
||||
const int db_squares = -2;
|
||||
|
@ -787,7 +789,7 @@ MySql::output(const DistData &data)
|
|||
newdata.data = data.samples;
|
||||
newdata.insert();
|
||||
|
||||
if (data.samples && !data.fancy) {
|
||||
if (data.samples && !params->fancy) {
|
||||
newdata.x = db_min_val;
|
||||
newdata.data = data.min_val;
|
||||
newdata.insert();
|
||||
|
@ -821,7 +823,7 @@ MySql::output(const DistInfoBase &info)
|
|||
|
||||
newdata.stat = find(info.id);
|
||||
newdata.y = 0;
|
||||
output(info.data);
|
||||
output(info.data, safe_cast<const DistParams *>(info.storageParams));
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -835,7 +837,8 @@ MySql::output(const VectorDistInfoBase &info)
|
|||
size_type size = info.data.size();
|
||||
for (off_type y = 0; y < size; ++y) {
|
||||
newdata.y = y;
|
||||
output(info.data[y]);
|
||||
output(info.data[y],
|
||||
safe_cast<const DistParams *>(info.storageParams));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ struct SetupStat
|
|||
bool total;
|
||||
bool pdf;
|
||||
bool cdf;
|
||||
|
||||
double min;
|
||||
double max;
|
||||
double bktsize;
|
||||
|
@ -177,7 +178,7 @@ class MySql : public Output
|
|||
void output(const VectorDistInfoBase &info);
|
||||
void output(const Vector2dInfoBase &info);
|
||||
void output(const FormulaInfoBase &info);
|
||||
void output(const DistData &data);
|
||||
void output(const DistData &data, const DistParams *params);
|
||||
|
||||
void configure();
|
||||
bool configure(const Info &info, std::string type);
|
||||
|
|
|
@ -351,27 +351,63 @@ struct DistPrint
|
|||
bool descriptions;
|
||||
int precision;
|
||||
|
||||
Result min_val;
|
||||
Result max_val;
|
||||
Result underflow;
|
||||
Result overflow;
|
||||
VResult vec;
|
||||
Result sum;
|
||||
Result squares;
|
||||
Result samples;
|
||||
|
||||
Counter min;
|
||||
Counter max;
|
||||
Counter bucket_size;
|
||||
size_type size;
|
||||
bool fancy;
|
||||
|
||||
const DistData &data;
|
||||
|
||||
DistPrint(const DistInfoBase &info);
|
||||
DistPrint(const VectorDistInfoBase &info, int i);
|
||||
void init(const Info &info, const DistParams *params);
|
||||
void operator()(ostream &stream) const;
|
||||
};
|
||||
|
||||
DistPrint::DistPrint(const DistInfoBase &info)
|
||||
: data(info.data)
|
||||
{
|
||||
init(info, safe_cast<const DistParams *>(info.storageParams));
|
||||
}
|
||||
|
||||
DistPrint::DistPrint(const VectorDistInfoBase &info, int i)
|
||||
: data(info.data[i])
|
||||
{
|
||||
init(info, safe_cast<const DistParams *>(info.storageParams));
|
||||
|
||||
name = info.name + "_" +
|
||||
(info.subnames[i].empty() ? (to_string(i)) : info.subnames[i]);
|
||||
|
||||
if (!info.subdescs[i].empty())
|
||||
desc = info.subdescs[i];
|
||||
}
|
||||
|
||||
void
|
||||
DistPrint::init(const Info &info, const DistParams *params)
|
||||
{
|
||||
name = info.name;
|
||||
desc = info.desc;
|
||||
flags = info.flags;
|
||||
compat = compat;
|
||||
descriptions = descriptions;
|
||||
precision = info.precision;
|
||||
|
||||
fancy = params->fancy;
|
||||
min = params->min;
|
||||
max = params->max;
|
||||
bucket_size = params->bucket_size;
|
||||
size = params->buckets;
|
||||
}
|
||||
|
||||
void
|
||||
DistPrint::operator()(ostream &stream) const
|
||||
{
|
||||
Result stdev = NAN;
|
||||
if (data.samples)
|
||||
stdev = sqrt((data.samples * data.squares - data.sum * data.sum) /
|
||||
(data.samples * (data.samples - 1.0)));
|
||||
|
||||
if (fancy) {
|
||||
ScalarPrint print;
|
||||
string base = name + (compat ? "_" : "::");
|
||||
|
@ -385,28 +421,27 @@ DistPrint::operator()(ostream &stream) const
|
|||
print.cdf = NAN;
|
||||
|
||||
print.name = base + "mean";
|
||||
print.value = samples ? sum / samples : NAN;
|
||||
print.value = data.samples ? data.sum / data.samples : NAN;
|
||||
print(stream);
|
||||
|
||||
print.name = base + "stdev";
|
||||
print.value = samples ? sqrt((samples * squares - sum * sum) /
|
||||
(samples * (samples - 1.0))) : NAN;
|
||||
print.value = stdev;
|
||||
print(stream);
|
||||
|
||||
print.name = "**Ignore: " + base + "TOT";
|
||||
print.value = samples;
|
||||
print.value = data.samples;
|
||||
print(stream);
|
||||
return;
|
||||
}
|
||||
|
||||
assert(size == vec.size());
|
||||
assert(size == data.cvec.size());
|
||||
|
||||
Result total = 0.0;
|
||||
|
||||
total += underflow;
|
||||
total += data.underflow;
|
||||
for (off_type i = 0; i < size; ++i)
|
||||
total += vec[i];
|
||||
total += overflow;
|
||||
total += data.cvec[i];
|
||||
total += data.overflow;
|
||||
|
||||
string base = name + (compat ? "." : "::");
|
||||
|
||||
|
@ -427,18 +462,18 @@ DistPrint::operator()(ostream &stream) const
|
|||
}
|
||||
|
||||
print.name = base + "samples";
|
||||
print.value = samples;
|
||||
print.value = data.samples;
|
||||
print(stream);
|
||||
|
||||
print.name = base + "min_value";
|
||||
print.value = min_val;
|
||||
print.value = data.min_val;
|
||||
print(stream);
|
||||
|
||||
if (!compat || underflow > 0.0) {
|
||||
if (!compat || data.underflow > 0.0) {
|
||||
print.name = base + "underflows";
|
||||
print.value = underflow;
|
||||
print.value = data.underflow;
|
||||
if (!compat && total) {
|
||||
print.pdf = underflow / total;
|
||||
print.pdf = data.underflow / total;
|
||||
print.cdf += print.pdf;
|
||||
}
|
||||
print(stream);
|
||||
|
@ -456,9 +491,9 @@ DistPrint::operator()(ostream &stream) const
|
|||
namestr << "-" << high;
|
||||
|
||||
print.name = namestr.str();
|
||||
print.value = vec[i];
|
||||
print.value = data.cvec[i];
|
||||
if (total) {
|
||||
print.pdf = vec[i] / total;
|
||||
print.pdf = data.cvec[i] / total;
|
||||
print.cdf += print.pdf;
|
||||
}
|
||||
print(stream);
|
||||
|
@ -471,17 +506,17 @@ DistPrint::operator()(ostream &stream) const
|
|||
print.flags = flags | __substat;
|
||||
|
||||
for (off_type i = 0; i < size; ++i) {
|
||||
if ((flags & nozero && vec[i] == 0.0) ||
|
||||
(flags & nonan && isnan(vec[i])))
|
||||
if ((flags & nozero && data.cvec[i] == 0.0) ||
|
||||
(flags & nonan && isnan(data.cvec[i])))
|
||||
continue;
|
||||
|
||||
_min = i * bucket_size + min;
|
||||
_pdf = vec[i] / total * 100.0;
|
||||
_pdf = data.cvec[i] / total * 100.0;
|
||||
_cdf += _pdf;
|
||||
|
||||
|
||||
print.name = ValueToString(_min, 0, compat);
|
||||
print.value = vec[i];
|
||||
print.value = data.cvec[i];
|
||||
print.pdf = (flags & pdf) ? _pdf : NAN;
|
||||
print.cdf = (flags & cdf) ? _cdf : NAN;
|
||||
print(stream);
|
||||
|
@ -490,11 +525,11 @@ DistPrint::operator()(ostream &stream) const
|
|||
print.flags = flags;
|
||||
}
|
||||
|
||||
if (!compat || overflow > 0.0) {
|
||||
if (!compat || data.overflow > 0.0) {
|
||||
print.name = base + "overflows";
|
||||
print.value = overflow;
|
||||
print.value = data.overflow;
|
||||
if (!compat && total) {
|
||||
print.pdf = overflow / total;
|
||||
print.pdf = data.overflow / total;
|
||||
print.cdf += print.pdf;
|
||||
} else {
|
||||
print.pdf = NAN;
|
||||
|
@ -513,17 +548,16 @@ DistPrint::operator()(ostream &stream) const
|
|||
}
|
||||
|
||||
print.name = base + "max_value";
|
||||
print.value = max_val;
|
||||
print.value = data.max_val;
|
||||
print(stream);
|
||||
|
||||
if (!compat && samples != 0) {
|
||||
if (!compat && data.samples != 0) {
|
||||
print.name = base + "mean";
|
||||
print.value = sum / samples;
|
||||
print.value = data.sum / data.samples;
|
||||
print(stream);
|
||||
|
||||
print.name = base + "stdev";
|
||||
print.value = sqrt((samples * squares - sum * sum) /
|
||||
(samples * (samples - 1.0)));
|
||||
print.value = stdev;
|
||||
print(stream);
|
||||
}
|
||||
|
||||
|
@ -651,39 +685,7 @@ Text::visit(const DistInfoBase &info)
|
|||
if (noOutput(info))
|
||||
return;
|
||||
|
||||
DistPrint print;
|
||||
|
||||
print.name = info.name;
|
||||
print.desc = info.desc;
|
||||
print.flags = info.flags;
|
||||
print.compat = compat;
|
||||
print.descriptions = descriptions;
|
||||
print.precision = info.precision;
|
||||
|
||||
const DistData &data = info.data;
|
||||
|
||||
print.min_val = data.min_val;
|
||||
print.max_val = data.max_val;
|
||||
print.underflow = data.underflow;
|
||||
print.overflow = data.overflow;
|
||||
print.vec.resize(data.cvec.size());
|
||||
for (off_type i = 0; i < print.vec.size(); ++i)
|
||||
print.vec[i] = (Result)data.cvec[i];
|
||||
print.sum = data.sum;
|
||||
print.squares = data.squares;
|
||||
print.samples = data.samples;
|
||||
|
||||
const DistStor::Params *params =
|
||||
safe_cast<const DistStor::Params *>(info.storageParams);
|
||||
|
||||
print.fancy = params->fancy;
|
||||
if (!params->fancy) {
|
||||
print.min = params->min;
|
||||
print.max = params->max;
|
||||
print.bucket_size = params->bucket_size;
|
||||
print.size = params->buckets;
|
||||
}
|
||||
|
||||
DistPrint print(info);
|
||||
print(*stream);
|
||||
}
|
||||
|
||||
|
@ -694,38 +696,7 @@ Text::visit(const VectorDistInfoBase &info)
|
|||
return;
|
||||
|
||||
for (off_type i = 0; i < info.size(); ++i) {
|
||||
DistPrint print;
|
||||
|
||||
print.name = info.name + "_" +
|
||||
(info.subnames[i].empty() ? (to_string(i)) : info.subnames[i]);
|
||||
print.desc = info.subdescs[i].empty() ? info.desc : info.subdescs[i];
|
||||
print.flags = info.flags;
|
||||
print.compat = compat;
|
||||
print.descriptions = descriptions;
|
||||
print.precision = info.precision;
|
||||
|
||||
print.min_val = info.data[i].min_val;
|
||||
print.max_val = info.data[i].max_val;
|
||||
print.underflow = info.data[i].underflow;
|
||||
print.overflow = info.data[i].overflow;
|
||||
print.vec.resize(info.data[i].cvec.size());
|
||||
for (off_type j = 0; j < print.vec.size(); ++j)
|
||||
print.vec[j] = (Result)info.data[i].cvec[j];
|
||||
print.sum = info.data[i].sum;
|
||||
print.squares = info.data[i].squares;
|
||||
print.samples = info.data[i].samples;
|
||||
|
||||
const DistStor::Params *params =
|
||||
safe_cast<const DistStor::Params *>(info.storageParams);
|
||||
|
||||
print.fancy = params->fancy;
|
||||
if (!params->fancy) {
|
||||
print.min = params->min;
|
||||
print.max = params->max;
|
||||
print.bucket_size = params->bucket_size;
|
||||
print.size = params->buckets;
|
||||
}
|
||||
|
||||
DistPrint print(info, i);
|
||||
print(*stream);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue