gretl_bundle *bundle_from_model (MODEL *pmod, DATASET *dset, int *err) { gretl_bundle *b = NULL; gretl_matrix *m; double *x; double val; int *list; const char *s; const char *key; int i, t, berr; if (pmod == NULL) { /* get the "last model" */ GretlObjType type = 0; void *p = get_last_model(&type); if (p == NULL || type != GRETL_OBJ_EQN) { *err = E_DATA; return NULL; } else { pmod = p; } } x = malloc(dset->n * sizeof *x); if (x == NULL) { *err = E_ALLOC; return NULL; } b = gretl_bundle_new(); if (b == NULL) { free(x); *err = E_ALLOC; return NULL; } for (i=M_ESS; i<M_SCALAR_MAX && !*err; i++) { berr = 0; val = gretl_model_get_scalar(pmod, i, dset, &berr); if (!berr) { key = mvarname(i) + 1; *err = gretl_bundle_set_scalar(b, key, val); } } for (i=M_SCALAR_MAX+1; i<M_SERIES_MAX && !*err; i++) { for (t=0; t<dset->n; t++) { x[t] = NADBL; } berr = gretl_model_get_series(x, pmod, dset, i); if (!berr) { key = mvarname(i) + 1; *err = gretl_bundle_set_series(b, key, x, dset->n); } } for (i=M_SERIES_MAX+1; i<M_MATRIX_MAX && !*err; i++) { berr = 0; m = gretl_model_get_matrix(pmod, i, &berr); if (!berr) { key = mvarname(i) + 1; *err = gretl_bundle_donate_data(b, key, m, GRETL_TYPE_MATRIX, 0); } } for (i=M_MBUILD_MAX+1; i<M_LIST_MAX && !*err; i++) { list = NULL; if (i == M_XLIST) { list = gretl_model_get_x_list(pmod); } else if (i == M_YLIST) { list = gretl_model_get_y_list(pmod); } if (list != NULL) { /* convert list to matrix for bundling */ m = matrix_from_list(list); if (m != NULL) { key = mvarname(i) + 1; *err = gretl_bundle_donate_data(b, key, m, GRETL_TYPE_MATRIX, 0); } free(list); } } for (i=M_LIST_MAX+1; i<M_STR_MAX && !*err; i++) { s = NULL; if (i == M_DEPVAR) { s = gretl_model_get_depvar_name(pmod, dset); } else if (i == M_COMMAND) { s = gretl_command_word(pmod->ci); } if (s != NULL && *s != '\0') { key = mvarname(i) + 1; *err = gretl_bundle_set_string(b, key, s); } } free(x); /* don't return a broken bundle */ if (*err && b != NULL) { gretl_bundle_destroy(b); b = NULL; } return b; }
const char *getsymb (int t, const parser *p) { if ((t > F1_MIN && t < F1_MAX) || (t > F1_MAX && t < F2_MAX) || (t > F2_MAX && t < FN_MAX)) { return funname(t); } if (t == EOT) { return ""; } /* yes, well */ if (t == OBS || t == DOBS) { return "OBS"; } else if (t == MSL) { return "MSL"; } else if (t == DMSL) { return "DMSL"; } else if (t == DMSTR) { return "DMSTR"; } else if (t == MSL2) { return "MSL2"; } else if (t == MSPEC) { return "MSPEC"; } else if (t == SUBSL) { return "SUBSL"; } else if (t == MDEF) { return "MDEF"; } else if (t == FARGS) { return "FARGS"; } else if (t == LIST || t == ULIST || t == WLIST) { return "LIST"; } else if (t == OVAR) { return "OVAR"; } else if (t == USTR) { return "USTR"; } else if (t == EMPTY) { return "EMPTY"; } else if (t == LISTVAR) { return "LISTVAR"; } else if (t == BOBJ) { return "BOBJ"; } else if (t == BMEMB) { return "BMEMB"; } else if (t == LISTELEM) { return "LISTELEM"; } else if (t == VEC) { return "VEC"; } else if (t == MAT) { return "MAT"; } else if (t == EROOT) { return "EROOT"; } else if (t == UNDEF) { return "UNDEF"; } else if (t == NUM) { return "NUM"; } if (p != NULL) { if (t == UVEC) { return p->dset->varname[p->idnum]; } else if (t == UNUM) { return p->idstr; } else if (t == BUNDLE) { return p->idstr; } else if (t == UMAT || t == UOBJ) { return p->idstr; } else if (t == CON) { return constname(p->idnum); } else if (t == DUM) { return dumname(p->idnum); } else if (t == DVAR) { return dvarname(p->idnum); } else if (t == MVAR) { return mvarname(p->idnum); } else if (t == UFUN || t == RFUN) { return p->idstr; } else if (t == STR) { return p->idstr; } } else { if (t == UVEC) { return "UVEC"; } else if (t == UNUM) { return "UNUM"; } else if (t == BUNDLE) { return "BUNDLE"; } else if (t == UMAT) { return "UMAT"; } else if (t == UOBJ) { return "UOBJ"; } else if (t == CON) { return "CON"; } else if (t == DUM) { return "DUM"; } else if (t == DVAR) { return "DVAR"; } else if (t == MVAR) { return "MVAR"; } else if (t == UFUN) { return "UFUN"; } else if (t == RFUN) { return "RFUN"; } else if (t == STR) { return "STR"; } } switch (t) { case B_ASN: return "="; case B_ADD: case U_POS: return "+"; case B_SUB: case U_NEG: return "-"; case B_MUL: return "*"; case B_TRMUL: return "'"; case B_DIV: return "/"; case B_LDIV: return "\\"; case B_MOD: return "%"; case B_POW: return "^"; case B_EQ: return "="; case B_NEQ: return "!="; case B_GT: return ">"; case B_LT: return "<"; case B_GTE: return ">="; case B_LTE: return "<="; case B_AND: return "&&"; case B_RANGE: return " to "; case U_ADDR: return "&"; case B_OR: return "||"; case U_NOT: return "!"; case G_LPR: return "("; case G_RPR: return ")"; case G_LBR: return "["; case G_RBR: return "]"; case G_LCB: return "{"; case G_RCB: return "}"; case B_DOTMULT: return ".*"; case B_DOTDIV: return "./"; case B_DOTPOW: return ".^"; case B_DOTADD: return ".+"; case B_DOTSUB: return ".-"; case B_DOTEQ: return ".="; case B_DOTGT: return ".>"; case B_DOTLT: return ".<"; case B_DOTGTE: return ".>="; case B_DOTLTE: return ".<="; case B_KRON: return "**"; case B_HCAT: return "~"; case B_VCAT: return "|"; case B_LCAT: return "LCAT"; case P_COM: return ","; case P_DOT: return "."; case P_SEMI: return ";"; case P_COL: return ":"; case QUERY: return "query"; case LAG: return "lag"; default: break; } return "unknown"; }