lib/model/unittest/Mocks.cc (189 lines of code) (raw):
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the following additional limitation. Functionality enabled by the
* files subject to the Elastic License 2.0 may only be used in production when
* invoked by an Elasticsearch process with a license key installed that permits
* use of machine learning features. You may not use this file except in
* compliance with the Elastic License 2.0 and the foregoing additional
* limitation.
*/
#include "Mocks.h"
#include <model/CModelDetailsView.h>
namespace ml {
namespace model {
CMockModel::CMockModel(const SModelParams& params,
const TDataGathererPtr& dataGatherer,
const TFeatureInfluenceCalculatorCPtrPrVecVec& influenceCalculators)
: CAnomalyDetectorModel(params, dataGatherer, influenceCalculators),
m_IsPopulation(false), m_InterimBucketCorrector(params.s_BucketLength) {
}
bool CMockModel::shouldPersist() const {
return true;
}
void CMockModel::persistModelsState(core::CStatePersistInserter& /*inserter*/) const {
}
void CMockModel::acceptPersistInserter(core::CStatePersistInserter& /*inserter*/) const {
}
bool CMockModel::acceptRestoreTraverser(core::CStateRestoreTraverser& /*traverser*/) {
return false;
}
CAnomalyDetectorModel* CMockModel::cloneForPersistence() const {
return nullptr;
}
model_t::EModelType CMockModel::category() const {
return model_t::E_MetricOnline;
}
bool CMockModel::isPopulation() const {
return m_IsPopulation;
}
bool CMockModel::isEventRate() const {
return false;
}
bool CMockModel::isMetric() const {
return false;
}
CMockModel::TOptionalUInt64
CMockModel::currentBucketCount(std::size_t /*pid*/, core_t::TTime /*time*/) const {
CAnomalyDetectorModel::TOptionalUInt64 count;
return count;
}
CMockModel::TOptionalDouble CMockModel::baselineBucketCount(std::size_t /*pid*/) const {
CAnomalyDetectorModel::TOptionalDouble count;
return count;
}
CMockModel::TDouble1Vec CMockModel::currentBucketValue(model_t::EFeature feature,
std::size_t pid,
std::size_t cid,
core_t::TTime time) const {
auto i = m_BucketValues.find({feature, core::make_triple(pid, cid, time)});
return i != m_BucketValues.end() ? i->second : TDouble1Vec();
}
CMockModel::TDouble1Vec CMockModel::baselineBucketMean(model_t::EFeature feature,
std::size_t pid,
std::size_t cid,
model_t::CResultType /*type*/,
const TSizeDoublePr1Vec& /*correlated*/,
core_t::TTime time) const {
auto i = m_BucketBaselineMeans.find({feature, core::make_triple(pid, cid, time)});
return i != m_BucketBaselineMeans.end() ? i->second : TDouble1Vec();
}
bool CMockModel::bucketStatsAvailable(core_t::TTime /*time*/) const {
return false;
}
void CMockModel::currentBucketPersonIds(core_t::TTime /*time*/, TSizeVec& /*result*/) const {
}
void CMockModel::sampleBucketStatistics(core_t::TTime /*startTime*/,
core_t::TTime /*endTime*/,
CResourceMonitor& /*resourceMonitor*/) {
}
void CMockModel::sample(core_t::TTime /*startTime*/,
core_t::TTime /*endTime*/,
CResourceMonitor& /*resourceMonitor*/) {
}
void CMockModel::prune(std::size_t /*maximumAge*/) {
}
bool CMockModel::computeProbability(std::size_t /*pid*/,
core_t::TTime /*startTime*/,
core_t::TTime /*endTime*/,
CPartitioningFields& /*partitioningFields*/,
std::size_t /*numberAttributeProbabilities*/,
SAnnotatedProbability& /*result*/) const {
return false;
}
bool CMockModel::computeTotalProbability(const std::string& /*person*/,
std::size_t /*numberAttributeProbabilities*/,
TOptionalDouble& /*probability*/,
TAttributeProbability1Vec& /*attributeProbabilities*/) const {
return false;
}
std::uint64_t CMockModel::checksum(bool /*includeCurrentBucketStats*/) const {
return 0;
}
void CMockModel::debugMemoryUsage(const core::CMemoryUsage::TMemoryUsagePtr& /*mem*/) const {
}
std::size_t CMockModel::memoryUsage() const {
return 0;
}
std::size_t CMockModel::computeMemoryUsage() const {
return 0;
}
const CMockModel::TAnnotationVec& CMockModel::annotations() const {
return m_Annotations;
}
std::size_t CMockModel::staticSize() const {
return 0;
}
CMockModel::TModelDetailsViewUPtr CMockModel::details() const {
TModelDetailsViewUPtr result{new CMockModelDetailsView(*this)};
return result;
}
double CMockModel::attributeFrequency(std::size_t /*cid*/) const {
return 0.0;
}
core_t::TTime CMockModel::currentBucketStartTime() const {
return 0;
}
void CMockModel::currentBucketStartTime(core_t::TTime /*time*/) {
}
void CMockModel::createNewModels(std::size_t /*n*/, std::size_t /*m*/) {
}
void CMockModel::updateRecycledModels() {
}
void CMockModel::clearPrunedResources(const TSizeVec& /*people*/, const TSizeVec& /*attributes*/) {
}
const CInterimBucketCorrector& CMockModel::interimValueCorrector() const {
return m_InterimBucketCorrector;
}
void CMockModel::doSkipSampling(core_t::TTime /*startTime*/, core_t::TTime /*endTime*/) {
}
const maths::common::CModel* CMockModel::model(std::size_t id) const {
return m_Models[id].get();
}
void CMockModel::mockPopulation(bool isPopulation) {
m_IsPopulation = isPopulation;
}
void CMockModel::mockAddBucketValue(model_t::EFeature feature,
std::size_t pid,
std::size_t cid,
core_t::TTime time,
const TDouble1Vec& value) {
m_BucketValues[{feature, core::make_triple(pid, cid, time)}] = value;
}
void CMockModel::mockAddBucketBaselineMean(model_t::EFeature feature,
std::size_t pid,
std::size_t cid,
core_t::TTime time,
const TDouble1Vec& value) {
m_BucketBaselineMeans[{feature, core::make_triple(pid, cid, time)}] = value;
}
void CMockModel::mockTimeSeriesModels(TMathsModelUPtrVec&& models) {
m_Models = std::move(models);
}
void CMockModel::addAnnotation(core_t::TTime time,
CAnnotation::EEvent type,
const std::string& annotation) {
m_Annotations.emplace_back(time, type, annotation, 0, EMPTY_STRING, EMPTY_STRING,
EMPTY_STRING, EMPTY_STRING, EMPTY_STRING, EMPTY_STRING);
}
void CMockModel::shiftTime(core_t::TTime time, core_t::TTime shift) {
for (auto& model : m_Models) {
model->shiftTime(time, shift);
}
this->addAnnotation(time, CAnnotation::E_ModelChange,
"Shifted time by " + std::to_string(shift) + " seconds");
}
CMemoryUsageEstimator* CMockModel::memoryUsageEstimator() const {
return nullptr;
}
CMockModelDetailsView::CMockModelDetailsView(const CMockModel& model)
: m_Model{&model} {
}
const maths::common::CModel* CMockModelDetailsView::model(model_t::EFeature /*feature*/,
std::size_t byFieldId) const {
return m_Model->model(byFieldId);
}
CMockModelDetailsView::TTimeTimePr
CMockModelDetailsView::dataTimeInterval(std::size_t /*byFieldId*/) const {
return {0, 0};
}
const CAnomalyDetectorModel& CMockModelDetailsView::base() const {
return *m_Model;
}
double CMockModelDetailsView::countVarianceScale(model_t::EFeature /*feature*/,
std::size_t /*byFieldId*/,
core_t::TTime /*time*/) const {
return 1.0;
}
}
}