CVB++ 14.0
regression_test_result.hpp
1#pragma once
2
3#include "../_cexports/c_polimago.h"
4
5#include "../global.hpp"
6#include "../string.hpp"
7#include "test_result_base.hpp"
8
9#include <vector>
10#include <memory>
11
12namespace Cvb
13{
14CVB_BEGIN_INLINE_NS
15
17namespace Polimago
18{
20namespace Testing
21{
22
24
27{
28private:
29 RegressionTestResult (ReleaseObjectGuard&& guard)
30 : TestResultBase (std::move (guard))
31 {
32 auto numExamples = NumExamples ();
33 auto dimension = RegressionDimension ();
34 for (decltype(numExamples) i = 0; i < numExamples; ++i)
35 {
36 std::vector<double> targetValuesPerExample;
37 for (decltype(dimension) j = 0; j < dimension; ++j)
38 {
39 auto targetValue = CVB_CALL_CAPI(PMGetTestResultTargetValue(Handle(), i, j));
40 targetValuesPerExample.push_back (targetValue);
41 }
42 targetValues_.push_back (targetValuesPerExample);
43 }
44
45 for (decltype(numExamples) i = 0; i < numExamples; ++i)
46 {
47 std::vector<double> predictionResultsPerExample;
48 for (decltype(dimension) j = 0; j < dimension; ++j)
49 {
50 auto predictionResult = CVB_CALL_CAPI(PMGetTestResultNumericalPrediction(Handle(), i, j));
51 predictionResultsPerExample.push_back (predictionResult);
52 }
53 predictionResults_.push_back (predictionResultsPerExample);
54 }
55 }
56
57 std::string ObjectName () const override
58 {
59 return thisObjectName_;
60 }
61
62public:
64
69 RegressionTestResult (const String & fileName)
70 : RegressionTestResult (ReleaseObjectGuard(LoadInternal (fileName)))
71 {
72 if (CVB_CALL_CAPI (PMGetTestResultNumClasses(Handle())) != 0)
73 {
74 throw std::runtime_error ("Loading the RegressionTestResult failed");
75 }
76 }
77
80
82 RegressionTestResult& operator=(RegressionTestResult&&) noexcept = default;
83
84 virtual ~RegressionTestResult () {};
85
87
94 static std::unique_ptr<RegressionTestResult> FromHandle (ReleaseObjectGuard&& guard)
95 {
96 if (!guard.Handle ())
97 {
98 throw std::invalid_argument ("invalid regression test result native handle");
99 }
101 }
102
104
110 {
112 }
113
115
120 {
121 return static_cast<int>(CVB_CALL_CAPI (PMGetTestResultOutputDimension(Handle())));
122 }
123
125
130 {
131 return targetValues_;
132 }
133
135
140 {
141 return predictionResults_;
142 }
143
144private:
145 std::vector<std::vector<double>> targetValues_;
146 std::vector<std::vector<double>> predictionResults_;
147 const std::string thisObjectName_ = "Polimago Regression Test Result";
148};
149
152
153
154} /* namespace Testing */
155
158
159} /* namespace Polimago */
160CVB_END_INLINE_NS
161} /* namespace Cvb */
void * Handle() const noexcept
Classic API Polimago handle.
Definition: predictor_base.hpp:66
Regression test result object.
Definition: regression_test_result.hpp:27
std::vector< std::vector< double > > PredictedValues() const
Prediction results for example.
Definition: regression_test_result.hpp:139
std::vector< std::vector< double > > TargetValues() const
Target values for each example.
Definition: regression_test_result.hpp:129
RegressionTestResult(const String &fileName)
Load a saved regression test result from a file.
Definition: regression_test_result.hpp:69
int RegressionDimension() const
Dimension of the regression results.
Definition: regression_test_result.hpp:119
RegressionTestResult(RegressionTestResult &&) noexcept=default
Move constructor.
static std::unique_ptr< RegressionTestResult > Load(const String &fileName)
Load a saved test result from a file.
Definition: regression_test_result.hpp:109
static std::unique_ptr< RegressionTestResult > FromHandle(ReleaseObjectGuard &&guard)
Creates test result from a classic API handle.
Definition: regression_test_result.hpp:94
Base class for all Polimago Test Results.
Definition: test_result_base.hpp:26
int NumExamples() const
Number of examples that contributed to this test result.
Definition: test_result_base.hpp:67
Root namespace for the Image Manager interface.
Definition: c_barcode.h:24