sequenzo 0.1.24__cp311-cp311-macosx_10_9_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of sequenzo might be problematic. Click here for more details.

Files changed (264) hide show
  1. _sequenzo_fastcluster.cpython-311-darwin.so +0 -0
  2. sequenzo/__init__.py +240 -0
  3. sequenzo/big_data/__init__.py +12 -0
  4. sequenzo/big_data/clara/__init__.py +26 -0
  5. sequenzo/big_data/clara/clara.py +474 -0
  6. sequenzo/big_data/clara/utils/__init__.py +27 -0
  7. sequenzo/big_data/clara/utils/aggregatecases.py +92 -0
  8. sequenzo/big_data/clara/utils/davies_bouldin.py +91 -0
  9. sequenzo/big_data/clara/utils/get_weighted_diss.cpython-311-darwin.so +0 -0
  10. sequenzo/big_data/clara/utils/wfcmdd.py +205 -0
  11. sequenzo/big_data/clara/visualization.py +88 -0
  12. sequenzo/clustering/KMedoids.py +178 -0
  13. sequenzo/clustering/__init__.py +30 -0
  14. sequenzo/clustering/clustering_c_code.cpython-311-darwin.so +0 -0
  15. sequenzo/clustering/hierarchical_clustering.py +1256 -0
  16. sequenzo/clustering/sequenzo_fastcluster/fastcluster.py +495 -0
  17. sequenzo/clustering/sequenzo_fastcluster/src/fastcluster.cpp +1877 -0
  18. sequenzo/clustering/sequenzo_fastcluster/src/fastcluster_python.cpp +1264 -0
  19. sequenzo/clustering/src/KMedoid.cpp +263 -0
  20. sequenzo/clustering/src/PAM.cpp +237 -0
  21. sequenzo/clustering/src/PAMonce.cpp +265 -0
  22. sequenzo/clustering/src/cluster_quality.cpp +496 -0
  23. sequenzo/clustering/src/cluster_quality.h +128 -0
  24. sequenzo/clustering/src/cluster_quality_backup.cpp +570 -0
  25. sequenzo/clustering/src/module.cpp +228 -0
  26. sequenzo/clustering/src/weightedinertia.cpp +111 -0
  27. sequenzo/clustering/utils/__init__.py +27 -0
  28. sequenzo/clustering/utils/disscenter.py +122 -0
  29. sequenzo/data_preprocessing/__init__.py +20 -0
  30. sequenzo/data_preprocessing/helpers.py +256 -0
  31. sequenzo/datasets/__init__.py +41 -0
  32. sequenzo/datasets/biofam.csv +2001 -0
  33. sequenzo/datasets/biofam_child_domain.csv +2001 -0
  34. sequenzo/datasets/biofam_left_domain.csv +2001 -0
  35. sequenzo/datasets/biofam_married_domain.csv +2001 -0
  36. sequenzo/datasets/chinese_colonial_territories.csv +12 -0
  37. sequenzo/datasets/country_co2_emissions.csv +194 -0
  38. sequenzo/datasets/country_co2_emissions_global_deciles.csv +195 -0
  39. sequenzo/datasets/country_co2_emissions_global_quintiles.csv +195 -0
  40. sequenzo/datasets/country_co2_emissions_local_deciles.csv +195 -0
  41. sequenzo/datasets/country_co2_emissions_local_quintiles.csv +195 -0
  42. sequenzo/datasets/country_gdp_per_capita.csv +194 -0
  43. sequenzo/datasets/mvad.csv +713 -0
  44. sequenzo/datasets/pairfam_family.csv +1867 -0
  45. sequenzo/datasets/polyadic_samplec1.csv +61 -0
  46. sequenzo/datasets/polyadic_samplep1.csv +61 -0
  47. sequenzo/datasets/polyadic_seqc1.csv +61 -0
  48. sequenzo/datasets/polyadic_seqp1.csv +61 -0
  49. sequenzo/define_sequence_data.py +609 -0
  50. sequenzo/dissimilarity_measures/__init__.py +31 -0
  51. sequenzo/dissimilarity_measures/c_code.cpython-311-darwin.so +0 -0
  52. sequenzo/dissimilarity_measures/get_distance_matrix.py +702 -0
  53. sequenzo/dissimilarity_measures/get_substitution_cost_matrix.py +241 -0
  54. sequenzo/dissimilarity_measures/src/DHDdistance.cpp +148 -0
  55. sequenzo/dissimilarity_measures/src/LCPdistance.cpp +114 -0
  56. sequenzo/dissimilarity_measures/src/OMdistance.cpp +247 -0
  57. sequenzo/dissimilarity_measures/src/OMspellDistance.cpp +281 -0
  58. sequenzo/dissimilarity_measures/src/__init__.py +0 -0
  59. sequenzo/dissimilarity_measures/src/dist2matrix.cpp +63 -0
  60. sequenzo/dissimilarity_measures/src/dp_utils.h +160 -0
  61. sequenzo/dissimilarity_measures/src/module.cpp +34 -0
  62. sequenzo/dissimilarity_measures/src/setup.py +30 -0
  63. sequenzo/dissimilarity_measures/src/utils.h +25 -0
  64. sequenzo/dissimilarity_measures/src/xsimd/.github/cmake-test/main.cpp +6 -0
  65. sequenzo/dissimilarity_measures/src/xsimd/benchmark/main.cpp +159 -0
  66. sequenzo/dissimilarity_measures/src/xsimd/benchmark/xsimd_benchmark.hpp +565 -0
  67. sequenzo/dissimilarity_measures/src/xsimd/docs/source/conf.py +37 -0
  68. sequenzo/dissimilarity_measures/src/xsimd/examples/mandelbrot.cpp +330 -0
  69. sequenzo/dissimilarity_measures/src/xsimd/examples/pico_bench.hpp +246 -0
  70. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_arithmetic.hpp +266 -0
  71. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_complex.hpp +112 -0
  72. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_details.hpp +323 -0
  73. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_logical.hpp +218 -0
  74. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_math.hpp +2583 -0
  75. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_memory.hpp +880 -0
  76. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_rounding.hpp +72 -0
  77. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_swizzle.hpp +174 -0
  78. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_trigo.hpp +978 -0
  79. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx.hpp +1924 -0
  80. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx2.hpp +1144 -0
  81. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512bw.hpp +656 -0
  82. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512cd.hpp +28 -0
  83. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512dq.hpp +244 -0
  84. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512er.hpp +20 -0
  85. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512f.hpp +2650 -0
  86. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512ifma.hpp +20 -0
  87. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512pf.hpp +20 -0
  88. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi.hpp +77 -0
  89. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi2.hpp +131 -0
  90. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512bw.hpp +20 -0
  91. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512vbmi2.hpp +20 -0
  92. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avxvnni.hpp +20 -0
  93. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common.hpp +24 -0
  94. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common_fwd.hpp +77 -0
  95. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_constants.hpp +393 -0
  96. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_emulated.hpp +788 -0
  97. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx.hpp +93 -0
  98. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx2.hpp +46 -0
  99. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_sse.hpp +97 -0
  100. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma4.hpp +92 -0
  101. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_i8mm_neon64.hpp +17 -0
  102. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_isa.hpp +142 -0
  103. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon.hpp +3142 -0
  104. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon64.hpp +1543 -0
  105. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_rvv.hpp +1513 -0
  106. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_scalar.hpp +1260 -0
  107. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse2.hpp +2024 -0
  108. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse3.hpp +67 -0
  109. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_1.hpp +339 -0
  110. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_2.hpp +44 -0
  111. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_ssse3.hpp +186 -0
  112. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sve.hpp +1155 -0
  113. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_vsx.hpp +892 -0
  114. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_wasm.hpp +1780 -0
  115. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_arch.hpp +240 -0
  116. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_config.hpp +484 -0
  117. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_cpuid.hpp +269 -0
  118. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_inline.hpp +27 -0
  119. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/math/xsimd_rem_pio2.hpp +719 -0
  120. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp +349 -0
  121. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_alignment.hpp +91 -0
  122. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_all_registers.hpp +55 -0
  123. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_api.hpp +2765 -0
  124. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx2_register.hpp +44 -0
  125. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512bw_register.hpp +51 -0
  126. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512cd_register.hpp +51 -0
  127. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512dq_register.hpp +51 -0
  128. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512er_register.hpp +51 -0
  129. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512f_register.hpp +77 -0
  130. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512ifma_register.hpp +51 -0
  131. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512pf_register.hpp +51 -0
  132. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi2_register.hpp +51 -0
  133. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi_register.hpp +51 -0
  134. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512bw_register.hpp +54 -0
  135. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512vbmi2_register.hpp +53 -0
  136. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx_register.hpp +64 -0
  137. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avxvnni_register.hpp +44 -0
  138. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch.hpp +1524 -0
  139. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch_constant.hpp +300 -0
  140. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_common_arch.hpp +47 -0
  141. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_emulated_register.hpp +80 -0
  142. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx2_register.hpp +50 -0
  143. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx_register.hpp +50 -0
  144. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_sse_register.hpp +50 -0
  145. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma4_register.hpp +50 -0
  146. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_i8mm_neon64_register.hpp +55 -0
  147. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon64_register.hpp +55 -0
  148. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon_register.hpp +154 -0
  149. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_register.hpp +94 -0
  150. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_rvv_register.hpp +506 -0
  151. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse2_register.hpp +59 -0
  152. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse3_register.hpp +49 -0
  153. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_1_register.hpp +48 -0
  154. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_2_register.hpp +48 -0
  155. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_ssse3_register.hpp +48 -0
  156. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sve_register.hpp +156 -0
  157. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_traits.hpp +337 -0
  158. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_utils.hpp +536 -0
  159. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_vsx_register.hpp +77 -0
  160. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_wasm_register.hpp +59 -0
  161. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/xsimd.hpp +75 -0
  162. sequenzo/dissimilarity_measures/src/xsimd/test/architectures/dummy.cpp +7 -0
  163. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set.cpp +13 -0
  164. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean.cpp +24 -0
  165. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_aligned.cpp +25 -0
  166. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_arch_independent.cpp +28 -0
  167. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_tag_dispatch.cpp +25 -0
  168. sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_abstract_batches.cpp +7 -0
  169. sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_parametric_batches.cpp +8 -0
  170. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum.hpp +31 -0
  171. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_avx2.cpp +3 -0
  172. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_sse2.cpp +3 -0
  173. sequenzo/dissimilarity_measures/src/xsimd/test/doc/writing_vectorized_code.cpp +11 -0
  174. sequenzo/dissimilarity_measures/src/xsimd/test/main.cpp +31 -0
  175. sequenzo/dissimilarity_measures/src/xsimd/test/test_api.cpp +230 -0
  176. sequenzo/dissimilarity_measures/src/xsimd/test/test_arch.cpp +217 -0
  177. sequenzo/dissimilarity_measures/src/xsimd/test/test_basic_math.cpp +183 -0
  178. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch.cpp +1049 -0
  179. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_bool.cpp +508 -0
  180. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_cast.cpp +409 -0
  181. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_complex.cpp +712 -0
  182. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_constant.cpp +286 -0
  183. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_float.cpp +141 -0
  184. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_int.cpp +365 -0
  185. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_manip.cpp +308 -0
  186. sequenzo/dissimilarity_measures/src/xsimd/test/test_bitwise_cast.cpp +222 -0
  187. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_exponential.cpp +226 -0
  188. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_hyperbolic.cpp +183 -0
  189. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_power.cpp +265 -0
  190. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_trigonometric.cpp +236 -0
  191. sequenzo/dissimilarity_measures/src/xsimd/test/test_conversion.cpp +248 -0
  192. sequenzo/dissimilarity_measures/src/xsimd/test/test_custom_default_arch.cpp +28 -0
  193. sequenzo/dissimilarity_measures/src/xsimd/test/test_error_gamma.cpp +170 -0
  194. sequenzo/dissimilarity_measures/src/xsimd/test/test_explicit_batch_instantiation.cpp +32 -0
  195. sequenzo/dissimilarity_measures/src/xsimd/test/test_exponential.cpp +202 -0
  196. sequenzo/dissimilarity_measures/src/xsimd/test/test_extract_pair.cpp +92 -0
  197. sequenzo/dissimilarity_measures/src/xsimd/test/test_fp_manipulation.cpp +77 -0
  198. sequenzo/dissimilarity_measures/src/xsimd/test/test_gnu_source.cpp +30 -0
  199. sequenzo/dissimilarity_measures/src/xsimd/test/test_hyperbolic.cpp +167 -0
  200. sequenzo/dissimilarity_measures/src/xsimd/test/test_load_store.cpp +304 -0
  201. sequenzo/dissimilarity_measures/src/xsimd/test/test_memory.cpp +61 -0
  202. sequenzo/dissimilarity_measures/src/xsimd/test/test_poly_evaluation.cpp +64 -0
  203. sequenzo/dissimilarity_measures/src/xsimd/test/test_power.cpp +184 -0
  204. sequenzo/dissimilarity_measures/src/xsimd/test/test_rounding.cpp +199 -0
  205. sequenzo/dissimilarity_measures/src/xsimd/test/test_select.cpp +101 -0
  206. sequenzo/dissimilarity_measures/src/xsimd/test/test_shuffle.cpp +760 -0
  207. sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.cpp +4 -0
  208. sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.hpp +34 -0
  209. sequenzo/dissimilarity_measures/src/xsimd/test/test_traits.cpp +172 -0
  210. sequenzo/dissimilarity_measures/src/xsimd/test/test_trigonometric.cpp +208 -0
  211. sequenzo/dissimilarity_measures/src/xsimd/test/test_utils.hpp +611 -0
  212. sequenzo/dissimilarity_measures/src/xsimd/test/test_wasm/test_wasm_playwright.py +123 -0
  213. sequenzo/dissimilarity_measures/src/xsimd/test/test_xsimd_api.cpp +1460 -0
  214. sequenzo/dissimilarity_measures/utils/__init__.py +16 -0
  215. sequenzo/dissimilarity_measures/utils/get_LCP_length_for_2_seq.py +44 -0
  216. sequenzo/dissimilarity_measures/utils/get_sm_trate_substitution_cost_matrix.cpython-311-darwin.so +0 -0
  217. sequenzo/dissimilarity_measures/utils/seqconc.cpython-311-darwin.so +0 -0
  218. sequenzo/dissimilarity_measures/utils/seqdss.cpython-311-darwin.so +0 -0
  219. sequenzo/dissimilarity_measures/utils/seqdur.cpython-311-darwin.so +0 -0
  220. sequenzo/dissimilarity_measures/utils/seqlength.cpython-311-darwin.so +0 -0
  221. sequenzo/multidomain/__init__.py +23 -0
  222. sequenzo/multidomain/association_between_domains.py +311 -0
  223. sequenzo/multidomain/cat.py +431 -0
  224. sequenzo/multidomain/combt.py +519 -0
  225. sequenzo/multidomain/dat.py +89 -0
  226. sequenzo/multidomain/idcd.py +139 -0
  227. sequenzo/multidomain/linked_polyad.py +292 -0
  228. sequenzo/openmp_setup.py +233 -0
  229. sequenzo/prefix_tree/__init__.py +43 -0
  230. sequenzo/prefix_tree/individual_level_indicators.py +1274 -0
  231. sequenzo/prefix_tree/system_level_indicators.py +465 -0
  232. sequenzo/prefix_tree/utils.py +54 -0
  233. sequenzo/sequence_characteristics/__init__.py +40 -0
  234. sequenzo/sequence_characteristics/complexity_index.py +49 -0
  235. sequenzo/sequence_characteristics/overall_cross_sectional_entropy.py +220 -0
  236. sequenzo/sequence_characteristics/plot_characteristics.py +593 -0
  237. sequenzo/sequence_characteristics/simple_characteristics.py +311 -0
  238. sequenzo/sequence_characteristics/state_frequencies_and_entropy_per_sequence.py +39 -0
  239. sequenzo/sequence_characteristics/turbulence.py +155 -0
  240. sequenzo/sequence_characteristics/variance_of_spell_durations.py +86 -0
  241. sequenzo/sequence_characteristics/within_sequence_entropy.py +43 -0
  242. sequenzo/suffix_tree/__init__.py +48 -0
  243. sequenzo/suffix_tree/individual_level_indicators.py +1638 -0
  244. sequenzo/suffix_tree/system_level_indicators.py +456 -0
  245. sequenzo/suffix_tree/utils.py +56 -0
  246. sequenzo/visualization/__init__.py +29 -0
  247. sequenzo/visualization/plot_mean_time.py +194 -0
  248. sequenzo/visualization/plot_modal_state.py +276 -0
  249. sequenzo/visualization/plot_most_frequent_sequences.py +147 -0
  250. sequenzo/visualization/plot_relative_frequency.py +404 -0
  251. sequenzo/visualization/plot_sequence_index.py +951 -0
  252. sequenzo/visualization/plot_single_medoid.py +153 -0
  253. sequenzo/visualization/plot_state_distribution.py +627 -0
  254. sequenzo/visualization/plot_transition_matrix.py +190 -0
  255. sequenzo/visualization/utils/__init__.py +23 -0
  256. sequenzo/visualization/utils/utils.py +310 -0
  257. sequenzo/with_event_history_analysis/__init__.py +35 -0
  258. sequenzo/with_event_history_analysis/sequence_analysis_multi_state_model.py +850 -0
  259. sequenzo/with_event_history_analysis/sequence_history_analysis.py +283 -0
  260. sequenzo-0.1.24.dist-info/METADATA +255 -0
  261. sequenzo-0.1.24.dist-info/RECORD +264 -0
  262. sequenzo-0.1.24.dist-info/WHEEL +5 -0
  263. sequenzo-0.1.24.dist-info/licenses/LICENSE +28 -0
  264. sequenzo-0.1.24.dist-info/top_level.txt +2 -0
@@ -0,0 +1,1460 @@
1
+ /***************************************************************************
2
+ * Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
3
+ * Martin Renou *
4
+ * Copyright (c) QuantStack *
5
+ * Copyright (c) Serge Guelton *
6
+ * *
7
+ * Distributed under the terms of the BSD 3-Clause License. *
8
+ * *
9
+ * The full license is in the file LICENSE, distributed with this software. *
10
+ ****************************************************************************/
11
+
12
+ #include "xsimd/types/xsimd_utils.hpp"
13
+ #include "xsimd/xsimd.hpp"
14
+
15
+ #include "doctest/doctest.h"
16
+
17
+ template <class T>
18
+ struct scalar_type
19
+ {
20
+ using type = T;
21
+ };
22
+ template <class T, class A>
23
+ struct scalar_type<xsimd::batch<T, A>>
24
+ {
25
+ using type = T;
26
+ };
27
+
28
+ template <class T>
29
+ T extract(T const& value) { return value; }
30
+
31
+ template <class T, class A>
32
+ T extract(xsimd::batch<T, A> const& batch) { return batch.get(0); }
33
+
34
+ template <class T, class A>
35
+ bool extract(xsimd::batch_bool<T, A> const& batch) { return batch.get(0); }
36
+
37
+ /*
38
+ * Type series
39
+ */
40
+
41
+ #define INTEGRAL_TYPES_HEAD char, unsigned char, signed char, short, unsigned short, int, unsigned int, long, unsigned long
42
+ #ifdef XSIMD_NO_SUPPORTED_ARCHITECTURE
43
+ #define INTEGRAL_TYPES_TAIL
44
+ #else
45
+ #define INTEGRAL_TYPES_TAIL , xsimd::batch<char>, xsimd::batch<unsigned char>, xsimd::batch<signed char>, xsimd::batch<short>, xsimd::batch<unsigned short>, xsimd::batch<int>, xsimd::batch<unsigned int>, xsimd::batch<long>, xsimd::batch<unsigned long>
46
+ #endif
47
+
48
+ #define INTEGRAL_TYPES INTEGRAL_TYPES_HEAD INTEGRAL_TYPES_TAIL
49
+
50
+ //
51
+
52
+ #define FLOAT_TYPES_HEAD float, double
53
+
54
+ #ifdef XSIMD_NO_SUPPORTED_ARCHITECTURE
55
+ #define FLOAT_TYPES_MIDDLE
56
+ #define FLOAT_TYPES_TAIL
57
+ #else
58
+ #define FLOAT_TYPES_MIDDLE , xsimd::batch<float>
59
+ #if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
60
+ #define FLOAT_TYPES_TAIL , xsimd::batch<double>
61
+ #else
62
+ #define FLOAT_TYPES_TAIL
63
+ #endif
64
+ #endif
65
+ #define FLOAT_TYPES FLOAT_TYPES_HEAD FLOAT_TYPES_MIDDLE FLOAT_TYPES_TAIL
66
+
67
+ //
68
+ #define SCALAR_TYPES INTEGRAL_TYPES, FLOAT_TYPES
69
+
70
+ //
71
+ #define ALL_FLOATING_POINT_TYPES_HEAD float, double, std::complex<float>, std::complex<double>
72
+
73
+ #ifdef XSIMD_NO_SUPPORTED_ARCHITECTURE
74
+ #define ALL_FLOATING_POINT_TYPES_MIDDLE
75
+ #define ALL_FLOATING_POINT_TYPES_TAIL
76
+ #else
77
+ #define ALL_FLOATING_POINT_TYPES_MIDDLE , xsimd::batch<float>, xsimd::batch<std::complex<float>>
78
+
79
+ #if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
80
+ #define ALL_FLOATING_POINT_TYPES_TAIL , xsimd::batch<double>, xsimd::batch<std::complex<double>>
81
+ #else
82
+ #define ALL_FLOATING_POINT_TYPES_TAIL
83
+ #endif
84
+ #endif
85
+ #define ALL_FLOATING_POINT_TYPES ALL_FLOATING_POINT_TYPES_HEAD ALL_FLOATING_POINT_TYPES_MIDDLE ALL_FLOATING_POINT_TYPES_TAIL
86
+
87
+ //
88
+
89
+ #define COMPLEX_TYPES ALL_FLOATING_POINT_TYPES
90
+
91
+ //
92
+ #define ALL_INTEGRAL_SIGNED_TYPES_HEAD signed char, short, int, long
93
+ #ifdef XSIMD_NO_SUPPORTED_ARCHITECTURE
94
+ #define ALL_INTEGRAL_SIGNED_TYPES_TAIL
95
+ #else
96
+ #define ALL_INTEGRAL_SIGNED_TYPES_TAIL , xsimd::batch<signed char>, xsimd::batch<short>, xsimd::batch<int>, xsimd::batch<long>
97
+ #endif
98
+
99
+ #define ALL_SIGNED_TYPES ALL_INTEGRAL_SIGNED_TYPES_HEAD ALL_INTEGRAL_SIGNED_TYPES_TAIL, ALL_FLOATING_POINT_TYPES
100
+
101
+ //
102
+
103
+ #define ALL_TYPES INTEGRAL_TYPES, ALL_FLOATING_POINT_TYPES
104
+
105
+ /*
106
+ * Functions that apply on scalar types only
107
+ */
108
+
109
+ template <typename T>
110
+ struct xsimd_api_scalar_types_functions
111
+ {
112
+ using value_type = typename scalar_type<T>::type;
113
+
114
+ void test_bitofsign()
115
+ {
116
+ value_type val(1);
117
+ CHECK_EQ(extract(xsimd::bitofsign(T(val))), val < 0);
118
+ }
119
+
120
+ void test_bitwise_and()
121
+ {
122
+ value_type val0(1);
123
+ value_type val1(3);
124
+ xsimd::as_unsigned_integer_t<value_type> ival0, ival1, ir;
125
+ std::memcpy((void*)&ival0, (void*)&val0, sizeof(val0));
126
+ std::memcpy((void*)&ival1, (void*)&val1, sizeof(val1));
127
+ value_type r;
128
+ ir = ival0 & ival1;
129
+ std::memcpy((void*)&r, (void*)&ir, sizeof(ir));
130
+ CHECK_EQ(extract(xsimd::bitwise_and(T(val0), T(val1))), r);
131
+ }
132
+
133
+ void test_bitwise_cast()
134
+ {
135
+ value_type val(1);
136
+ xsimd::as_unsigned_integer_t<value_type> r;
137
+ std::memcpy((void*)&r, (void*)&val, sizeof(val));
138
+ CHECK_EQ(extract(xsimd::bitwise_cast<value_type>(val)), r);
139
+ }
140
+
141
+ void test_bitwise_andnot()
142
+ {
143
+ value_type val0(1);
144
+ value_type val1(3);
145
+ xsimd::as_unsigned_integer_t<value_type> ival0, ival1, ir;
146
+ std::memcpy((void*)&ival0, (void*)&val0, sizeof(val0));
147
+ std::memcpy((void*)&ival1, (void*)&val1, sizeof(val1));
148
+ value_type r;
149
+ ir = ival0 & ~ival1;
150
+ std::memcpy((void*)&r, (void*)&ir, sizeof(ir));
151
+ CHECK_EQ(extract(xsimd::bitwise_andnot(T(val0), T(val1))), r);
152
+ }
153
+
154
+ void test_bitwise_not()
155
+ {
156
+ value_type val(1);
157
+ xsimd::as_unsigned_integer_t<value_type> ival, ir;
158
+ std::memcpy((void*)&ival, (void*)&val, sizeof(val));
159
+ value_type r;
160
+ ir = ~ival;
161
+ std::memcpy((void*)&r, (void*)&ir, sizeof(ir));
162
+ CHECK_EQ(extract(xsimd::bitwise_not(T(val))), r);
163
+ }
164
+
165
+ void test_bitwise_or()
166
+ {
167
+ value_type val0(1);
168
+ value_type val1(4);
169
+ xsimd::as_unsigned_integer_t<value_type> ival0, ival1, ir;
170
+ std::memcpy((void*)&ival0, (void*)&val0, sizeof(val0));
171
+ std::memcpy((void*)&ival1, (void*)&val1, sizeof(val1));
172
+ value_type r;
173
+ ir = ival0 | ival1;
174
+ std::memcpy((void*)&r, (void*)&ir, sizeof(ir));
175
+ CHECK_EQ(extract(xsimd::bitwise_or(T(val0), T(val1))), r);
176
+ }
177
+
178
+ void test_bitwise_xor()
179
+ {
180
+ value_type val0(1);
181
+ value_type val1(2);
182
+ xsimd::as_unsigned_integer_t<value_type> ival0, ival1, ir;
183
+ std::memcpy((void*)&ival0, (void*)&val0, sizeof(val0));
184
+ std::memcpy((void*)&ival1, (void*)&val1, sizeof(val1));
185
+ value_type r;
186
+ ir = ival0 ^ ival1;
187
+ std::memcpy((void*)&r, (void*)&ir, sizeof(ir));
188
+ CHECK_EQ(extract(xsimd::bitwise_xor(T(val0), T(val1))), r);
189
+ }
190
+
191
+ void test_clip()
192
+ {
193
+ value_type val0(5);
194
+ value_type val1(2);
195
+ value_type val2(3);
196
+ CHECK_EQ(extract(xsimd::clip(T(val0), T(val1), T(val2))), val0 <= val1 ? val1 : (val0 >= val2 ? val2 : val0));
197
+ }
198
+
199
+ void test_ge()
200
+ {
201
+ value_type val0(1);
202
+ value_type val1(3);
203
+ CHECK_EQ(extract(xsimd::ge(T(val0), T(val1))), val0 >= val1);
204
+ }
205
+
206
+ void test_gt()
207
+ {
208
+ value_type val0(1);
209
+ value_type val1(3);
210
+ CHECK_EQ(extract(xsimd::gt(T(val0), T(val1))), val0 > val1);
211
+ }
212
+
213
+ void test_le()
214
+ {
215
+ value_type val0(1);
216
+ value_type val1(3);
217
+ CHECK_EQ(extract(xsimd::le(T(val0), T(val1))), val0 <= val1);
218
+ }
219
+
220
+ void test_lt()
221
+ {
222
+ value_type val0(1);
223
+ value_type val1(3);
224
+ CHECK_EQ(extract(xsimd::lt(T(val0), T(val1))), val0 < val1);
225
+ }
226
+
227
+ void test_max()
228
+ {
229
+ value_type val0(1);
230
+ value_type val1(3);
231
+ CHECK_EQ(extract(xsimd::max(T(val0), T(val1))), std::max(val0, val1));
232
+ }
233
+
234
+ void test_min()
235
+ {
236
+ value_type val0(1);
237
+ value_type val1(3);
238
+ CHECK_EQ(extract(xsimd::min(T(val0), T(val1))), std::min(val0, val1));
239
+ }
240
+
241
+ void test_remainder()
242
+ {
243
+ value_type val0(1);
244
+ value_type val1(3);
245
+ CHECK_EQ(extract(xsimd::remainder(T(val0), T(val1))), val0 - xsimd::as_integer_t<value_type>(val0) / xsimd::as_integer_t<value_type>(val1));
246
+ }
247
+ void test_sign()
248
+ {
249
+ value_type val(1);
250
+ CHECK_EQ(extract(xsimd::sign(T(val))), val == 0 ? 0 : val > 0 ? 1
251
+ : -1);
252
+ }
253
+ void test_signnz()
254
+ {
255
+ value_type val(1);
256
+ CHECK_EQ(extract(xsimd::signnz(T(val))), val == 0 ? 1 : val > 0 ? 1
257
+ : -1);
258
+ }
259
+ };
260
+
261
+ TEST_CASE_TEMPLATE("[xsimd api | scalar types]", B, SCALAR_TYPES)
262
+ {
263
+ xsimd_api_scalar_types_functions<B> Test;
264
+ SUBCASE("bitofsign")
265
+ {
266
+ Test.test_bitofsign();
267
+ }
268
+
269
+ SUBCASE("bitwise_and")
270
+ {
271
+ Test.test_bitwise_and();
272
+ }
273
+
274
+ SUBCASE("bitwise_andnot")
275
+ {
276
+ Test.test_bitwise_andnot();
277
+ }
278
+
279
+ SUBCASE("bitwise_not")
280
+ {
281
+ Test.test_bitwise_not();
282
+ }
283
+
284
+ SUBCASE("bitwise_or")
285
+ {
286
+ Test.test_bitwise_or();
287
+ }
288
+
289
+ SUBCASE("bitwise_xor")
290
+ {
291
+ Test.test_bitwise_xor();
292
+ }
293
+
294
+ SUBCASE("clip")
295
+ {
296
+ Test.test_clip();
297
+ }
298
+
299
+ SUBCASE("ge")
300
+ {
301
+ Test.test_ge();
302
+ }
303
+
304
+ SUBCASE("gt")
305
+ {
306
+ Test.test_gt();
307
+ }
308
+
309
+ SUBCASE("le")
310
+ {
311
+ Test.test_le();
312
+ }
313
+
314
+ SUBCASE("lt")
315
+ {
316
+ Test.test_lt();
317
+ }
318
+
319
+ SUBCASE("max")
320
+ {
321
+ Test.test_max();
322
+ }
323
+
324
+ SUBCASE("min")
325
+ {
326
+ Test.test_min();
327
+ }
328
+
329
+ SUBCASE("remainder")
330
+ {
331
+ Test.test_remainder();
332
+ }
333
+
334
+ SUBCASE("sign")
335
+ {
336
+ Test.test_sign();
337
+ }
338
+
339
+ SUBCASE("signnz")
340
+ {
341
+ Test.test_signnz();
342
+ }
343
+ }
344
+
345
+ /*
346
+ * Functions that apply on integral types only
347
+ */
348
+
349
+ template <typename T>
350
+ struct xsimd_api_integral_types_functions
351
+ {
352
+ using value_type = typename scalar_type<T>::type;
353
+
354
+ void test_bitwise_lshift()
355
+ {
356
+ constexpr int shift = 3;
357
+ value_type val0(12);
358
+ value_type val1(shift);
359
+ value_type r = val0 << val1;
360
+ value_type ir = val0 << shift;
361
+ value_type cr = xsimd::bitwise_lshift<shift>(val0);
362
+ CHECK_EQ(extract(xsimd::bitwise_lshift(T(val0), T(val1))), r);
363
+ CHECK_EQ(extract(ir), r);
364
+ CHECK_EQ(extract(cr), r);
365
+ }
366
+
367
+ void test_bitwise_rshift()
368
+ {
369
+ constexpr int shift = 3;
370
+ value_type val0(12);
371
+ value_type val1(shift);
372
+ value_type r = val0 >> val1;
373
+ value_type ir = val0 >> shift;
374
+ value_type cr = xsimd::bitwise_rshift<shift>(val0);
375
+ CHECK_EQ(extract(xsimd::bitwise_rshift(T(val0), T(val1))), r);
376
+ CHECK_EQ(extract(ir), r);
377
+ CHECK_EQ(extract(cr), r);
378
+ }
379
+
380
+ void test_mod()
381
+ {
382
+ value_type val0(5);
383
+ value_type val1(3);
384
+ CHECK_EQ(extract(xsimd::mod(T(val0), T(val1))), val0 % val1);
385
+ }
386
+
387
+ void test_rotl()
388
+ {
389
+ constexpr auto N = std::numeric_limits<value_type>::digits + std::numeric_limits<value_type>::is_signed;
390
+ constexpr int count = 3;
391
+ value_type val0(12);
392
+ value_type val1(count);
393
+ value_type r = (val0 << val1) | (val0 >> (N - val1));
394
+ value_type cr = xsimd::rotl<count>(val0);
395
+ CHECK_EQ(extract(xsimd::rotl(T(val0), T(val1))), r);
396
+ CHECK_EQ(extract(cr), r);
397
+ }
398
+
399
+ void test_rotr()
400
+ {
401
+ constexpr auto N = std::numeric_limits<value_type>::digits + std::numeric_limits<value_type>::is_signed;
402
+ constexpr int count = 3;
403
+ value_type val0(12);
404
+ value_type val1(count);
405
+ value_type r = (val0 >> val1) | (val0 << (N - val1));
406
+ value_type cr = xsimd::rotr<3>(val0);
407
+ CHECK_EQ(extract(xsimd::rotr(T(val0), T(val1))), r);
408
+ CHECK_EQ(extract(cr), r);
409
+ }
410
+
411
+ void test_sadd()
412
+ {
413
+ value_type val0(122);
414
+ value_type val1(std::numeric_limits<value_type>::max());
415
+ CHECK_EQ(extract(xsimd::sadd(T(val0), T(val1))), (val0 > std::numeric_limits<value_type>::max() - val1) ? std::numeric_limits<value_type>::max() : (val0 + val1));
416
+ }
417
+ void test_ssub()
418
+ {
419
+ value_type val0(122);
420
+ value_type val1(121);
421
+ CHECK_EQ(extract(xsimd::ssub(T(val0), T(val1))), (val0 < std::numeric_limits<value_type>::min() + val1) ? std::numeric_limits<value_type>::min() : (val0 - val1));
422
+ }
423
+ };
424
+
425
+ TEST_CASE_TEMPLATE("[xsimd api | integral types functions]", B, INTEGRAL_TYPES)
426
+ {
427
+ xsimd_api_integral_types_functions<B> Test;
428
+
429
+ SUBCASE("bitwise_lshift")
430
+ {
431
+ Test.test_bitwise_lshift();
432
+ }
433
+
434
+ SUBCASE("bitwise_rshift")
435
+ {
436
+ Test.test_bitwise_rshift();
437
+ }
438
+
439
+ SUBCASE("mod")
440
+ {
441
+ Test.test_mod();
442
+ }
443
+
444
+ SUBCASE("rotl")
445
+ {
446
+ Test.test_rotl();
447
+ }
448
+
449
+ SUBCASE("rotr")
450
+ {
451
+ Test.test_rotr();
452
+ }
453
+
454
+ SUBCASE("sadd")
455
+ {
456
+ Test.test_sadd();
457
+ }
458
+
459
+ SUBCASE("ssub")
460
+ {
461
+ Test.test_ssub();
462
+ }
463
+ }
464
+
465
+ /*
466
+ * Functions that apply on floating points types only
467
+ */
468
+
469
+ template <typename T>
470
+ struct xsimd_api_float_types_functions
471
+ {
472
+ using value_type = typename scalar_type<T>::type;
473
+
474
+ void test_acos()
475
+ {
476
+ value_type val(1);
477
+ CHECK_EQ(extract(xsimd::acos(T(val))), std::acos(val));
478
+ }
479
+ void test_acosh()
480
+ {
481
+ value_type val(1);
482
+ CHECK_EQ(extract(xsimd::acosh(T(val))), std::acosh(val));
483
+ }
484
+ void test_asin()
485
+ {
486
+ value_type val(1);
487
+ CHECK_EQ(extract(xsimd::asin(T(val))), std::asin(val));
488
+ }
489
+ void test_asinh()
490
+ {
491
+ value_type val(0);
492
+ CHECK_EQ(extract(xsimd::asinh(T(val))), std::asinh(val));
493
+ }
494
+ void test_atan()
495
+ {
496
+ value_type val(0);
497
+ CHECK_EQ(extract(xsimd::atan(T(val))), std::atan(val));
498
+ }
499
+ void test_atan2()
500
+ {
501
+ value_type val0(0);
502
+ value_type val1(1);
503
+ CHECK_EQ(extract(xsimd::atan2(T(val0), T(val1))), std::atan2(val0, val1));
504
+ }
505
+ void test_atanh()
506
+ {
507
+ value_type val0(0);
508
+ CHECK_EQ(extract(xsimd::atanh(T(val0))), std::atanh(val0));
509
+ #ifndef __FAST_MATH__
510
+ value_type val1(1);
511
+ CHECK_EQ(extract(xsimd::atanh(T(val1))), std::atanh(val1));
512
+ #endif
513
+ }
514
+ void test_cbrt()
515
+ {
516
+ value_type val(8);
517
+ CHECK_EQ(extract(xsimd::cbrt(T(val))), std::cbrt(val));
518
+ }
519
+ void test_ceil()
520
+ {
521
+ value_type val(1.5);
522
+ CHECK_EQ(extract(xsimd::ceil(T(val))), std::ceil(val));
523
+ }
524
+
525
+ void test_copysign()
526
+ {
527
+ value_type val0(2);
528
+ value_type val1(-1);
529
+ CHECK_EQ(extract(xsimd::copysign(T(val0), T(val1))), (value_type)std::copysign(val0, val1));
530
+ }
531
+ void test_cos()
532
+ {
533
+ value_type val(0);
534
+ CHECK_EQ(extract(xsimd::cos(T(val))), std::cos(val));
535
+ }
536
+ void test_cosh()
537
+ {
538
+ value_type val(0);
539
+ CHECK_EQ(extract(xsimd::cosh(T(val))), std::cosh(val));
540
+ }
541
+ void test_exp()
542
+ {
543
+ value_type val(2);
544
+ CHECK_EQ(extract(xsimd::exp(T(val))), std::exp(val));
545
+ }
546
+ void test_exp10()
547
+ {
548
+ value_type val(2);
549
+ #ifdef EMSCRIPTEN
550
+ CHECK_EQ(extract(xsimd::exp10(T(val))), doctest::Approx(std::pow(value_type(10), val)));
551
+ #else
552
+ CHECK_EQ(extract(xsimd::exp10(T(val))), std::pow(value_type(10), val));
553
+ #endif
554
+ }
555
+ void test_exp2()
556
+ {
557
+ value_type val(2);
558
+ CHECK_EQ(extract(xsimd::exp2(T(val))), std::exp2(val));
559
+ }
560
+ void test_expm1()
561
+ {
562
+ value_type val(2);
563
+ CHECK_EQ(extract(xsimd::expm1(T(val))), std::expm1(val));
564
+ }
565
+ void test_erf()
566
+ {
567
+ value_type val(2);
568
+ CHECK_EQ(extract(xsimd::erf(T(val))), std::erf(val));
569
+ }
570
+ void test_erfc()
571
+ {
572
+ // FIXME: can we do better?
573
+ for (float f : { 0.f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f })
574
+ {
575
+ value_type val(f);
576
+ CHECK_EQ(extract(xsimd::erfc(T(val))), doctest::Approx(std::erfc(val)).epsilon(10e-8));
577
+ }
578
+ }
579
+ void test_fabs()
580
+ {
581
+ value_type val(-3);
582
+ CHECK_EQ(extract(xsimd::fabs(T(val))), std::abs(val));
583
+ }
584
+ void test_fdim()
585
+ {
586
+ value_type val0(-3);
587
+ value_type val1(1);
588
+ CHECK_EQ(extract(xsimd::fdim(T(val0), T(val1))), std::fdim(val0, val1));
589
+ }
590
+ void test_floor()
591
+ {
592
+ value_type val(3.1);
593
+ CHECK_EQ(extract(xsimd::floor(T(val))), std::floor(val));
594
+ }
595
+ void test_fmax()
596
+ {
597
+ value_type val0(3);
598
+ value_type val1(1);
599
+ CHECK_EQ(extract(xsimd::fmax(T(val0), T(val1))), std::fmax(val0, val1));
600
+ }
601
+ void test_fmin()
602
+ {
603
+ value_type val0(3);
604
+ value_type val1(1);
605
+ CHECK_EQ(extract(xsimd::fmin(T(val0), T(val1))), std::fmin(val0, val1));
606
+ }
607
+ void test_fmod()
608
+ {
609
+ value_type val0(3);
610
+ value_type val1(1);
611
+ CHECK_EQ(extract(xsimd::fmin(T(val0), T(val1))), std::fmin(val0, val1));
612
+ }
613
+ void test_frexp()
614
+ {
615
+ value_type val(3.3);
616
+ int res;
617
+ typename std::conditional<std::is_floating_point<T>::value, int, xsimd::as_integer_t<T>>::type vres;
618
+ CHECK_EQ(extract(xsimd::frexp(T(val), vres)), std::frexp(val, &res));
619
+ CHECK_EQ(extract(vres), res);
620
+ }
621
+ void test_hypot()
622
+ {
623
+ value_type val0(3);
624
+ value_type val1(1);
625
+ CHECK_EQ(extract(xsimd::hypot(T(val0), T(val1))), std::hypot(val0, val1));
626
+ }
627
+ void test_is_even()
628
+ {
629
+ value_type val(4);
630
+ CHECK_EQ(extract(xsimd::is_even(T(val))), (val == long(val)) && (long(val) % 2 == 0));
631
+ }
632
+ void test_is_flint()
633
+ {
634
+ value_type val(4.1);
635
+ CHECK_EQ(extract(xsimd::is_flint(T(val))), (val == long(val)));
636
+ }
637
+ void test_is_odd()
638
+ {
639
+ value_type val(4);
640
+ CHECK_EQ(extract(xsimd::is_odd(T(val))), (val == long(val)) && (long(val) % 2 == 1));
641
+ }
642
+ void test_ldexp()
643
+ {
644
+ value_type val0(4);
645
+ xsimd::as_integer_t<value_type> val1(2);
646
+ using exponent_type = typename std::conditional<std::is_scalar<T>::value, int, xsimd::as_integer_t<T>>::type;
647
+ CHECK_EQ(extract(xsimd::ldexp(T(val0), exponent_type(val1))), std::ldexp(val0, static_cast<int>(val1)));
648
+ }
649
+ void test_lgamma()
650
+ {
651
+ value_type val(2);
652
+ CHECK_EQ(extract(xsimd::lgamma(T(val))), std::lgamma(val));
653
+ }
654
+ void test_log()
655
+ {
656
+ value_type val(1);
657
+ CHECK_EQ(extract(xsimd::log(T(val))), std::log(val));
658
+ }
659
+
660
+ void test_log2()
661
+ {
662
+ value_type val(2);
663
+ CHECK_EQ(extract(xsimd::log2(T(val))), std::log2(val));
664
+ }
665
+
666
+ void test_log10()
667
+ {
668
+ value_type val(10);
669
+ CHECK_EQ(extract(xsimd::log10(T(val))), std::log10(val));
670
+ }
671
+
672
+ void test_log1p()
673
+ {
674
+ value_type val(0);
675
+ CHECK_EQ(extract(xsimd::log1p(T(val))), std::log1p(val));
676
+ }
677
+
678
+ void test_max_nan()
679
+ {
680
+ value_type val0(2.7818);
681
+ value_type valN(NAN);
682
+ #if XSIMD_WITH_AVX || XSIMD_WITH_SSE2
683
+ using isnan = doctest::IsNaN<value_type>;
684
+ CHECK_EQ(isnan(extract(xsimd::max(T(val0), T(valN)))), isnan(std::max(val0, valN)));
685
+ CHECK_EQ(isnan(extract(xsimd::max(T(valN), T(val0)))), isnan(std::max(valN, val0)));
686
+ #endif
687
+ }
688
+
689
+ void test_min_nan()
690
+ {
691
+ value_type val0(2.7818);
692
+ value_type valN(NAN);
693
+ #if XSIMD_WITH_AVX || XSIMD_WITH_SSE2
694
+ using isnan = doctest::IsNaN<value_type>;
695
+ CHECK_EQ(isnan(extract(xsimd::min(T(val0), T(valN)))), isnan(std::min(val0, valN)));
696
+ CHECK_EQ(isnan(extract(xsimd::min(T(valN), T(val0)))), isnan(std::min(valN, val0)));
697
+ #endif
698
+ }
699
+
700
+ void test_nearbyint()
701
+ {
702
+ value_type val(3.1);
703
+ CHECK_EQ(extract(xsimd::nearbyint(T(val))), std::nearbyint(val));
704
+ }
705
+ void test_nearbyint_as_int()
706
+ {
707
+ value_type val(3.1);
708
+ CHECK_EQ(extract(xsimd::nearbyint_as_int(T(val))), long(std::nearbyint(val)));
709
+ }
710
+ void test_nextafter()
711
+ {
712
+ value_type val0(3);
713
+ value_type val1(4);
714
+ CHECK_EQ(extract(xsimd::nextafter(T(val0), T(val1))), std::nextafter(val0, val1));
715
+ }
716
+ void test_polar()
717
+ {
718
+ value_type val0(3);
719
+ value_type val1(4);
720
+ #if defined(EMSCRIPTEN) || (defined(__APPLE__) && defined(XSIMD_WITH_NEON64))
721
+ CHECK_EQ(std::real(extract(xsimd::polar(T(val0), T(val1)))), doctest::Approx(std::real(std::polar(val0, val1))));
722
+ CHECK_EQ(std::imag(extract(xsimd::polar(T(val0), T(val1)))), doctest::Approx(std::imag(std::polar(val0, val1))));
723
+ #else
724
+ CHECK_EQ(extract(xsimd::polar(T(val0), T(val1))), std::polar(val0, val1));
725
+ #endif
726
+ }
727
+ void test_pow()
728
+ {
729
+ value_type val0(2);
730
+ value_type val1(2);
731
+ int ival1 = 4;
732
+ CHECK_EQ(extract(xsimd::pow(T(val0), T(val1))), std::pow(val0, val1));
733
+ CHECK_EQ(extract(xsimd::pow(T(val0), ival1)), std::pow(val0, ival1));
734
+ }
735
+ void test_reciprocal()
736
+ {
737
+ value_type val(1);
738
+ CHECK_EQ(extract(xsimd::reciprocal(T(val))), doctest::Approx(value_type(1) / val).epsilon(10e-2));
739
+ }
740
+ void test_rint()
741
+ {
742
+ value_type val(3.1);
743
+ CHECK_EQ(extract(xsimd::rint(T(val))), std::rint(val));
744
+ }
745
+ void test_round()
746
+ {
747
+ value_type val(3.1);
748
+ CHECK_EQ(extract(xsimd::round(T(val))), std::round(val));
749
+ }
750
+ void test_rsqrt()
751
+ {
752
+ value_type val(4);
753
+ CHECK_EQ(extract(xsimd::rsqrt(T(val))), doctest::Approx(value_type(1) / std::sqrt(val)).epsilon(10e-4));
754
+ }
755
+ void test_sin()
756
+ {
757
+ value_type val(0);
758
+ CHECK_EQ(extract(xsimd::sin(T(val))), std::sin(val));
759
+ }
760
+ void test_sincos()
761
+ {
762
+ value_type val(0);
763
+ auto vres = xsimd::sincos(T(val));
764
+ CHECK_EQ(extract(vres.first), std::sin(val));
765
+ CHECK_EQ(extract(vres.second), std::cos(val));
766
+ }
767
+ void test_sinh()
768
+ {
769
+ value_type val(0);
770
+ CHECK_EQ(extract(xsimd::sinh(T(val))), std::sinh(val));
771
+ }
772
+ void test_sqrt()
773
+ {
774
+ value_type val(1);
775
+ CHECK_EQ(extract(xsimd::sqrt(T(val))), std::sqrt(val));
776
+ }
777
+ void test_tan()
778
+ {
779
+ value_type val(0);
780
+ CHECK_EQ(extract(xsimd::tan(T(val))), std::tan(val));
781
+ }
782
+ void test_tanh()
783
+ {
784
+ value_type val(0);
785
+ CHECK_EQ(extract(xsimd::tanh(T(val))), std::tanh(val));
786
+ }
787
+ void test_tgamma()
788
+ {
789
+ value_type val(2);
790
+ CHECK_EQ(extract(xsimd::tgamma(T(val))), std::tgamma(val));
791
+ }
792
+ void test_trunc()
793
+ {
794
+ value_type val(2.1);
795
+ CHECK_EQ(extract(xsimd::trunc(T(val))), std::trunc(val));
796
+ }
797
+ };
798
+
799
+ TEST_CASE_TEMPLATE("[xsimd api | float types functions]", B, FLOAT_TYPES)
800
+ {
801
+ xsimd_api_float_types_functions<B> Test;
802
+
803
+ SUBCASE("acos")
804
+ {
805
+ Test.test_acos();
806
+ }
807
+
808
+ SUBCASE("acosh")
809
+ {
810
+ Test.test_acosh();
811
+ }
812
+
813
+ SUBCASE("asin")
814
+ {
815
+ Test.test_asin();
816
+ }
817
+
818
+ SUBCASE("asinh")
819
+ {
820
+ Test.test_asinh();
821
+ }
822
+
823
+ SUBCASE("atan")
824
+ {
825
+ Test.test_atan();
826
+ }
827
+
828
+ SUBCASE("atan2")
829
+ {
830
+ Test.test_atan2();
831
+ }
832
+
833
+ SUBCASE("atanh")
834
+ {
835
+ Test.test_atanh();
836
+ }
837
+
838
+ SUBCASE("cbrt")
839
+ {
840
+ Test.test_cbrt();
841
+ }
842
+
843
+ SUBCASE("ceil")
844
+ {
845
+ Test.test_ceil();
846
+ }
847
+
848
+ SUBCASE("copysign")
849
+ {
850
+ Test.test_copysign();
851
+ }
852
+
853
+ SUBCASE("cos")
854
+ {
855
+ Test.test_cos();
856
+ }
857
+
858
+ SUBCASE("cosh")
859
+ {
860
+ Test.test_cosh();
861
+ }
862
+
863
+ SUBCASE("exp")
864
+ {
865
+ Test.test_exp();
866
+ }
867
+
868
+ SUBCASE("exp10")
869
+ {
870
+ Test.test_exp10();
871
+ }
872
+
873
+ SUBCASE("exp2")
874
+ {
875
+ Test.test_exp2();
876
+ }
877
+
878
+ SUBCASE("expm1")
879
+ {
880
+ Test.test_expm1();
881
+ }
882
+
883
+ SUBCASE("erf")
884
+ {
885
+ Test.test_erf();
886
+ }
887
+
888
+ SUBCASE("erfc")
889
+ {
890
+ Test.test_erfc();
891
+ }
892
+
893
+ SUBCASE("fabs")
894
+ {
895
+ Test.test_fabs();
896
+ }
897
+
898
+ SUBCASE("fdim")
899
+ {
900
+ Test.test_fdim();
901
+ }
902
+
903
+ SUBCASE("floor")
904
+ {
905
+ Test.test_floor();
906
+ }
907
+
908
+ SUBCASE("fmax")
909
+ {
910
+ Test.test_fmax();
911
+ }
912
+
913
+ SUBCASE("fmin")
914
+ {
915
+ Test.test_fmin();
916
+ }
917
+
918
+ SUBCASE("fmod")
919
+ {
920
+ Test.test_fmod();
921
+ }
922
+ SUBCASE("frexp")
923
+ {
924
+ Test.test_frexp();
925
+ }
926
+ SUBCASE("hypot")
927
+ {
928
+ Test.test_hypot();
929
+ }
930
+ SUBCASE("is_even")
931
+ {
932
+ Test.test_is_even();
933
+ }
934
+ SUBCASE("is_flint")
935
+ {
936
+ Test.test_is_flint();
937
+ }
938
+ SUBCASE("is_odd")
939
+ {
940
+ Test.test_is_odd();
941
+ }
942
+ SUBCASE("ldexp")
943
+ {
944
+ Test.test_ldexp();
945
+ }
946
+ SUBCASE("lgamma")
947
+ {
948
+ Test.test_lgamma();
949
+ }
950
+
951
+ SUBCASE("log")
952
+ {
953
+ Test.test_log();
954
+ }
955
+
956
+ SUBCASE("log2")
957
+ {
958
+ Test.test_log2();
959
+ }
960
+
961
+ SUBCASE("log10")
962
+ {
963
+ Test.test_log10();
964
+ }
965
+
966
+ SUBCASE("log1p")
967
+ {
968
+ Test.test_log1p();
969
+ }
970
+
971
+ SUBCASE("max_nan")
972
+ {
973
+ Test.test_max_nan();
974
+ }
975
+
976
+ SUBCASE("min_nan")
977
+ {
978
+ Test.test_min_nan();
979
+ }
980
+
981
+ SUBCASE("nearbyint")
982
+ {
983
+ Test.test_nearbyint();
984
+ }
985
+
986
+ SUBCASE("nearbyint_as_int")
987
+ {
988
+ Test.test_nearbyint_as_int();
989
+ }
990
+
991
+ SUBCASE("nextafter")
992
+ {
993
+ Test.test_nextafter();
994
+ }
995
+
996
+ SUBCASE("polar")
997
+ {
998
+ Test.test_polar();
999
+ }
1000
+
1001
+ SUBCASE("pow")
1002
+ {
1003
+ Test.test_pow();
1004
+ }
1005
+
1006
+ SUBCASE("reciprocal")
1007
+ {
1008
+ Test.test_reciprocal();
1009
+ }
1010
+
1011
+ SUBCASE("rint")
1012
+ {
1013
+ Test.test_rint();
1014
+ }
1015
+
1016
+ SUBCASE("round")
1017
+ {
1018
+ Test.test_round();
1019
+ }
1020
+
1021
+ SUBCASE("rsqrt")
1022
+ {
1023
+ Test.test_rsqrt();
1024
+ }
1025
+
1026
+ SUBCASE("sin")
1027
+ {
1028
+ Test.test_sin();
1029
+ }
1030
+
1031
+ SUBCASE("sincos")
1032
+ {
1033
+ Test.test_sincos();
1034
+ }
1035
+
1036
+ SUBCASE("sinh")
1037
+ {
1038
+ Test.test_sinh();
1039
+ }
1040
+
1041
+ SUBCASE("sqrt")
1042
+ {
1043
+ Test.test_sqrt();
1044
+ }
1045
+
1046
+ SUBCASE("tan")
1047
+ {
1048
+ Test.test_tan();
1049
+ }
1050
+
1051
+ SUBCASE("tanh")
1052
+ {
1053
+ Test.test_tanh();
1054
+ }
1055
+
1056
+ SUBCASE("tgamma")
1057
+ {
1058
+ Test.test_tgamma();
1059
+ }
1060
+
1061
+ SUBCASE("trunc")
1062
+ {
1063
+ Test.test_trunc();
1064
+ }
1065
+ }
1066
+
1067
+ /*
1068
+ * Functions that apply on complex and floating point types only
1069
+ */
1070
+
1071
+ template <typename T>
1072
+ struct xsimd_api_complex_types_functions
1073
+ {
1074
+ using value_type = typename scalar_type<T>::type;
1075
+
1076
+ void test_arg()
1077
+ {
1078
+ value_type val(1);
1079
+ CHECK_EQ(extract(xsimd::arg(T(val))), std::arg(val));
1080
+ }
1081
+
1082
+ void test_conj()
1083
+ {
1084
+ value_type val(1);
1085
+ CHECK_EQ(extract(xsimd::conj(T(val))), std::conj(val));
1086
+ }
1087
+
1088
+ void test_norm()
1089
+ {
1090
+ value_type val(1);
1091
+ CHECK_EQ(extract(xsimd::norm(T(val))), std::norm(val));
1092
+ }
1093
+
1094
+ void test_proj()
1095
+ {
1096
+ value_type val(1);
1097
+ CHECK_EQ(extract(xsimd::proj(T(val))), std::proj(val));
1098
+ }
1099
+
1100
+ #ifndef __FAST_MATH__
1101
+ void test_isinf()
1102
+ {
1103
+ value_type val(4);
1104
+ CHECK_EQ(extract(xsimd::isinf(T(val))), std::isinf(std::real(val)));
1105
+ }
1106
+
1107
+ void test_isfinite()
1108
+ {
1109
+ value_type val(4);
1110
+ CHECK_EQ(extract(xsimd::isfinite(T(val))), std::isfinite(std::real(val)));
1111
+ }
1112
+
1113
+ void test_isnan()
1114
+ {
1115
+ value_type val(4);
1116
+ CHECK_EQ(extract(xsimd::isnan(T(val))), std::isnan(std::real(val)));
1117
+ }
1118
+ #endif
1119
+ };
1120
+
1121
+ TEST_CASE_TEMPLATE("[xsimd api | complex types functions]", B, COMPLEX_TYPES)
1122
+ {
1123
+ xsimd_api_complex_types_functions<B> Test;
1124
+ SUBCASE("arg")
1125
+ {
1126
+ Test.test_arg();
1127
+ }
1128
+
1129
+ SUBCASE("conj")
1130
+ {
1131
+ Test.test_conj();
1132
+ }
1133
+
1134
+ SUBCASE("norm")
1135
+ {
1136
+ Test.test_norm();
1137
+ }
1138
+
1139
+ SUBCASE("proj")
1140
+ {
1141
+ Test.test_proj();
1142
+ }
1143
+
1144
+ #ifndef __FAST_MATH__
1145
+
1146
+ SUBCASE("isinf")
1147
+ {
1148
+ Test.test_isinf();
1149
+ }
1150
+
1151
+ SUBCASE("isfinite")
1152
+ {
1153
+ Test.test_isfinite();
1154
+ }
1155
+
1156
+ SUBCASE("isnan")
1157
+ {
1158
+ Test.test_isnan();
1159
+ }
1160
+ #endif
1161
+ }
1162
+
1163
+ /*
1164
+ * Functions that apply on all signed types
1165
+ */
1166
+ template <typename T>
1167
+ struct xsimd_api_all_signed_types_functions
1168
+ {
1169
+ using value_type = typename scalar_type<T>::type;
1170
+
1171
+ void test_abs()
1172
+ {
1173
+ value_type val(-1);
1174
+ CHECK_EQ(extract(xsimd::abs(T(val))), std::abs(val));
1175
+ }
1176
+
1177
+ void test_fnms()
1178
+ {
1179
+ value_type val0(1);
1180
+ value_type val1(3);
1181
+ value_type val2(5);
1182
+ CHECK_EQ(extract(xsimd::fnms(T(val0), T(val1), T(val2))), -(val0 * val1) - val2);
1183
+ }
1184
+
1185
+ void test_neg()
1186
+ {
1187
+ value_type val(-1);
1188
+ CHECK_EQ(extract(xsimd::neg(T(val))), -val);
1189
+ }
1190
+ };
1191
+
1192
+ TEST_CASE_TEMPLATE("[xsimd api | all signed types functions]", B, ALL_SIGNED_TYPES)
1193
+ {
1194
+ xsimd_api_all_signed_types_functions<B> Test;
1195
+
1196
+ SUBCASE("abs")
1197
+ {
1198
+ Test.test_abs();
1199
+ }
1200
+ SUBCASE("fnms")
1201
+ {
1202
+ Test.test_fnms();
1203
+ }
1204
+ SUBCASE("neg")
1205
+ {
1206
+ Test.test_neg();
1207
+ }
1208
+ }
1209
+
1210
+ /*
1211
+ * Functions that apply on all types
1212
+ */
1213
+
1214
+ template <typename T>
1215
+ struct xsimd_api_all_types_functions
1216
+ {
1217
+ using value_type = typename scalar_type<T>::type;
1218
+
1219
+ void test_add()
1220
+ {
1221
+ value_type val0(1);
1222
+ value_type val1(3);
1223
+ CHECK_EQ(extract(xsimd::add(T(val0), T(val1))), val0 + val1);
1224
+ }
1225
+
1226
+ void test_avg()
1227
+ {
1228
+ value_type val0(1);
1229
+ value_type val1(3);
1230
+ CHECK_EQ(extract(xsimd::avg(T(val0), T(val1))), (val0 + val1) / value_type(2));
1231
+
1232
+ value_type val2(2);
1233
+ value_type val3(3);
1234
+ if (std::is_integral<value_type>::value)
1235
+ CHECK_EQ(extract(xsimd::avgr(T(val2), T(val3))), (val2 + val3 + 1) / value_type(2));
1236
+ else
1237
+ CHECK_EQ(extract(xsimd::avgr(T(val2), T(val3))), (val2 + val3) / value_type(2));
1238
+ }
1239
+
1240
+ void test_decr()
1241
+ {
1242
+ value_type val0(1);
1243
+ CHECK_EQ(extract(xsimd::decr(T(val0))), val0 - value_type(1));
1244
+ }
1245
+
1246
+ void test_decr_if()
1247
+ {
1248
+ value_type val0(1);
1249
+ CHECK_EQ(extract(xsimd::decr_if(T(val0), T(val0) != T(0))), val0 - value_type(1));
1250
+ }
1251
+
1252
+ void test_div()
1253
+ {
1254
+ value_type val0(1);
1255
+ value_type val1(2);
1256
+ CHECK_EQ(extract(xsimd::div(T(val0), T(val1))), val0 / val1);
1257
+ }
1258
+
1259
+ void test_eq()
1260
+ {
1261
+ value_type val0(1);
1262
+ value_type val1(3);
1263
+ CHECK_EQ(extract(xsimd::eq(T(val0), T(val1))), val0 == val1);
1264
+ }
1265
+
1266
+ void test_fma()
1267
+ {
1268
+ value_type val0(1);
1269
+ value_type val1(3);
1270
+ value_type val2(5);
1271
+ CHECK_EQ(extract(xsimd::fma(T(val0), T(val1), T(val2))), val0 * val1 + val2);
1272
+ }
1273
+
1274
+ void test_fms()
1275
+ {
1276
+ value_type val0(1);
1277
+ value_type val1(5);
1278
+ value_type val2(3);
1279
+ CHECK_EQ(extract(xsimd::fms(T(val0), T(val1), T(val2))), val0 * val1 - val2);
1280
+ }
1281
+
1282
+ void test_fnma()
1283
+ {
1284
+ value_type val0(1);
1285
+ value_type val1(3);
1286
+ value_type val2(5);
1287
+ CHECK_EQ(extract(xsimd::fnma(T(val0), T(val1), T(val2))), -(val0 * val1) + val2);
1288
+ }
1289
+
1290
+ void test_incr()
1291
+ {
1292
+ value_type val0(1);
1293
+ CHECK_EQ(extract(xsimd::incr(T(val0))), val0 + value_type(1));
1294
+ }
1295
+
1296
+ void test_incr_if()
1297
+ {
1298
+ value_type val0(1);
1299
+ CHECK_EQ(extract(xsimd::incr_if(T(val0), T(val0) != T(0))), val0 + value_type(1));
1300
+ }
1301
+
1302
+ void test_mul()
1303
+ {
1304
+ value_type val0(2);
1305
+ value_type val1(3);
1306
+ CHECK_EQ(extract(xsimd::mul(T(val0), T(val1))), val0 * val1);
1307
+ }
1308
+ void test_neq()
1309
+ {
1310
+ value_type val0(1);
1311
+ value_type val1(3);
1312
+ CHECK_EQ(extract(xsimd::neq(T(val0), T(val1))), val0 != val1);
1313
+ }
1314
+ void test_pos()
1315
+ {
1316
+ value_type val(1);
1317
+ CHECK_EQ(extract(xsimd::pos(T(val))), +val);
1318
+ }
1319
+ void test_select()
1320
+ {
1321
+ value_type val0(2);
1322
+ value_type val1(3);
1323
+ CHECK_EQ(extract(xsimd::select(T(val0) != T(val1), T(val0), T(val1))), val0 != val1 ? val0 : val1);
1324
+ }
1325
+ void test_sub()
1326
+ {
1327
+ value_type val0(3);
1328
+ value_type val1(2);
1329
+ CHECK_EQ(extract(xsimd::sub(T(val0), T(val1))), val0 - val1);
1330
+ }
1331
+ };
1332
+
1333
+ TEST_CASE_TEMPLATE("[xsimd api | all types functions]", B, ALL_TYPES)
1334
+ {
1335
+ xsimd_api_all_types_functions<B> Test;
1336
+
1337
+ SUBCASE("add")
1338
+ {
1339
+ Test.test_add();
1340
+ }
1341
+
1342
+ SUBCASE("decr")
1343
+ {
1344
+ Test.test_decr();
1345
+ Test.test_decr_if();
1346
+ }
1347
+
1348
+ SUBCASE("div")
1349
+ {
1350
+ Test.test_div();
1351
+ }
1352
+
1353
+ SUBCASE("eq")
1354
+ {
1355
+ Test.test_eq();
1356
+ }
1357
+
1358
+ SUBCASE("fma")
1359
+ {
1360
+ Test.test_fma();
1361
+ }
1362
+
1363
+ SUBCASE("fms")
1364
+ {
1365
+ Test.test_fms();
1366
+ }
1367
+
1368
+ SUBCASE("fnma")
1369
+ {
1370
+ Test.test_fnma();
1371
+ }
1372
+
1373
+ SUBCASE("incr")
1374
+ {
1375
+ Test.test_incr();
1376
+ Test.test_incr_if();
1377
+ }
1378
+
1379
+ SUBCASE("mul")
1380
+ {
1381
+ Test.test_mul();
1382
+ }
1383
+
1384
+ SUBCASE("neq")
1385
+ {
1386
+ Test.test_neq();
1387
+ }
1388
+
1389
+ SUBCASE("pos")
1390
+ {
1391
+ Test.test_pos();
1392
+ }
1393
+ SUBCASE("select")
1394
+ {
1395
+ Test.test_select();
1396
+ }
1397
+ SUBCASE("sub")
1398
+ {
1399
+ Test.test_sub();
1400
+ }
1401
+ }
1402
+
1403
+ /*
1404
+ * Functions that apply only to floating point types
1405
+ */
1406
+ #ifndef __FAST_MATH__
1407
+ template <typename T>
1408
+ struct xsimd_api_all_floating_point_types_functions
1409
+ {
1410
+ using value_type = typename scalar_type<T>::type;
1411
+
1412
+ void test_neq_nan()
1413
+ {
1414
+ value_type valNaN(std::numeric_limits<value_type>::signaling_NaN());
1415
+ value_type val1(1.0);
1416
+ CHECK_EQ(extract(xsimd::neq(T(valNaN), T(val1))), valNaN != val1);
1417
+ }
1418
+ };
1419
+
1420
+ TEST_CASE_TEMPLATE("[xsimd api | all floating point types functions]", B, ALL_FLOATING_POINT_TYPES)
1421
+ {
1422
+ xsimd_api_all_floating_point_types_functions<B> Test;
1423
+ Test.test_neq_nan();
1424
+ }
1425
+ #endif
1426
+
1427
+ /*
1428
+ * Functions that apply only to mask type
1429
+ */
1430
+ template <typename T>
1431
+ struct xsimd_api_all_mask_functions
1432
+ {
1433
+ using value_type = typename scalar_type<T>::type;
1434
+
1435
+ void test_all()
1436
+ {
1437
+ value_type val(1);
1438
+ CHECK_EQ(xsimd::all(T(val) == T(val)), xsimd::all(val == val));
1439
+ }
1440
+
1441
+ void test_any()
1442
+ {
1443
+ value_type val(1);
1444
+ CHECK_EQ(xsimd::any(T(val) == T(val)), xsimd::any(val == val));
1445
+ }
1446
+
1447
+ void test_none()
1448
+ {
1449
+ value_type val(1);
1450
+ CHECK_EQ(xsimd::none(T(val) != T(val)), xsimd::none(val != val));
1451
+ }
1452
+ };
1453
+
1454
+ TEST_CASE_TEMPLATE("[xsimd api | all mask functions]", B, ALL_TYPES)
1455
+ {
1456
+ xsimd_api_all_mask_functions<B> Test;
1457
+ Test.test_all();
1458
+ Test.test_any();
1459
+ Test.test_none();
1460
+ }