Fleet  0.0.9
Inference in the LOT
Datum.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "Strings.h"
4 
14 template<typename __input_t, typename __output_t>
15 class defaultdatum_t { // a single data point
16 public:
17  using input_t = __input_t;
18  using output_t = __output_t;
19 
20  static const char DATA_IO_DELIMITER = ':';
21 
24  double reliability; // the noise probability (typically required)
25  double count;
26 
28  defaultdatum_t(const input_t& i, const output_t& o, double r=NaN, double c=1.0) : input(i), output(o), reliability(r), count(c) {}
29  defaultdatum_t(const std::string s){
30 
31  // if s is x:y then its input output
32  // otherwise, we'll treat it as a thunk, no input
33  if(contains(s, DATA_IO_DELIMITER)) {
34 
35  // define this so we can use string_to
36  auto [x, y] = split<2>(s, DATA_IO_DELIMITER);
37  input = string_to<input_t>(x);
38  output = string_to<output_t>(y);
39  }
40  else {
41  input = input_t{};
42  output = string_to<output_t>(s);
43  }
44 
45  reliability = NaN;
46  count = 1;
47  }
48 
54  bool operator==(const defaultdatum_t& y) const {
55 
56  return input==y.input and output==y.output and count == count and
57  (reliability==y.reliability or (isnan(reliability) and isnan(y.reliability)));
58  }
59 };
60 
61 template<typename input_t, typename output_t>
62 std::ostream& operator<<(std::ostream& o, const defaultdatum_t<input_t,output_t>& d) {
63 
64  if constexpr( std::is_pointer<input_t>::value and std::is_pointer<output_t>::value) {
65  o << "[DATA: PTR " << *d.input << " -> PTR " << *d.output << " w/ reliability " << d.reliability << " and count " << d.count << "]";
66  }
67  if constexpr( std::is_pointer<input_t>::value and not std::is_pointer<output_t>::value) {
68  o << "[DATA: PTR " << *d.input << " -> " << d.output << " w/ reliability " << d.reliability << " and count " << d.count << "]";
69  }
70  if constexpr( (not std::is_pointer<input_t>::value) and std::is_pointer<output_t>::value) {
71  o << "[DATA: " << d.input << " -> " << *d.output << " w/ reliability " << d.reliability << " and count " << d.count << "]";
72  }
73  if constexpr( (not std::is_pointer<input_t>::value) and (not std::is_pointer<output_t>::value)) {
74  o << "[DATA: " << d.input << " -> " << d.output << " w/ reliability " << d.reliability << " and count " << d.count << "]";
75  }
76 
77  // TODO: Check if pointer and deref for printing
78  return o;
79 }
80 
81 template<typename input_t, typename output_t>
82 std::string str(const defaultdatum_t<input_t, output_t>& x) {
84 }
bool operator==(const defaultdatum_t &y) const
Defined to allow nan in reliability.
Definition: Datum.h:54
double count
Definition: Datum.h:25
input_t input
Definition: Datum.h:22
double reliability
Definition: Datum.h:24
defaultdatum_t(const input_t &i, const output_t &o, double r=NaN, double c=1.0)
Definition: Datum.h:28
Definition: Datum.h:15
defaultdatum_t()
Definition: Datum.h:27
constexpr double NaN
Definition: Numerics.h:21
std::string str(const defaultdatum_t< input_t, output_t > &x)
Definition: Datum.h:82
__output_t output_t
Definition: Datum.h:18
defaultdatum_t(const std::string s)
Definition: Datum.h:29
__input_t input_t
Definition: Datum.h:17
static const char DATA_IO_DELIMITER
Definition: Datum.h:20
bool contains(const std::string &s, const std::string &x)
Definition: Strings.h:53
output_t output
Definition: Datum.h:23