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*/