1 /* 2 3 HyPhy - Hypothesis Testing Using Phylogenies. 4 5 Copyright (C) 1997-now 6 Core Developers: 7 Sergei L Kosakovsky Pond (sergeilkp@mac.com) 8 Art FY Poon (apoon42@uwo.ca) 9 Steven Weaver (sweaver@temple.edu) 10 11 Module Developers: 12 Lance Hepler (nlhepler@gmail.com) 13 Martin Smith (martin.audacis@gmail.com) 14 15 Significant contributions from: 16 Spencer V Muse (muse@stat.ncsu.edu) 17 Simon DW Frost (sdf22@cam.ac.uk) 18 19 Permission is hereby granted, free of charge, to any person obtaining a 20 copy of this software and associated documentation files (the 21 "Software"), to deal in the Software without restriction, including 22 without limitation the rights to use, copy, modify, merge, publish, 23 distribute, sublicense, and/or sell copies of the Software, and to 24 permit persons to whom the Software is furnished to do so, subject to 25 the following conditions: 26 27 The above copyright notice and this permission notice shall be included 28 in all copies or substantial portions of the Software. 29 30 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 31 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 32 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 33 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 34 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 35 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 36 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 37 38 */ 39 40 41 #ifndef __HY_DEFINES__ 42 #define __HY_DEFINES__ 43 44 #include <math.h> 45 46 #ifndef FALSE 47 #define FALSE 0 48 #endif 49 50 #ifndef TRUE 51 #define TRUE 1 52 #endif 53 54 #ifndef nil 55 #define nil NULL 56 #endif 57 58 #ifdef __GNUC__ 59 #define _hprestrict_ __restrict 60 #else 61 #define _hprestrict_ 62 #endif 63 64 #define HY_WIDTH_OF_LONG ((long)(sizeof(long)*8)) 65 66 #define PRINTF_FORMAT_STRING "%.16g" 67 68 #define fNone 0L // default 0 bit flags 69 70 #define kNotFound (-1L) 71 72 #define kMaxDialogPrompts 10L 73 74 #define HY_UNDEFINED 0x400UL 75 #define NUMBER 0x001UL 76 #define MATRIX 0x004UL 77 #define CONTAINER 0x008UL 78 #define TREE_NODE 0x010UL 79 #define TREE 0x020UL 80 #define STRING 0x040UL 81 #define ASSOCIATIVE_LIST 0x080UL 82 #define TOPOLOGY 0x100UL 83 #define POLYNOMIAL 0x200UL 84 85 #define HY_ANY_OBJECT 0xFFFFUL 86 #define HY_MUTABLE_OBJECT (NUMBER | STRING | HY_UNDEFINED) 87 88 #define DEFAULTLOWERBOUND -1e26 89 #define DEFAULTUPPERBOUND 1e26 90 91 #define GLOBAL_VARIABLE 1 92 #define CATEGORY_VARIABLE 2 93 #define RANDOM_VARIABLE 3 94 95 #define HY_VARIABLE_GLOBAL 0x01 96 #define HY_VARIABLE_CHANGED 0x02 97 #define HY_VARIABLE_CHANGED_CLEAR 0xFFFD 98 #define HY_DEP_V_COMPUTED 0x04 99 #define HY_DEP_V_INSPECTED 0x08 100 #define HY_DEP_V_INSPECTED_CLR 0xFF7 101 #define HY_DEP_V_MODIFIED 0x10 102 #define HY_DEP_V_MODIFIED_CATS 0x20 103 #define HY_VC_NO_CHECK 0x40 // do not check this variable container in 104 // NeedToExponentiate 105 #define HY_VARIABLE_NOTSET 0x80 106 #define HY_VARIABLE_SET 0x7F 107 #define HY_VARIABLE_COMPUTING 0x100 108 109 #define HY_VARIABLE_COMPUTING_CLR 0x0FF 110 111 #define HY_VC_CLR_NO_CHECK 0xFBF 112 #define HY_DEP_CLEAR_MASK 0xFC7 113 #define HY_HY_VARIABLE_CHANGED_CLEAR 0xFFC 114 115 #define HY_NO_MODEL (-1) 116 117 #define GOLDEN_RATIO 1.618034 118 #define MAX_BRENT_ITERATES 100L 119 120 // START OPCODES 121 122 #define HY_OP_CODE_NONE -1 // noop 123 124 #define HY_OP_CODE_NOT 0 // ! 125 #define HY_OP_CODE_NEQ (1+HY_OP_CODE_NOT) // != 126 #define HY_OP_CODE_IDIV (1+HY_OP_CODE_NEQ) // $ 127 #define HY_OP_CODE_MOD (1+HY_OP_CODE_IDIV) // % 128 #define HY_OP_CODE_REF (1+HY_OP_CODE_MOD) // & 129 #define HY_OP_CODE_AND (1+HY_OP_CODE_REF) // && 130 #define HY_OP_CODE_MUL (1+HY_OP_CODE_AND) // * 131 #define HY_OP_CODE_ADD (1+HY_OP_CODE_MUL) // + 132 #define HY_OP_CODE_SUB (1+HY_OP_CODE_ADD) // - 133 #define HY_OP_CODE_DIV (1+HY_OP_CODE_SUB) // / 134 #define HY_OP_CODE_LESS (1+HY_OP_CODE_DIV) // < 135 136 #define HY_OP_CODE_LEQ (1+HY_OP_CODE_LESS) // <= 137 #define HY_OP_CODE_EQ (1+HY_OP_CODE_LEQ) // == 138 #define HY_OP_CODE_GREATER (1+HY_OP_CODE_EQ) // > 139 #define HY_OP_CODE_GEQ (1+HY_OP_CODE_GREATER) // >= 140 #define HY_OP_CODE_ABS (1+HY_OP_CODE_GEQ) // Abs 141 #define HY_OP_CODE_ARCTAN (1+HY_OP_CODE_ABS) // Arctan 142 #define HY_OP_CODE_BETA (1+HY_OP_CODE_ARCTAN) // Beta 143 #define HY_OP_CODE_BRANCHCOUNT (1+HY_OP_CODE_BETA) // BranchCount 144 #define HY_OP_CODE_BRANCHLENGTH (1+HY_OP_CODE_BRANCHCOUNT) // BranchLength 145 #define HY_OP_CODE_BRANCHNAME (1+HY_OP_CODE_BRANCHLENGTH) // BranchName 146 147 148 #define HY_OP_CODE_CCHI2 (1+HY_OP_CODE_BRANCHNAME) // CChi2 149 #define HY_OP_CODE_CGAMMADIST (1+HY_OP_CODE_CCHI2) // CGammaDist 150 #define HY_OP_CODE_CALL (1+HY_OP_CODE_CGAMMADIST) // Call 151 #define HY_OP_CODE_COLUMNS (1+HY_OP_CODE_CALL) // Columns 152 #define HY_OP_CODE_COS (1+HY_OP_CODE_COLUMNS) // Cos 153 #define HY_OP_CODE_DIFF (1+HY_OP_CODE_COS) // D 154 #define HY_OP_CODE_EIGENSYSTEM (1+HY_OP_CODE_DIFF) // Eigensystem 155 #define HY_OP_CODE_ERF (1+HY_OP_CODE_EIGENSYSTEM) // Erf 156 #define HY_OP_CODE_EVAL (1+HY_OP_CODE_ERF) // Eval 157 #define HY_OP_CODE_EXP (1+HY_OP_CODE_EVAL) // Exp 158 #define HY_OP_CODE_FORMAT (1+HY_OP_CODE_EXP) // Format 159 #define HY_OP_CODE_GAMMA (1+HY_OP_CODE_FORMAT) // Gamma 160 161 #define HY_OP_CODE_GAMMADIST (1+HY_OP_CODE_GAMMA) // GammaDist 162 #define HY_OP_CODE_IBETA (1+HY_OP_CODE_GAMMADIST) // IBeta 163 #define HY_OP_CODE_IGAMMA (1+HY_OP_CODE_IBETA) // IGamma 164 #define HY_OP_CODE_INVCHI2 (1+HY_OP_CODE_IGAMMA) // InvChi2 165 #define HY_OP_CODE_INVERSE (1+HY_OP_CODE_INVCHI2) // Inverse 166 #define HY_OP_CODE_JOIN (1+HY_OP_CODE_INVERSE) // Join 167 #define HY_OP_CODE_LUDECOMPOSE (1+HY_OP_CODE_JOIN) // LUDecompose 168 #define HY_OP_CODE_LUSOLVE (1+HY_OP_CODE_LUDECOMPOSE) // LUSolve 169 #define HY_OP_CODE_LNGAMMA (1+HY_OP_CODE_LUSOLVE) // LnGamma 170 #define HY_OP_CODE_LOG (1+HY_OP_CODE_LNGAMMA) // Log 171 #define HY_OP_CODE_MACCESS (1+HY_OP_CODE_LOG) // MAccess 172 #define HY_OP_CODE_MCOORD (1+HY_OP_CODE_MACCESS) // MCoord 173 174 #define HY_OP_CODE_MAX (1+HY_OP_CODE_MCOORD) // Max 175 #define HY_OP_CODE_MIN (1+HY_OP_CODE_MAX) // Min 176 #define HY_OP_CODE_PSTREESTRING (1+HY_OP_CODE_MIN) // PSTreeString 177 #define HY_OP_CODE_RANDOM (1+HY_OP_CODE_PSTREESTRING) // Random 178 #define HY_OP_CODE_REROOTTREE (1+HY_OP_CODE_RANDOM) // RerootTree 179 #define HY_OP_CODE_ROWS (1+HY_OP_CODE_REROOTTREE) // Rows 180 #define HY_OP_CODE_SIMPLEX (1+HY_OP_CODE_ROWS) // Simplex 181 #define HY_OP_CODE_SIMPLIFY (1+HY_OP_CODE_SIMPLEX) // Simplify 182 #define HY_OP_CODE_SIN (1+HY_OP_CODE_SIMPLIFY) // Sin 183 #define HY_OP_CODE_SQRT (1+HY_OP_CODE_SIN) // Sqrt 184 #define HY_OP_CODE_TEXTREESTRING (1+HY_OP_CODE_SQRT) // TEXTreeString 185 186 #define HY_OP_CODE_TAN (1+HY_OP_CODE_TEXTREESTRING) // Tan 187 #define HY_OP_CODE_TIME (1+HY_OP_CODE_TAN) // Time 188 #define HY_OP_CODE_TIPCOUNT (1+HY_OP_CODE_TIME) // TipCount 189 #define HY_OP_CODE_TIPNAME (1+HY_OP_CODE_TIPCOUNT) // TipName 190 #define HY_OP_CODE_TRANSPOSE (1+HY_OP_CODE_TIPNAME) // Transpose 191 #define HY_OP_CODE_TYPE (1+HY_OP_CODE_TRANSPOSE) // Type 192 #define HY_OP_CODE_ZCDF (1+HY_OP_CODE_TYPE) // ZCDF 193 #define HY_OP_CODE_POWER (1+HY_OP_CODE_ZCDF) // ^ 194 #define HY_OP_CODE_OR (1+HY_OP_CODE_POWER) // || 195 196 // END OPCODES 197 198 // START FORMULA RETURN CODES 199 200 #define HY_FORMULA_EXPRESSION 0 201 #define HY_FORMULA_FAILED (-1) 202 #define HY_FORMULA_VARIABLE_VALUE_ASSIGNMENT 1 203 #define HY_FORMULA_VARIABLE_FORMULA_ASSIGNMENT 2 204 #define HY_FORMULA_FORMULA_FORMULA_ASSIGNMENT 3 205 #define HY_FORMULA_FORMULA_VALUE_ASSIGNMENT 4 206 #define HY_FORMULA_VARIABLE_LOWER_BOUND_ASSIGNMENT 5 207 #define HY_FORMULA_VARIABLE_UPPER_BOUND_ASSIGNMENT 6 208 #define HY_FORMULA_FORMULA_VALUE_INCREMENT 7 209 #define HY_FORMULA_REFERENCE_VALUE_ASSIGNMENT 20 210 #define HY_FORMULA_REFERENCE_FORMULA_ASSIGNMENT 30 211 212 #define HY_FORMULA_REFERENCE_LOWER_BOUND_ASSIGNMENT 40 213 #define HY_FORMULA_REFERENCE_UPPER_BOUND_ASSIGNMENT 41 214 215 // END FORMULA RETURN CODES 216 217 //Some useful defines 218 #define HY_INVALID_RETURN_VALUE NAN 219 #define HY_CONSTANT_FALSE _Constant (0.0) 220 #define HY_CONSTANT_TRUE _Constant (1.0) 221 #define HY_NULL_RETURN _MathObject () 222 223 //! Batch Language 'Object' type codes 224 /*! 225 20110608 SLKP introduced. 226 227 Bit flag style type tags and masks 228 This is primarily to be used for object retrieval 229 using the _HYRetrieveBLObjectByName function 230 and in the _HY_GetStringGlobalTypes list 231 */ 232 233 #define HY_BL_NOT_DEFINED 0 234 #define HY_BL_DATASET 1 235 #define HY_BL_DATASET_FILTER 2 236 #define HY_BL_LIKELIHOOD_FUNCTION 4 237 #define HY_BL_SCFG 8 238 #define HY_BL_BGM 16 239 #define HY_BL_MODEL 32 240 #define HY_BL_HBL_FUNCTION 64 241 #define HY_BL_TREE 128 242 #define HY_BL_VARIABLE 256 243 244 #define HY_BL_ANY 65535 245 246 //! Batch Lanuage Command Codes 247 /*! 248 20111222 SLKP introduced. 249 Define tags to replace ExecuteCaseWhatever 250 251 */ 252 253 #define HY_HBL_COMMAND_FORMULA 0L 254 255 #define HY_HBL_COMMAND_FOR 500L 256 #define HY_HBL_COMMAND_WHILE 501L 257 #define HY_HBL_COMMAND_FUNCTION 502L 258 #define HY_HBL_COMMAND_FFUNCTION 503L 259 #define HY_HBL_COMMAND_RETURNSPACE 504L 260 #define HY_HBL_COMMAND_RETURNPAREN 505L 261 #define HY_HBL_COMMAND_IF 506L 262 #define HY_HBL_COMMAND_ELSE 507L 263 #define HY_HBL_COMMAND_DO 508L 264 #define HY_HBL_COMMAND_BREAK 509L 265 #define HY_HBL_COMMAND_CONTINUE 510L 266 #define HY_HBL_COMMAND_INCLUDE 511L 267 #define HY_HBL_COMMAND_DATA_SET 512L 268 #define HY_HBL_COMMAND_DATA_SET_FILTER 513L 269 #define HY_HBL_COMMAND_HARVEST_FREQUENCIES 514L 270 #define HY_HBL_COMMAND_CONSTRUCT_CATEGORY_MATRIX 515L 271 #define HY_HBL_COMMAND_TREE 516L 272 #define HY_HBL_COMMAND_LIKELIHOOD_FUNCTION 517L 273 #define HY_HBL_COMMAND_LIKELIHOOD_FUNCTION_3 518L 274 #define HY_HBL_COMMAND_OPTIMIZE 519L 275 #define HY_HBL_COMMAND_COVARIANCE_MATRIX 520L 276 #define HY_HBL_COMMAND_MOLECULAR_CLOCK 521L 277 #define HY_HBL_COMMAND_FPRINTF 522L 278 #define HY_HBL_COMMAND_FSCANF 523L 279 #define HY_HBL_COMMAND_SSCANF 524L 280 #define HY_HBL_COMMAND_GET_STRING 525L 281 #define HY_HBL_COMMAND_EXPORT 526L 282 #define HY_HBL_COMMAND_IMPORT 527L 283 #define HY_HBL_COMMAND_CATEGORY 528L 284 #define HY_HBL_COMMAND_CLEAR_CONSTRAINTS 529L 285 #define HY_HBL_COMMAND_SET_DIALOG_PROMPT 530L 286 #define HY_HBL_COMMAND_SELECT_TEMPLATE_MODEL 531L 287 #define HY_HBL_COMMAND_USE_MODEL 532L 288 #define HY_HBL_COMMAND_MODEL 533L 289 #define HY_HBL_COMMAND_SET_PARAMETER 534L 290 #define HY_HBL_COMMAND_CHOICE_LIST 535L 291 #define HY_HBL_COMMAND_GET_INFORMATION 537L 292 #define HY_HBL_COMMAND_EXECUTE_COMMANDS 538L 293 #define HY_HBL_COMMAND_EXECUTE_A_FILE 539L 294 #define HY_HBL_COMMAND_LOAD_FUNCTION_LIBRARY 541L 295 #define HY_HBL_COMMAND_DIFFERENTIATE 544L 296 #define HY_HBL_COMMAND_FIND_ROOT 545L 297 #define HY_HBL_COMMAND_MPI_RECEIVE 546L 298 #define HY_HBL_COMMAND_MPI_SEND 547L 299 #define HY_HBL_COMMAND_GET_DATA_INFO 548L 300 #define HY_HBL_COMMAND_STATE_COUNTER 549L 301 #define HY_HBL_COMMAND_INTEGRATE 550L 302 #define HY_HBL_COMMAND_LFCOMPUTE 551L 303 #define HY_HBL_COMMAND_GET_URL 552L 304 #define HY_HBL_COMMAND_DO_SQL 553L 305 #define HY_HBL_COMMAND_TOPOLOGY 554L 306 #define HY_HBL_COMMAND_ALIGN_SEQUENCES 555L 307 #define HY_HBL_COMMAND_GET_NEUTRAL_NULL 556L 308 #define HY_HBL_COMMAND_PROFILE 557L 309 #define HY_HBL_COMMAND_DELETE_OBJECT 558L 310 #define HY_HBL_COMMAND_REQUIRE_VERSION 559L 311 #define HY_HBL_COMMAND_SCFG 560L 312 #define HY_HBL_COMMAND_NEURAL_NET 561L 313 #define HY_HBL_COMMAND_BGM 562L 314 #define HY_HBL_COMMAND_SIMULATE_DATA_SET 563L 315 #define HY_HBL_COMMAND_ASSERT 564L 316 #define HY_HBL_COMMAND_REPLICATE_CONSTRAINT 565L 317 #define HY_HBL_COMMAND_NESTED_LIST 566L 318 #define HY_HBL_COMMAND_KEYWORD_ARGUMENT 567L 319 #define HY_HBL_COMMAND_INIT_ITERATOR 568L 320 #define HY_HBL_COMMAND_ADVANCE_ITERATOR 569L 321 322 323 //! HyPhy standard directory locations 324 /*! 325 retrieve using _HYStandardDirectory 326 327 */ 328 329 #define HY_HBL_DIRECTORY_TEMPLATE_MODELS 1000L 330 331 #define HY_MAX_LONG_VALUE 0xffffffffL 332 333 334 #define HY_HBL_GET_STRING_BGM_SCORE 0L 335 #define HY_HBL_GET_STRING_BGM_SERIALIZE 1L 336 337 338 //TODO 20170413: not sure where to put the conditional includes below 339 #ifdef _SLKP_USE_ARM_NEON 340 #include <arm_neon.h> 341 #endif 342 343 #ifdef _SLKP_USE_SSE_INTRINSICS 344 //#include "sse2neon.h" 345 //#else 346 #include <pmmintrin.h> 347 //#endif 348 #endif 349 350 #ifdef _SLKP_USE_AVX_INTRINSICS 351 #include <immintrin.h> 352 #endif 353 354 #endif 355