C++ API for constructing variables#
Logically Variable consists of:
unit that refers to the physical unit (kg, m, s, …),
list of dimensions (X, Y, ToF, …),
shape: the extent of data in every dimension (integer number),
values,
optionally variances.
The keyword arguments factory function is introduced. It allows to omit the arguments and pass them in arbitrary order. The full form is following:
makeVariable<float>(Dims{Dim::X, Dim::Y}, Shape{1, 3}, Unit{kg}, Values{1, 2, 3}, Variances{4, 5, 6});
where Dims is the wrapper structure for the list of dimensions, Shape wraps dimensions lengths, Values and Variances wrap the arguments for constructing element_array.
Dims and Shape could be combined in Dimensions.:
makeVariable<float>(Dimensions{{Dim::X, 1}, {Dim::Y, 3}}, Unit{kg}, Values{1, 2, 3}, Variances{4, 5, 6});
The default value for Unit is dimensionless, omitting Shape and Dims or Dimensions leads to the 0-dimensional variable, let say scalar, which contains the data of one element: Dimensions default value is an empty list of dimensions.
makeVariable<float>(Values{1}, Variances{2});
Omitting both Values and Variances gives the default initialized Variable, that contains ONLY values:
makeVariable<float>(Dimensions{Dim::X, 5});
produces a Variable with values {0, 0, 0, 0, 0}.
For default initialized both values and variances the following syntax is used:
makeVariable<float>(Dimensions{Dim::X, 5}, Values{}, Variances{});
The resulting Variable contains values {0, 0, 0, 0, 0} and variances {0, 0, 0, 0, 0}.
Variable has a constructor which takes the DType as the first argument and acts the same way as a function described above.
makeVariable<float>(Dimensions{Dim::X, 5}, Values{}, Variances{});
is equal to
Variable(dtype<float>, Dimensions{Dim::X, 5}, Values{}, Variances{});
Use the factory function where it is possible, the usage of the constructor generates a big amount of code, though it is convenient for instance in for Python bindings or other case of runtime dispatching.