1 /*
2  *  gretl -- Gnu Regression, Econometrics and Time-series Library
3  *  Copyright (C) 2001 Allin Cottrell and Riccardo "Jack" Lucchetti
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef GENMAIN_H
21 #define GENMAIN_H
22 
23 #include "gretl_matrix.h"
24 
25 typedef enum {
26     R_NOBS = 1,   /* number of observations in current sample range */
27     R_NVARS,      /* number of variables in dataset (including the constant) */
28     R_PD,         /* periodicity of dataset */
29     R_T1,         /* start of current sample range */
30     R_T2,         /* end of current sample range */
31     R_TMAX,       /* maximum value for t2 */
32     R_DATATYPE,   /* dataset structure (x-section, time-series, panel) */
33     R_WINDOWS,    /* running on MS Windows (1) or not (0) */
34     R_VERSION,    /* gretl version number */
35     R_ERRNO,      /* internal gretl error code */
36     R_SEED,       /* RNG seed */
37     R_HUGE,       /* conventional "huge" number, like eg 1.0e100 */
38     R_DSET_MAX,   /* separator */
39     R_TEST_LNL,   /* log-likelihood from last test (if applicable) */
40     R_STOPWATCH,  /* stopwatch */
41     R_TEST_BRK,   /* obs at which break occurs (QLR test) */
42     R_LOGLEVEL,   /* current loglevel for errors/warnings/etc */
43     R_LOGSTAMP,   /* logger shows timestamp? (0/1) */
44     R_SCALAR_MAX, /* separator: scalars vs series */
45     R_INDEX,      /* consecutive observations index */
46     R_PUNIT,      /* 1-based panel unit index */
47     R_OBSMAJ,     /* major component of observation (e.g. year) */
48     R_OBSMIN,     /* minor component of observation (e.g. quarter, month) */
49     R_OBSMIC,     /* micro component of observation (e.g. day) */
50     R_DATES,      /* ISO 8601 "basic" dates series */
51     R_SERIES_MAX, /* separator: series vs variants */
52     R_TEST_STAT,  /* last test statistic(s) (scalar or matrix) */
53     R_TEST_PVAL,  /* last test p-value(s) (scalar or matrix) */
54     R_NOW,        /* current date/time (matrix) */
55     R_RESULT,     /* result of a "result-compatible" command */
56     R_PNGFONT,    /* name of font selected for plots */
57     R_MAPFILE,    /* name of current map file, if any */
58     R_MAP,        /* current map (if any) as bundle */
59     R_MAX
60 } RetrievalIndex;
61 
62 /**
63  * ModelDataIndex:
64  *
65  * Symbolic names for variables that can be retrieved
66  * from gretl models.
67  */
68 
69 typedef enum {
70     M_ESS = R_MAX + 1, /* error sum of squares */
71     M_T,          /* observations used */
72     M_RSQ,        /* R-squared */
73     M_SIGMA,      /* standard error of residuals */
74     M_DF,         /* degrees of freedom */
75     M_NCOEFF,     /* total number of estimated coefficients */
76     M_LNL,        /* log-likelihood */
77     M_GMMCRIT,    /* GMM criterion */
78     M_AIC,        /* Akaike info criterion */
79     M_BIC,        /* Bayesian info criterion */
80     M_HQC,        /* Hannan-Quinn criterion */
81     M_TRSQ,       /* T * R-squared, last model */
82     M_DW,         /* Durbin-Watson statistic */
83     M_DWPVAL,     /* Durbin-Watson p-value, last model */
84     M_FSTT,       /* overall F-statistic, last model */
85     M_CHISQ,      /* overall chi-square stat, last model */
86     M_DIAGTEST,   /* system test for diagonal covariance matrix */
87     M_DIAGPVAL,   /* p-value for the above */
88     M_SCALAR_MAX, /*** SEPARATOR, scalars/series ***/
89     M_UHAT,       /* residuals */
90     M_YHAT,       /* fitted values */
91     M_LLT,        /* per-observation loglikelihood */
92     M_AHAT,       /* individual effects in panel model */
93     M_H,          /* GARCH predicted variances */
94     M_SAMPLE,     /* observations used in estimation */
95     M_UHAT2,      /* squared residuals */
96     M_SERIES_MAX, /*** SEPARATOR, series/matrices ***/
97     M_COEFF,      /* parameter estimates */
98     M_SE,         /* parameter standard errors */
99     M_VCV,        /* parameter covariance matrix */
100     M_RHO,        /* autoregressive coefficients */
101     M_COMPAN,     /* VAR companion matrix */
102     M_XTXINV,     /* VARs, VECMs: X'X^{-1} */
103     M_VECG,       /* VECMs: the Gamma matrices */
104     M_EVALS,      /* VECMs: eigenvalues */
105     M_JALPHA,     /* Johansen's alpha */
106     M_JBETA,      /* Johansen's beta */
107     M_JVBETA,     /* Covariance matrix for Johansen's normalized beta */
108     M_JS00,       /* VECM residual covariance matrix (1st differences) */
109     M_JS11,       /* VECM residual covariance matrix (levels) */
110     M_JS01,       /* VECM residual cross-product matrix */
111     M_HAUSMAN,    /* Hausman test after tsls or fixed effects */
112     M_SARGAN,     /* Sargan over-identification test after tsls */
113     M_SYSGAM,     /* Parameter matrix Gamma (simultaneous systems) */
114     M_SYSA,       /* Parameter matrix A (simultaneous systems) */
115     M_SYSB,       /* Parameter matrix B (simultaneous systems) */
116     M_FCAST,      /* last forecast generated via fcast command */
117     M_FCSE,       /* standard errors associated with M_FCAST */
118     M_COEFF_CI,   /* (asymmetric) confidence intervals for coeffs */
119     M_EHAT,       /* ARMA: vector of estimated innovations */
120     M_PMANTEAU,   /* VAR portmanteau test plus 's' value */
121     M_MATRIX_MAX, /*** SEPARATOR, end of matrices ***/
122     M_EC,         /* VECM error-correction terms */
123     M_VMA,        /* VARs, VECMs: vector moving average representation */
124     M_FEVD,       /* VAR variance decomposition */
125     M_MNLPROBS,   /* case probabilities for multinomial logit */
126     M_MBUILD_MAX, /*** SEPARATOR, end of matrix-builders ***/
127     M_XLIST,      /* list of regressors */
128     M_YLIST,      /* list of endogenous variables */
129     M_LIST_MAX,   /*** SEPARATOR, end of lists ***/
130     M_COMMAND,    /* model command word */
131     M_DEPVAR,     /* name of dependent variable */
132     M_PARNAMES,   /* array of parameter names */
133     M_MAX         /* sentinel */
134 } ModelDataIndex;
135 
136 typedef enum {
137     B_MODEL = M_MAX + 1, /* last model as bundle */
138     B_SYSTEM,            /* last VAR/VECM/system as bundle */
139     B_SYSINFO            /* system information */
140 } BundleDataIndex;
141 
142 #define model_data_scalar(i) (i > R_MAX && i < M_SCALAR_MAX)
143 #define model_data_series(i) (i > M_SCALAR_MAX && i < M_SERIES_MAX)
144 #define model_data_matrix(i) (i > M_SERIES_MAX && i < M_MATRIX_MAX)
145 #define model_data_matrix_builder(i) (i > M_MATRIX_MAX && i < M_MBUILD_MAX)
146 #define model_data_list(i)   (i > M_MBUILD_MAX && i < M_LIST_MAX)
147 #define model_data_string(i) (i > M_LIST_MAX && i < M_PARNAMES)
148 #define model_data_array(i) (i == M_PARNAMES)
149 
150 typedef struct parser_ GENERATOR;
151 
152 int generate (const char *line, DATASET *dset,
153 	      GretlType gtype, gretlopt opt,
154 	      PRN *prn);
155 
156 GENERATOR *genr_compile (const char *s, DATASET *dset,
157 			 GretlType gtype, gretlopt opt,
158 			 PRN *prn, int *err);
159 
160 int execute_genr (GENERATOR *genr, DATASET *dset, PRN *prn);
161 
162 void destroy_genr (GENERATOR *genr);
163 
164 GretlType genr_get_output_type (const GENERATOR *genr);
165 
166 int genr_get_output_varnum (const GENERATOR *genr);
167 
168 double genr_get_output_scalar (const GENERATOR *genr);
169 
170 GretlType genr_get_last_output_type (void);
171 
172 gretl_matrix *genr_get_output_matrix (GENERATOR *genr);
173 
174 int series_index (const DATASET *dset, const char *varname);
175 
176 int series_greatest_index (const DATASET *dset, const char *varname);
177 
178 int current_series_index (const DATASET *dset, const char *vname);
179 
180 int extract_varname (char *targ, const char *src, int *len);
181 
182 int genr_fit_resid (const MODEL *pmod, DATASET *dset,
183 		    ModelDataIndex idx);
184 
185 double evaluate_scalar_genr (GENERATOR *genr, DATASET *dset,
186 			     PRN *prn, int *err);
187 
188 double evaluate_if_cond (GENERATOR *genr, DATASET *dset,
189 			 PRN *prn, int *err);
190 
191 double generate_scalar (const char *s, DATASET *dset, int *err);
192 
193 double generate_boolean (const char *s, DATASET *dset,
194 			 PRN *prn, int *err);
195 
196 int generate_int (const char *s, DATASET *dset, int *err);
197 
198 int generate_void (const char *s, DATASET *dset, PRN *prn);
199 
200 double *generate_series (const char *s, DATASET *dset, PRN *prn,
201 			 int *err);
202 
203 gretl_matrix *generate_matrix (const char *s, DATASET *dset,
204 			       int *err);
205 
206 char *generate_string (const char *s, DATASET *dset, int *err);
207 
208 int *generate_list (const char *s, DATASET *dset, int *err);
209 
210 int gretl_is_series (const char *name, const DATASET *dset);
211 
212 int gretl_reserved_word (const char *str);
213 
214 int genr_special_word (const char *s);
215 
216 int genr_function_word (const char *s);
217 
218 int genr_no_assign (const GENERATOR *p);
219 
220 int genr_is_autoregressive (const GENERATOR *p);
221 
222 void genr_set_na_check (GENERATOR *genr);
223 
224 void genr_unset_na_check (GENERATOR *genr);
225 
226 void genr_reset_uvars (GENERATOR *genr);
227 
228 int function_from_string (const char *s);
229 
230 int function_lookup (const char *s);
231 
232 int is_function_alias (const char *s);
233 
234 int const_lookup (const char *s);
235 
236 double get_const_by_name (const char *name, int *err);
237 
238 const char *gretl_function_complete (const char *s);
239 
240 void gretl_function_hash_cleanup (void);
241 
242 void set_mpi_rank_and_size (int rank, int size);
243 
244 #endif /* GENMAIN_H */
245 
246