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.