File indexing completed on 2024-05-12 03:47:45

0001 /*
0002     File                 : functions.h
0003     Project              : LabPlot
0004     Description          : definition of functions
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2014 Alexander Semke <alexander.semke@web.de>
0007     SPDX-FileCopyrightText: 2014-2021 Stefan Gerlach <stefan.gerlach@uni.kn>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #ifndef FUNCTIONS_H
0012 #define FUNCTIONS_H
0013 
0014 #include "parserFunctionTypes.h"
0015 #include <QString>
0016 #include <functional>
0017 #include <gsl/gsl_version.h>
0018 #include <variant>
0019 
0020 enum class FunctionGroups;
0021 
0022 struct funs {
0023     std::function<QString(void)> description;
0024     const char* name;
0025     std::variant<func_t, func_t1, func_t2, func_t3, func_t4, func_t5, func_tPayload, func_t1Payload, func_t2Payload, func_t3Payload, func_t4Payload> fnct;
0026     int argc;
0027     std::function<QString(int)> parameterFunction; // can be also a nullptr. Check needed!
0028     FunctionGroups group;
0029 };
0030 
0031 struct funs0Payload {
0032     const char* name;
0033     func_tPayload fnct;
0034 };
0035 
0036 struct funs1Payload {
0037     const char* name;
0038     func_t1Payload fnct;
0039 };
0040 
0041 struct funs2Payload {
0042     const char* name;
0043     func_t2Payload fnct;
0044 };
0045 
0046 struct funs3Payload {
0047     const char* name;
0048     func_t3Payload fnct;
0049 };
0050 
0051 struct funs4Payload {
0052     const char* name;
0053     func_t4Payload fnct;
0054 };
0055 
0056 extern struct funs _functions[];
0057 extern const int _number_functions;
0058 extern struct funs _special_functions[];
0059 extern const int _number_specialfunctions;
0060 
0061 enum class FunctionGroups : int {
0062     StandardMathematicalFunctions,
0063     ComparisonFunctions,
0064     LogicalFunctions,
0065     ColumnStatistics,
0066     MovingStatistics,
0067     AiryFunctionsAndDerivatives,
0068     BesselFunctions,
0069     ClausenFunctions,
0070     CoulombFunctions,
0071     DawsonFunction,
0072     DebyeFunctions,
0073     Dilogarithm,
0074     EllipticIntegrals,
0075     ErrorFunctions,
0076     ExponentialFunctions,
0077     ExponentialIntegrals,
0078     FermiDiracFunction,
0079     GammaAndBetaFunctions,
0080     GegenbauerFunctions,
0081 #if (GSL_MAJOR_VERSION > 2) || (GSL_MAJOR_VERSION == 2) && (GSL_MINOR_VERSION >= 4)
0082     HermitePolynomialsAndFunctions,
0083 #endif
0084     HypergeometricFunctions,
0085     LaguerreFunctions,
0086     LambertWFunctions,
0087     LegendreFunctionsAndSphericalHarmonics,
0088     LogarithmAndRelatedFunctions,
0089 #if (GSL_MAJOR_VERSION >= 2)
0090     MathieuFunctions,
0091 #endif
0092     PowerFunction,
0093     PsiDigammaFunction,
0094     SynchrotronFunctions,
0095     TransportFunctions,
0096     TrigonometricFunctions,
0097     ZetaFunctions,
0098     RandomNumberGenerator,
0099     GaussianDistribution,
0100     ExponentialDistribution,
0101     LaplaceDistribution,
0102     ExponentialPowerDistribution,
0103     CauchyDistribution,
0104     RayleighDistribution,
0105     LandauDistribution,
0106     GammaDistribution,
0107     FlatUniformDistribution,
0108     LognormalDistribution,
0109     ChisquaredDistribution,
0110     Fdistribution,
0111     Tdistribution,
0112     BetaDistribution,
0113     LogisticDistribution,
0114     ParetoDistribution,
0115     WeibullDistribution,
0116     GumbelDistribution,
0117     PoissonDistribution,
0118     BernoulliDistribution,
0119     BinomialDistribution,
0120     PascalDistribution,
0121     GeometricDistribution,
0122     HypergeometricDistribution,
0123     LogarithmicDistribution,
0124     // Not implemented
0125     // i18n("Coupling Coefficients")
0126     // i18n("Elementary Operations")
0127     // i18n("Elliptic Functions (Jacobi)")
0128     //---------------
0129     END
0130 };
0131 
0132 QString FunctionGroupsToString(FunctionGroups group);
0133 
0134 extern const char* colfun_size;
0135 extern const char* colfun_min;
0136 extern const char* colfun_max;
0137 extern const char* colfun_mean;
0138 extern const char* colfun_median;
0139 extern const char* colfun_stdev;
0140 extern const char* colfun_var;
0141 extern const char* colfun_gm;
0142 extern const char* colfun_hm;
0143 extern const char* colfun_chm;
0144 extern const char* colfun_mode;
0145 extern const char* colfun_quartile1;
0146 extern const char* colfun_quartile3;
0147 extern const char* colfun_iqr;
0148 extern const char* colfun_percentile1;
0149 extern const char* colfun_percentile5;
0150 extern const char* colfun_percentile10;
0151 extern const char* colfun_percentile90;
0152 extern const char* colfun_percentile95;
0153 extern const char* colfun_percentile99;
0154 extern const char* colfun_trimean;
0155 extern const char* colfun_meandev;
0156 extern const char* colfun_meandevmedian;
0157 extern const char* colfun_mediandev;
0158 extern const char* colfun_skew;
0159 extern const char* colfun_kurt;
0160 extern const char* colfun_entropy;
0161 extern const char* colfun_quantile;
0162 extern const char* colfun_percentile;
0163 
0164 extern const char* specialfun_cell;
0165 extern const char* specialfun_ma;
0166 extern const char* specialfun_mr;
0167 extern const char* specialfun_smmin;
0168 extern const char* specialfun_smmax;
0169 extern const char* specialfun_sma;
0170 extern const char* specialfun_smr;
0171 
0172 double andFunction(const double v1, const double v2);
0173 double orFunction(const double v1, const double v2);
0174 double notFunction(const double v);
0175 double greaterThan(const double v1, const double v2);
0176 double greaterEqualThan(const double v1, const double v2);
0177 double lessThan(const double v1, const double v2);
0178 double lessEqualThan(const double v1, const double v2);
0179 
0180 #endif /*FUNCTIONS_H*/