+ const struct ccase *ccase, void **aux, size_t n_intr)
+{
+ cov->accumulate (cov, ccase, (const struct interaction_variable **) aux, n_intr);
+}
+/*
+ If VAR is categorical with d categories, its first category should
+ correspond to the origin in d-dimensional Euclidean space.
+ */
+static bool
+is_origin (const struct variable *var, const union value *val)
+{
+ if (cat_value_find (var, val) == 0)
+ {
+ return true;
+ }
+ return false;
+}
+
+/*
+ Return the subscript of the column of the design matrix
+ corresponding to VAL. If VAR is categorical with d categories, its
+ first category should correspond to the origin in d-dimensional
+ Euclidean space, so there is no subscript for this value.
+ */
+static size_t
+get_exact_subscript (const struct design_matrix *dm, const struct variable *var,
+ const union value *val)