- "a<b", "a>b", "a<=b", "a>=b".
*/
-#define MATRIX_FUNCTIONS \
- F(ABS, "ABS", m_e, NULL) \
- F(ALL, "ALL", d_m, NULL) \
- F(ANY, "ANY", d_m, NULL) \
- F(ARSIN, "ARSIN", m_e, "a[-1,1]") \
- F(ARTAN, "ARTAN", m_e, NULL) \
- F(BLOCK, "BLOCK", m_any, NULL) \
- F(CHOL, "CHOL", m_m, NULL) \
- F(CMIN, "CMIN", m_m, NULL) \
- F(CMAX, "CMAX", m_m, NULL) \
- F(COS, "COS", m_e, NULL) \
- F(CSSQ, "CSSQ", m_m, NULL) \
- F(CSUM, "CSUM", m_m, NULL) \
- F(DESIGN, "DESIGN", m_m, NULL) \
- F(DET, "DET", d_m, NULL) \
- F(DIAG, "DIAG", m_m, NULL) \
- F(EVAL, "EVAL", m_m, NULL) \
- F(EXP, "EXP", m_e, NULL) \
- F(GINV, "GINV", m_m, NULL) \
- F(GRADE, "GRADE", m_m, NULL) \
- F(GSCH, "GSCH", m_m, NULL) \
- F(IDENT, "IDENT", IDENT, NULL) \
- F(INV, "INV", m_m, NULL) \
- F(KRONEKER, "KRONEKER", m_mm, NULL) \
- F(LG10, "LG10", m_e, "a>0") \
- F(LN, "LN", m_e, "a>0") \
- F(MAGIC, "MAGIC", m_d, "ai>=3") \
- F(MAKE, "MAKE", m_ddd, NULL) \
- F(MDIAG, "MDIAG", m_v, NULL) \
- F(MMAX, "MMAX", d_m, NULL) \
- F(MMIN, "MMIN", d_m, NULL) \
- F(MOD, "MOD", m_md, NULL) \
- F(MSSQ, "MSSQ", d_m, NULL) \
- F(MSUM, "MSUM", d_m, NULL) \
- F(NCOL, "NCOL", d_m, NULL) \
- F(NROW, "NROW", d_m, NULL) \
- F(RANK, "RANK", d_m, NULL) \
- F(RESHAPE, "RESHAPE", m_mdd, NULL) \
- F(RMAX, "RMAX", m_m, NULL) \
- F(RMIN, "RMIN", m_m, NULL) \
- F(RND, "RND", m_e, NULL) \
- F(RNKORDER, "RNKORDER", m_m, NULL) \
- F(RSSQ, "RSSQ", m_m, NULL) \
- F(RSUM, "RSUM", m_m, NULL) \
- F(SIN, "SIN", m_e, NULL) \
- F(SOLVE, "SOLVE", m_mm, NULL) \
- F(SQRT, "SQRT", m_e, "a>=0") \
- F(SSCP, "SSCP", m_m, NULL) \
- F(SVAL, "SVAL", m_m, NULL) \
- F(SWEEP, "SWEEP", m_md, NULL) \
- F(T, "T", m_m, NULL) \
- F(TRACE, "TRACE", d_m, NULL) \
- F(TRANSPOS, "TRANSPOS", m_m, NULL) \
- F(TRUNC, "TRUNC", m_e, NULL) \
- F(UNIFORM, "UNIFORM", m_dd, "ai>=0 bi>=0") \
- F(PDF_BETA, "PDF.BETA", m_edd, "a[0,1] b>0 c>0") \
- F(CDF_BETA, "CDF.BETA", m_edd, "a[0,1] b>0 c>0") \
- F(IDF_BETA, "IDF.BETA", m_edd, "a[0,1] b>0 c>0") \
- F(RV_BETA, "RV.BETA", d_dd, "a>0 b>0") \
- F(NCDF_BETA, "NCDF.BETA", m_eddd, "a>=0 b>0 c>0 d>0") \
- F(NPDF_BETA, "NCDF.BETA", m_eddd, "a>=0 b>0 c>0 d>0") \
- F(CDF_BVNOR, "CDF.BVNOR", m_eed, "c[-1,1]") \
- F(PDF_BVNOR, "PDF.BVNOR", m_eed, "c[-1,1]") \
- F(CDF_CAUCHY, "CDF.CAUCHY", m_edd, "c>0") \
- F(IDF_CAUCHY, "IDF.CAUCHY", m_edd, "a(0,1) c>0") \
- F(PDF_CAUCHY, "PDF.CAUCHY", m_edd, "c>0") \
- F(RV_CAUCHY, "RV.CAUCHY", d_dd, "b>0") \
- F(CDF_CHISQ, "CDF.CHISQ", m_ed, "a>=0 b>0") \
- F(CHICDF, "CHICDF", m_ed, "a>=0 b>0") \
- F(IDF_CHISQ, "IDF.CHISQ", m_ed, "a[0,1) b>0") \
- F(PDF_CHISQ, "PDF.CHISQ", m_ed, "a>=0 b>0") \
- F(RV_CHISQ, "RV.CHISQ", d_d, "a>0") \
- F(SIG_CHISQ, "SIG.CHISQ", m_ed, "a>=0 b>0") \
- F(CDF_EXP, "CDF.EXP", m_ed, "a>=0 b>=0") \
- F(IDF_EXP, "IDF.EXP", m_ed, "a[0,1) b>0") \
- F(PDF_EXP, "PDF.EXP", m_ed, "a>=0 b>0") \
- F(RV_EXP, "RV.EXP", d_d, "a>0") \
- F(PDF_XPOWER, "PDF.XPOWER", m_edd, "b>0 c>=0") \
- F(RV_XPOWER, "RV.XPOWER", d_dd, "a>0 c>=0") \
- F(CDF_F, "CDF.F", m_edd, "a>=0 b>0 c>0") \
- F(FCDF, "FCDF", m_edd, "a>=0 b>0 c>0") \
- F(IDF_F, "IDF.F", m_edd, "a[0,1) b>0 c>0") \
- F(PDF_F, "PDF.F", m_edd, "a>=0 b>0 c>0") \
- F(RV_F, "RV.F", d_dd, "a>0 b>0") \
- F(SIG_F, "SIG.F", m_edd, "a>=0 b>0 c>0") \
- F(CDF_GAMMA, "CDF.GAMMA", m_edd, "a>=0 b>0 c>0") \
- F(IDF_GAMMA, "IDF.GAMMA", m_edd, "a[0,1] b>0 c>0") \
- F(PDF_GAMMA, "PDF.GAMMA", m_edd, "a>=0 b>0 c>0") \
- F(RV_GAMMA, "RV.GAMMA", d_dd, "a>0 b>0") \
- F(PDF_LANDAU, "PDF.LANDAU", m_e, NULL) \
- F(RV_LANDAU, "RV.LANDAU", d_none, NULL) \
- F(CDF_LAPLACE, "CDF.LAPLACE", m_edd, "c>0") \
- F(IDF_LAPLACE, "IDF.LAPLACE", m_edd, "a(0,1) c>0") \
- F(PDF_LAPLACE, "PDF.LAPLACE", m_edd, "c>0") \
- F(RV_LAPLACE, "RV.LAPLACE", d_dd, "b>0") \
- F(RV_LEVY, "RV.LEVY", d_dd, "b(0,2]") \
- F(RV_LVSKEW, "RV.LVSKEW", d_ddd, "b(0,2] c[-1,1]") \
- F(CDF_LOGISTIC, "CDF.LOGISTIC", m_edd, "c>0") \
- F(IDF_LOGISTIC, "IDF.LOGISTIC", m_edd, "a(0,1) c>0") \
- F(PDF_LOGISTIC, "PDF.LOGISTIC", m_edd, "c>0") \
- F(RV_LOGISTIC, "RV.LOGISTIC", d_dd, "b>0") \
- F(CDF_LNORMAL, "CDF.LNORMAL", m_edd, "a>=0 b>0 c>0") \
- F(IDF_LNORMAL, "IDF.LNORMAL", m_edd, "a[0,1) b>0 c>0") \
- F(PDF_LNORMAL, "PDF.LNORMAL", m_edd, "a>=0 b>0 c>0") \
- F(RV_LNORMAL, "RV.LNORMAL", d_dd, "a>0 b>0") \
- F(CDF_NORMAL, "CDF.NORMAL", m_edd, "c>0") \
- F(IDF_NORMAL, "IDF.NORMAL", m_edd, "a(0,1) c>0") \
- F(PDF_NORMAL, "PDF.NORMAL", m_edd, "c>0") \
- F(RV_NORMAL, "RV.NORMAL", d_dd, "b>0") \
- F(CDFNORM, "CDFNORM", m_e, NULL) \
- F(PROBIT, "PROBIT", m_e, "a(0,1)") \
- F(NORMAL, "NORMAL", m_e, "a>0") \
- F(PDF_NTAIL, "PDF.NTAIL", m_edd, "b>0 c>0") \
- F(RV_NTAIL, "RV.NTAIL", d_dd, "a>0 b>0") \
- F(CDF_PARETO, "CDF.PARETO", m_edd, "a>=b b>0 c>0") \
- F(IDF_PARETO, "IDF.PARETO", m_edd, "a[0,1) b>0 c>0") \
- F(PDF_PARETO, "PDF.PARETO", m_edd, "a>=b b>0 c>0") \
- F(RV_PARETO, "RV.PARETO", d_dd, "a>0 b>0") \
- F(CDF_RAYLEIGH, "CDF.RAYLEIGH", m_ed, "b>0") \
- F(IDF_RAYLEIGH, "IDF.RAYLEIGH", m_ed, "a[0,1] b>0") \
- F(PDF_RAYLEIGH, "PDF.RAYLEIGH", m_ed, "b>0") \
- F(RV_RAYLEIGH, "RV.RAYLEIGH", d_d, "a>0") \
- F(PDF_RTAIL, "PDF.RTAIL", m_edd, NULL) \
- F(RV_RTAIL, "RV.RTAIL", d_dd, NULL) \
- F(CDF_T, "CDF.T", m_ed, "b>0") \
- F(TCDF, "TCDF", m_ed, "b>0") \
- F(IDF_T, "IDF.T", m_ed, "a(0,1) b>0") \
- F(PDF_T, "PDF.T", m_ed, "b>0") \
- F(RV_T, "RV.T", d_d, "a>0") \
- F(CDF_T1G, "CDF.T1G", m_edd, NULL) \
- F(IDF_T1G, "IDF.T1G", m_edd, "a(0,1)") \
- F(PDF_T1G, "PDF.T1G", m_edd, NULL) \
- F(RV_T1G, "RV.T1G", d_dd, NULL) \
- F(CDF_T2G, "CDF.T2G", m_edd, NULL) \
- F(IDF_T2G, "IDF.T2G", m_edd, "a(0,1)") \
- F(PDF_T2G, "PDF.T2G", m_edd, NULL) \
- F(RV_T2G, "RV.T2G", d_dd, NULL) \
- F(CDF_UNIFORM, "CDF.UNIFORM", m_edd, "a<=c b<=c") \
- F(IDF_UNIFORM, "IDF.UNIFORM", m_edd, "a[0,1] b<=c") \
- F(PDF_UNIFORM, "PDF.UNIFORM", m_edd, "a<=c b<=c") \
- F(RV_UNIFORM, "RV.UNIFORM", d_dd, "a<=b") \
- F(CDF_WEIBULL, "CDF.WEIBULL", m_edd, "a>=0 b>0 c>0") \
- F(IDF_WEIBULL, "IDF.WEIBULL", m_edd, "a[0,1) b>0 c>0") \
- F(PDF_WEIBULL, "PDF.WEIBULL", m_edd, "a>=0 b>0 c>0") \
- F(RV_WEIBULL, "RV.WEIBULL", d_dd, "a>0 b>0") \
- F(CDF_BERNOULLI, "CDF.BERNOULLI", m_ed, "ai[0,1] b[0,1]") \
- F(PDF_BERNOULLI, "PDF.BERNOULLI", m_ed, "ai[0,1] b[0,1]") \
- F(RV_BERNOULLI, "RV.BERNOULLI", d_d, "a[0,1]") \
- F(CDF_BINOM, "CDF.BINOM", m_edd, "bi>0 c[0,1]") \
- F(PDF_BINOM, "PDF.BINOM", m_edd, "ai>=0<=b bi>0 c[0,1]") \
- F(RV_BINOM, "RV.BINOM", d_dd, "ai>0 b[0,1]") \
- F(CDF_GEOM, "CDF.GEOM", m_ed, "ai>=1 b[0,1]") \
- F(PDF_GEOM, "PDF.GEOM", m_ed, "ai>=1 b[0,1]") \
- F(RV_GEOM, "RV.GEOM", d_d, "a[0,1]") \
- F(CDF_HYPER, "CDF.HYPER", m_eddd, "ai>=0<=d bi>0 ci>0<=b di>0<=b") \
- F(PDF_HYPER, "PDF.HYPER", m_eddd, "ai>=0<=d bi>0 ci>0<=b di>0<=b") \
- F(RV_HYPER, "RV.HYPER", d_ddd, "ai>0 bi>0<=a ci>0<=a") \
- F(PDF_LOG, "PDF.LOG", m_ed, "a>=1 b(0,1]") \
- F(RV_LOG, "RV.LOG", d_d, "a(0,1]") \
- F(CDF_NEGBIN, "CDF.NEGBIN", m_edd, "a>=1 bi c(0,1]") \
- F(PDF_NEGBIN, "PDF.NEGBIN", m_edd, "a>=1 bi c(0,1]") \
- F(RV_NEGBIN, "RV.NEGBIN", d_dd, "ai b(0,1]") \
- F(CDF_POISSON, "CDF.POISSON", m_ed, "ai>=0 b>0") \
- F(PDF_POISSON, "PDF.POISSON", m_ed, "ai>=0 b>0") \
+#define MATRIX_FUNCTIONS \
+ F(ABS, "ABS", m_e, NULL) \
+ F(ALL, "ALL", d_m, NULL) \
+ F(ANY, "ANY", d_m, NULL) \
+ F(ARSIN, "ARSIN", m_e, "a[-1,1]") \
+ F(ARTAN, "ARTAN", m_e, NULL) \
+ F(BLOCK, "BLOCK", m_any, NULL) \
+ F(CHOL, "CHOL", m_m, NULL) \
+ F(CMIN, "CMIN", m_m, NULL) \
+ F(CMAX, "CMAX", m_m, NULL) \
+ F(COS, "COS", m_e, NULL) \
+ F(CSSQ, "CSSQ", m_m, NULL) \
+ F(CSUM, "CSUM", m_m, NULL) \
+ F(DESIGN, "DESIGN", m_m, NULL) \
+ F(DET, "DET", d_m, NULL) \
+ F(DIAG, "DIAG", m_m, NULL) \
+ F(EVAL, "EVAL", m_m, NULL) \
+ F(EXP, "EXP", m_e, NULL) \
+ F(GINV, "GINV", m_m, NULL) \
+ F(GRADE, "GRADE", m_m, NULL) \
+ F(GSCH, "GSCH", m_m, NULL) \
+ F(IDENT, "IDENT", IDENT, NULL) \
+ F(INV, "INV", m_m, NULL) \
+ F(KRONEKER, "KRONEKER", m_mm, NULL) \
+ F(LG10, "LG10", m_e, "a>0") \
+ F(LN, "LN", m_e, "a>0") \
+ F(MAGIC, "MAGIC", m_d, "ai>=3") \
+ F(MAKE, "MAKE", m_ddd, NULL) \
+ F(MDIAG, "MDIAG", m_v, NULL) \
+ F(MMAX, "MMAX", d_m, NULL) \
+ F(MMIN, "MMIN", d_m, NULL) \
+ F(MOD, "MOD", m_md, NULL) \
+ F(MSSQ, "MSSQ", d_m, NULL) \
+ F(MSUM, "MSUM", d_m, NULL) \
+ F(NCOL, "NCOL", d_m, NULL) \
+ F(NROW, "NROW", d_m, NULL) \
+ F(RANK, "RANK", d_m, NULL) \
+ F(RESHAPE, "RESHAPE", m_mdd, NULL) \
+ F(RMAX, "RMAX", m_m, NULL) \
+ F(RMIN, "RMIN", m_m, NULL) \
+ F(RND, "RND", m_e, NULL) \
+ F(RNKORDER, "RNKORDER", m_m, NULL) \
+ F(RSSQ, "RSSQ", m_m, NULL) \
+ F(RSUM, "RSUM", m_m, NULL) \
+ F(SIN, "SIN", m_e, NULL) \
+ F(SOLVE, "SOLVE", m_mm, NULL) \
+ F(SQRT, "SQRT", m_e, "a>=0") \
+ F(SSCP, "SSCP", m_m, NULL) \
+ F(SVAL, "SVAL", m_m, NULL) \
+ F(SWEEP, "SWEEP", m_md, NULL) \
+ F(T, "T", m_m, NULL) \
+ F(TRACE, "TRACE", d_m, NULL) \
+ F(TRANSPOS, "TRANSPOS", m_m, NULL) \
+ F(TRUNC, "TRUNC", m_e, NULL) \
+ F(UNIFORM, "UNIFORM", m_dd, "ai>=0 bi>=0") \
+ F(PDF_BETA, "PDF.BETA", m_edd, "a[0,1] b>0 c>0") \
+ F(CDF_BETA, "CDF.BETA", m_edd, "a[0,1] b>0 c>0") \
+ F(IDF_BETA, "IDF.BETA", m_edd, "a[0,1] b>0 c>0") \
+ F(RV_BETA, "RV.BETA", d_dd, "a>0 b>0") \
+ F(NCDF_BETA, "NCDF.BETA", m_eddd, "a>=0 b>0 c>0 d>0") \
+ F(NPDF_BETA, "NCDF.BETA", m_eddd, "a>=0 b>0 c>0 d>0") \
+ F(CDF_BVNOR, "CDF.BVNOR", m_eed, "c[-1,1]") \
+ F(PDF_BVNOR, "PDF.BVNOR", m_eed, "c[-1,1]") \
+ F(CDF_CAUCHY, "CDF.CAUCHY", m_edd, "c>0") \
+ F(IDF_CAUCHY, "IDF.CAUCHY", m_edd, "a(0,1) c>0") \
+ F(PDF_CAUCHY, "PDF.CAUCHY", m_edd, "c>0") \
+ F(RV_CAUCHY, "RV.CAUCHY", d_dd, "b>0") \
+ F(CDF_CHISQ, "CDF.CHISQ", m_ed, "a>=0 b>0") \
+ F(CHICDF, "CHICDF", m_ed, "a>=0 b>0") \
+ F(IDF_CHISQ, "IDF.CHISQ", m_ed, "a[0,1) b>0") \
+ F(PDF_CHISQ, "PDF.CHISQ", m_ed, "a>=0 b>0") \
+ F(RV_CHISQ, "RV.CHISQ", d_d, "a>0") \
+ F(SIG_CHISQ, "SIG.CHISQ", m_ed, "a>=0 b>0") \
+ F(CDF_EXP, "CDF.EXP", m_ed, "a>=0 b>=0") \
+ F(IDF_EXP, "IDF.EXP", m_ed, "a[0,1) b>0") \
+ F(PDF_EXP, "PDF.EXP", m_ed, "a>=0 b>0") \
+ F(RV_EXP, "RV.EXP", d_d, "a>0") \
+ F(PDF_XPOWER, "PDF.XPOWER", m_edd, "b>0 c>=0") \
+ F(RV_XPOWER, "RV.XPOWER", d_dd, "a>0 c>=0") \
+ F(CDF_F, "CDF.F", m_edd, "a>=0 b>0 c>0") \
+ F(FCDF, "FCDF", m_edd, "a>=0 b>0 c>0") \
+ F(IDF_F, "IDF.F", m_edd, "a[0,1) b>0 c>0") \
+ F(PDF_F, "PDF.F", m_edd, "a>=0 b>0 c>0") \
+ F(RV_F, "RV.F", d_dd, "a>0 b>0") \
+ F(SIG_F, "SIG.F", m_edd, "a>=0 b>0 c>0") \
+ F(CDF_GAMMA, "CDF.GAMMA", m_edd, "a>=0 b>0 c>0") \
+ F(IDF_GAMMA, "IDF.GAMMA", m_edd, "a[0,1] b>0 c>0") \
+ F(PDF_GAMMA, "PDF.GAMMA", m_edd, "a>=0 b>0 c>0") \
+ F(RV_GAMMA, "RV.GAMMA", d_dd, "a>0 b>0") \
+ F(PDF_LANDAU, "PDF.LANDAU", m_e, NULL) \
+ F(RV_LANDAU, "RV.LANDAU", d_none, NULL) \
+ F(CDF_LAPLACE, "CDF.LAPLACE", m_edd, "c>0") \
+ F(IDF_LAPLACE, "IDF.LAPLACE", m_edd, "a(0,1) c>0") \
+ F(PDF_LAPLACE, "PDF.LAPLACE", m_edd, "c>0") \
+ F(RV_LAPLACE, "RV.LAPLACE", d_dd, "b>0") \
+ F(RV_LEVY, "RV.LEVY", d_dd, "b(0,2]") \
+ F(RV_LVSKEW, "RV.LVSKEW", d_ddd, "b(0,2] c[-1,1]") \
+ F(CDF_LOGISTIC, "CDF.LOGISTIC", m_edd, "c>0") \
+ F(IDF_LOGISTIC, "IDF.LOGISTIC", m_edd, "a(0,1) c>0") \
+ F(PDF_LOGISTIC, "PDF.LOGISTIC", m_edd, "c>0") \
+ F(RV_LOGISTIC, "RV.LOGISTIC", d_dd, "b>0") \
+ F(CDF_LNORMAL, "CDF.LNORMAL", m_edd, "a>=0 b>0 c>0") \
+ F(IDF_LNORMAL, "IDF.LNORMAL", m_edd, "a[0,1) b>0 c>0") \
+ F(PDF_LNORMAL, "PDF.LNORMAL", m_edd, "a>=0 b>0 c>0") \
+ F(RV_LNORMAL, "RV.LNORMAL", d_dd, "a>0 b>0") \
+ F(CDF_NORMAL, "CDF.NORMAL", m_edd, "c>0") \
+ F(IDF_NORMAL, "IDF.NORMAL", m_edd, "a(0,1) c>0") \
+ F(PDF_NORMAL, "PDF.NORMAL", m_edd, "c>0") \
+ F(RV_NORMAL, "RV.NORMAL", d_dd, "b>0") \
+ F(CDFNORM, "CDFNORM", m_e, NULL) \
+ F(PROBIT, "PROBIT", m_e, "a(0,1)") \
+ F(NORMAL, "NORMAL", m_e, "a>0") \
+ F(PDF_NTAIL, "PDF.NTAIL", m_edd, "b>0 c>0") \
+ F(RV_NTAIL, "RV.NTAIL", d_dd, "a>0 b>0") \
+ F(CDF_PARETO, "CDF.PARETO", m_edd, "a>=b b>0 c>0") \
+ F(IDF_PARETO, "IDF.PARETO", m_edd, "a[0,1) b>0 c>0") \
+ F(PDF_PARETO, "PDF.PARETO", m_edd, "a>=b b>0 c>0") \
+ F(RV_PARETO, "RV.PARETO", d_dd, "a>0 b>0") \
+ F(CDF_RAYLEIGH, "CDF.RAYLEIGH", m_ed, "b>0") \
+ F(IDF_RAYLEIGH, "IDF.RAYLEIGH", m_ed, "a[0,1] b>0") \
+ F(PDF_RAYLEIGH, "PDF.RAYLEIGH", m_ed, "b>0") \
+ F(RV_RAYLEIGH, "RV.RAYLEIGH", d_d, "a>0") \
+ F(PDF_RTAIL, "PDF.RTAIL", m_edd, NULL) \
+ F(RV_RTAIL, "RV.RTAIL", d_dd, NULL) \
+ F(CDF_T, "CDF.T", m_ed, "b>0") \
+ F(TCDF, "TCDF", m_ed, "b>0") \
+ F(IDF_T, "IDF.T", m_ed, "a(0,1) b>0") \
+ F(PDF_T, "PDF.T", m_ed, "b>0") \
+ F(RV_T, "RV.T", d_d, "a>0") \
+ F(CDF_T1G, "CDF.T1G", m_edd, NULL) \
+ F(IDF_T1G, "IDF.T1G", m_edd, "a(0,1)") \
+ F(PDF_T1G, "PDF.T1G", m_edd, NULL) \
+ F(RV_T1G, "RV.T1G", d_dd, NULL) \
+ F(CDF_T2G, "CDF.T2G", m_edd, NULL) \
+ F(IDF_T2G, "IDF.T2G", m_edd, "a(0,1)") \
+ F(PDF_T2G, "PDF.T2G", m_edd, NULL) \
+ F(RV_T2G, "RV.T2G", d_dd, NULL) \
+ F(CDF_UNIFORM, "CDF.UNIFORM", m_edd, "a<=c b<=c") \
+ F(IDF_UNIFORM, "IDF.UNIFORM", m_edd, "a[0,1] b<=c") \
+ F(PDF_UNIFORM, "PDF.UNIFORM", m_edd, "a<=c b<=c") \
+ F(RV_UNIFORM, "RV.UNIFORM", d_dd, "a<=b") \
+ F(CDF_WEIBULL, "CDF.WEIBULL", m_edd, "a>=0 b>0 c>0") \
+ F(IDF_WEIBULL, "IDF.WEIBULL", m_edd, "a[0,1) b>0 c>0") \
+ F(PDF_WEIBULL, "PDF.WEIBULL", m_edd, "a>=0 b>0 c>0") \
+ F(RV_WEIBULL, "RV.WEIBULL", d_dd, "a>0 b>0") \
+ F(CDF_BERNOULLI, "CDF.BERNOULLI", m_ed, "ai[0,1] b[0,1]") \
+ F(PDF_BERNOULLI, "PDF.BERNOULLI", m_ed, "ai[0,1] b[0,1]") \
+ F(RV_BERNOULLI, "RV.BERNOULLI", d_d, "a[0,1]") \
+ F(CDF_BINOM, "CDF.BINOM", m_edd, "bi>0 c[0,1]") \
+ F(PDF_BINOM, "PDF.BINOM", m_edd, "ai>=0<=b bi>0 c[0,1]") \
+ F(RV_BINOM, "RV.BINOM", d_dd, "ai>0 b[0,1]") \
+ F(CDF_GEOM, "CDF.GEOM", m_ed, "ai>=1 b[0,1]") \
+ F(PDF_GEOM, "PDF.GEOM", m_ed, "ai>=1 b[0,1]") \
+ F(RV_GEOM, "RV.GEOM", d_d, "a[0,1]") \
+ F(CDF_HYPER, "CDF.HYPER", m_eddd, "ai>=0<=d bi>0 ci>0<=b di>0<=b") \
+ F(PDF_HYPER, "PDF.HYPER", m_eddd, "ai>=0<=d bi>0 ci>0<=b di>0<=b") \
+ F(RV_HYPER, "RV.HYPER", d_ddd, "ai>0 bi>0<=a ci>0<=a") \
+ F(PDF_LOG, "PDF.LOG", m_ed, "a>=1 b(0,1]") \
+ F(RV_LOG, "RV.LOG", d_d, "a(0,1]") \
+ F(CDF_NEGBIN, "CDF.NEGBIN", m_edd, "a>=1 bi c(0,1]") \
+ F(PDF_NEGBIN, "PDF.NEGBIN", m_edd, "a>=1 bi c(0,1]") \
+ F(RV_NEGBIN, "RV.NEGBIN", d_dd, "ai b(0,1]") \
+ F(CDF_POISSON, "CDF.POISSON", m_ed, "ai>=0 b>0") \
+ F(PDF_POISSON, "PDF.POISSON", m_ed, "ai>=0 b>0") \
F(RV_POISSON, "RV.POISSON", d_d, "a>0")
struct matrix_function_properties
struct matrix_var *variable;
struct read_file *eof;
};
+
+ struct msg_location *location;
};
static void
case MOP_EOF:
break;
}
+ msg_location_destroy (e->location);
free (e);
}
.subs = xmemdup (subs, n_subs * sizeof *subs),
.n_subs = n_subs
};
+
+ for (size_t i = 0; i < n_subs; i++)
+ msg_location_merge (&e->location, subs[i]->location);
return e;
}
if (!f)
return false;
- lex_get_n (s->lexer, 2);
-
struct matrix_expr *e = xmalloc (sizeof *e);
- *e = (struct matrix_expr) { .op = f->op, .subs = NULL };
+ *e = (struct matrix_expr) {
+ .op = f->op,
+ .location = lex_get_location (s->lexer, 0, 0)
+ };
+ lex_get_n (s->lexer, 2);
if (lex_token (s->lexer) != T_RPAREN)
{
size_t allocated_subs = 0;
do
{
+ struct msg_location *arg_location = lex_get_location (s->lexer, 0, 0);
struct matrix_expr *sub = matrix_parse_expr (s);
if (!sub)
- goto error;
+ {
+ msg_location_destroy (arg_location);
+ goto error;
+ }
+ if (!sub->location)
+ {
+ lex_extend_location (s->lexer, 0, arg_location);
+ sub->location = arg_location;
+ }
+ else
+ msg_location_destroy (arg_location);
if (e->n_subs >= allocated_subs)
e->subs = x2nrealloc (e->subs, &allocated_subs, sizeof *e->subs);
struct matrix_lvalue
{
struct matrix_var *var;
+ struct msg_location *var_location;
struct matrix_expr *indexes[2];
size_t n_indexes;
};
struct matrix_lvalue *lvalue = xzalloc (sizeof *lvalue);
if (!lex_force_id (s->lexer))
goto error;
+ lvalue->var_location = lex_get_location (s->lexer, 0, 0);
lvalue->var = matrix_var_lookup (s, lex_tokss (s->lexer));
if (lex_next_token (s->lexer, 1) == T_LPAREN)
{
gsl_matrix *dm = lvalue->var->value;
if (!dm)
{
- msg (SE, _("Undefined variable %s."), lvalue->var->name);
+ msg_at (SE, lvalue->var_location,
+ _("Undefined variable %s."), lvalue->var->name);
return false;
}
else if (dm->size1 == 0 || dm->size2 == 0)
{
- msg (SE, _("Cannot index %zu×%zu matrix."),
- dm->size1, dm->size2);
+ msg_at (SE, lvalue->var_location,
+ _("Cannot index %zu×%zu matrix."), dm->size1, dm->size2);
return false;
}
else if (lvalue->n_indexes == 1)
{
if (!is_vector (dm))
{
- msg (SE, _("Can't use vector indexing on %zu×%zu matrix %s."),
- dm->size1, dm->size2, lvalue->var->name);
+ msg_at (SE, lvalue->var_location,
+ _("Can't use vector indexing on %zu×%zu matrix %s."),
+ dm->size1, dm->size2, lvalue->var->name);
return false;
}
return matrix_lvalue_evaluate_vector (lvalue->indexes[0],