static int model_add_minfo_array (MODEL *pmod, midas_info *minfo, int nmidas) { gretl_array *A; int err = 0; A = gretl_array_new(GRETL_TYPE_BUNDLES, nmidas, &err); if (A != NULL) { midas_info *m; gretl_bundle *b; int i; for (i=0; i<nmidas && !err; i++) { b = gretl_bundle_new(); if (b == NULL) { err = E_ALLOC; } else { m = &minfo[i]; gretl_bundle_set_string(b, "lname", m->lnam0); gretl_bundle_set_string(b, "mname", m->mname); gretl_bundle_set_int(b, "prelag", m->prelag); gretl_bundle_set_int(b, "minlag", m->minlag); gretl_bundle_set_int(b, "maxlag", m->maxlag); gretl_bundle_set_int(b, "type", m->type); gretl_bundle_set_int(b, "nparm", m->nparm); err = gretl_array_set_bundle(A, i, b, 0); } } if (err) { gretl_array_destroy(A); } else { gretl_model_set_array_as_data(pmod, "midas_info", A); } } return err; }
gretl_bundle *get_sysinfo_bundle (int *err) { if (sysinfo_bundle == NULL) { gretl_bundle *b = gretl_bundle_new(); if (b == NULL) { *err = E_ALLOC; } else { int ival = 0; #if HAVE_MPI ival = check_for_mpiexec(); #endif gretl_bundle_set_scalar(b, "mpi", (double) ival); ival = gretl_max_mpi_processes(); gretl_bundle_set_scalar(b, "mpimax", (double) ival); ival = gretl_n_processors(); gretl_bundle_set_scalar(b, "nproc", (double) ival); ival = 0; #ifdef _OPENMP ival = 1; #endif gretl_bundle_set_scalar(b, "omp", (double) ival); ival = sizeof(void*) == 8 ? 64 : 32; gretl_bundle_set_scalar(b, "wordlen", (double) ival); gretl_bundle_set_scalar(b, "omp_num_threads", get_omp_n_threads()); #if defined(G_OS_WIN32) gretl_bundle_set_string(b, "os", "windows"); #elif defined(OS_OSX) gretl_bundle_set_string(b, "os", "osx"); #elif defined(linux) gretl_bundle_set_string(b, "os", "linux"); #else gretl_bundle_set_string(b, "os", "other"); #endif gretl_bundle_set_string(b, "hostname", g_get_host_name()); gretl_bundle_set_string(b, "blas", blas_variant_string()); } sysinfo_bundle = b; } return sysinfo_bundle; }
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; }