- const struct var_params *vp = &cat->vp[v];
- const struct hmap *m = &vp->map;
- // size_t width = var_get_width (vp->var);
- struct hmap_node *node ;
- int x;
-
- printf ("\n%s (%d) CC=%g:\n", var_get_name (vp->var), vp->base_subscript, vp->cc);
-
- assert (vp->reverse_value_map);
-
- printf ("Reverse map\n");
- for (x = 0 ; x < vp->n_cats; ++x)
- {
- struct string s;
- const struct value_node *vn = vp->reverse_value_map[x];
- ds_init_empty (&s);
- var_append_value_name (vp->var, &vn->value, &s);
- printf ("Value for %d is %s\n", x, ds_cstr(&s));
- ds_destroy (&s);
- }
-
- printf ("\nForward map\n");
- for (node = hmap_first (m); node; node = hmap_next (m, node))
- {
- struct string s;
- ds_init_empty (&s);
- const struct value_node *vn = HMAP_DATA (node, struct value_node, node);
- var_append_value_name (vp->var, &vn->value, &s);
- printf ("Value: %s; Index %d; CC %g\n",
- ds_cstr (&s),
- vn->subscript, vn->cc);
- ds_destroy (&s);
- }
+ int i;
+
+ printf ("df to interaction map:\n");
+ for (i = 0; i < cat->df_sum; ++i)
+ printf (" %d", cat->df_to_iact[i]);
+ printf ("\n");
+
+ printf ("Category to interaction map:\n");
+ for (i = 0; i < cat->n_cats_total; ++i)
+ printf (" %d", cat->cat_to_iact[i]);
+ printf ("\n");
+
+ printf ("Number of interactions %zu\n", cat->n_iap);
+ for (i = 0 ; i < cat->n_iap; ++i)
+ {
+ int v;
+ struct string str;
+ const struct interact_params *iap = &cat->iap[i];
+ const struct interaction *iact = iap->iact;
+
+ ds_init_empty (&str);
+ interaction_to_string (iact, &str);
+
+ printf ("\nInteraction: \"%s\" (number of categories: %d); ", ds_cstr (&str), iap->n_cats);
+ ds_destroy (&str);
+ printf ("Base index (df/categories): %d/%d\n", iap->base_df, iap->base_cats);
+
+ printf ("\t(");
+ for (v = 0; v < hmap_count (&iap->ivmap); ++v)
+ {
+ int vv;
+ const struct interaction_value *iv = iap->ivs[v];
+
+ if (v > 0) printf (" ");
+ printf ("{");
+ for (vv = 0; vv < iact->n_vars; ++vv)
+ {
+ const struct variable *var = iact->vars[vv];
+ const union value *val = case_data (iv->ccase, var);
+ struct variable_node *vn = iap->varnodes[vv];
+ const int width = var_get_width (var);
+ unsigned int valhash = value_hash (val, width, 0);
+ struct value_node *valn = lookup_value (&vn->valmap, val, valhash, width);
+
+ assert (vn->var == var);
+
+ printf ("%.*g(%d)", DBL_DIG + 1, val->f, valn->index);
+ if (vv < iact->n_vars - 1)
+ printf (", ");
+ }
+ printf ("}");
+ }
+ printf (")\n");
+ }