sequenzo 0.1.21__cp312-cp312-macosx_11_0_arm64.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 (260) hide show
  1. sequenzo/__init__.py +240 -0
  2. sequenzo/big_data/__init__.py +12 -0
  3. sequenzo/big_data/clara/__init__.py +26 -0
  4. sequenzo/big_data/clara/clara.py +467 -0
  5. sequenzo/big_data/clara/utils/__init__.py +27 -0
  6. sequenzo/big_data/clara/utils/aggregatecases.py +92 -0
  7. sequenzo/big_data/clara/utils/davies_bouldin.py +91 -0
  8. sequenzo/big_data/clara/utils/get_weighted_diss.cpython-312-darwin.so +0 -0
  9. sequenzo/big_data/clara/utils/wfcmdd.py +205 -0
  10. sequenzo/big_data/clara/visualization.py +88 -0
  11. sequenzo/clustering/KMedoids.py +196 -0
  12. sequenzo/clustering/__init__.py +30 -0
  13. sequenzo/clustering/clustering_c_code.cpython-312-darwin.so +0 -0
  14. sequenzo/clustering/hierarchical_clustering.py +1380 -0
  15. sequenzo/clustering/src/KMedoid.cpp +262 -0
  16. sequenzo/clustering/src/PAM.cpp +236 -0
  17. sequenzo/clustering/src/PAMonce.cpp +234 -0
  18. sequenzo/clustering/src/cluster_quality.cpp +496 -0
  19. sequenzo/clustering/src/cluster_quality.h +128 -0
  20. sequenzo/clustering/src/cluster_quality_backup.cpp +570 -0
  21. sequenzo/clustering/src/module.cpp +228 -0
  22. sequenzo/clustering/src/weightedinertia.cpp +111 -0
  23. sequenzo/clustering/utils/__init__.py +27 -0
  24. sequenzo/clustering/utils/disscenter.py +122 -0
  25. sequenzo/data_preprocessing/__init__.py +20 -0
  26. sequenzo/data_preprocessing/helpers.py +256 -0
  27. sequenzo/datasets/__init__.py +41 -0
  28. sequenzo/datasets/biofam.csv +2001 -0
  29. sequenzo/datasets/biofam_child_domain.csv +2001 -0
  30. sequenzo/datasets/biofam_left_domain.csv +2001 -0
  31. sequenzo/datasets/biofam_married_domain.csv +2001 -0
  32. sequenzo/datasets/chinese_colonial_territories.csv +12 -0
  33. sequenzo/datasets/country_co2_emissions.csv +194 -0
  34. sequenzo/datasets/country_co2_emissions_global_deciles.csv +195 -0
  35. sequenzo/datasets/country_co2_emissions_global_quintiles.csv +195 -0
  36. sequenzo/datasets/country_co2_emissions_local_deciles.csv +195 -0
  37. sequenzo/datasets/country_co2_emissions_local_quintiles.csv +195 -0
  38. sequenzo/datasets/country_gdp_per_capita.csv +194 -0
  39. sequenzo/datasets/mvad.csv +713 -0
  40. sequenzo/datasets/pairfam_family.csv +1867 -0
  41. sequenzo/datasets/polyadic_samplec1.csv +61 -0
  42. sequenzo/datasets/polyadic_samplep1.csv +61 -0
  43. sequenzo/datasets/polyadic_seqc1.csv +61 -0
  44. sequenzo/datasets/polyadic_seqp1.csv +61 -0
  45. sequenzo/define_sequence_data.py +609 -0
  46. sequenzo/dissimilarity_measures/__init__.py +31 -0
  47. sequenzo/dissimilarity_measures/c_code.cpython-312-darwin.so +0 -0
  48. sequenzo/dissimilarity_measures/get_distance_matrix.py +702 -0
  49. sequenzo/dissimilarity_measures/get_substitution_cost_matrix.py +241 -0
  50. sequenzo/dissimilarity_measures/src/DHDdistance.cpp +148 -0
  51. sequenzo/dissimilarity_measures/src/LCPdistance.cpp +114 -0
  52. sequenzo/dissimilarity_measures/src/OMdistance.cpp +247 -0
  53. sequenzo/dissimilarity_measures/src/OMspellDistance.cpp +281 -0
  54. sequenzo/dissimilarity_measures/src/__init__.py +0 -0
  55. sequenzo/dissimilarity_measures/src/dist2matrix.cpp +63 -0
  56. sequenzo/dissimilarity_measures/src/dp_utils.h +160 -0
  57. sequenzo/dissimilarity_measures/src/module.cpp +34 -0
  58. sequenzo/dissimilarity_measures/src/setup.py +30 -0
  59. sequenzo/dissimilarity_measures/src/utils.h +25 -0
  60. sequenzo/dissimilarity_measures/src/xsimd/.github/cmake-test/main.cpp +6 -0
  61. sequenzo/dissimilarity_measures/src/xsimd/benchmark/main.cpp +159 -0
  62. sequenzo/dissimilarity_measures/src/xsimd/benchmark/xsimd_benchmark.hpp +565 -0
  63. sequenzo/dissimilarity_measures/src/xsimd/docs/source/conf.py +37 -0
  64. sequenzo/dissimilarity_measures/src/xsimd/examples/mandelbrot.cpp +330 -0
  65. sequenzo/dissimilarity_measures/src/xsimd/examples/pico_bench.hpp +246 -0
  66. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_arithmetic.hpp +266 -0
  67. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_complex.hpp +112 -0
  68. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_details.hpp +323 -0
  69. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_logical.hpp +218 -0
  70. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_math.hpp +2583 -0
  71. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_memory.hpp +880 -0
  72. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_rounding.hpp +72 -0
  73. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_swizzle.hpp +174 -0
  74. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_trigo.hpp +978 -0
  75. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx.hpp +1924 -0
  76. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx2.hpp +1144 -0
  77. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512bw.hpp +656 -0
  78. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512cd.hpp +28 -0
  79. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512dq.hpp +244 -0
  80. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512er.hpp +20 -0
  81. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512f.hpp +2650 -0
  82. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512ifma.hpp +20 -0
  83. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512pf.hpp +20 -0
  84. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi.hpp +77 -0
  85. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi2.hpp +131 -0
  86. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512bw.hpp +20 -0
  87. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512vbmi2.hpp +20 -0
  88. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avxvnni.hpp +20 -0
  89. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common.hpp +24 -0
  90. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common_fwd.hpp +77 -0
  91. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_constants.hpp +393 -0
  92. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_emulated.hpp +788 -0
  93. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx.hpp +93 -0
  94. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx2.hpp +46 -0
  95. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_sse.hpp +97 -0
  96. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma4.hpp +92 -0
  97. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_i8mm_neon64.hpp +17 -0
  98. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_isa.hpp +142 -0
  99. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon.hpp +3142 -0
  100. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon64.hpp +1543 -0
  101. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_rvv.hpp +1513 -0
  102. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_scalar.hpp +1260 -0
  103. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse2.hpp +2024 -0
  104. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse3.hpp +67 -0
  105. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_1.hpp +339 -0
  106. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_2.hpp +44 -0
  107. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_ssse3.hpp +186 -0
  108. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sve.hpp +1155 -0
  109. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_vsx.hpp +892 -0
  110. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_wasm.hpp +1780 -0
  111. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_arch.hpp +240 -0
  112. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_config.hpp +484 -0
  113. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_cpuid.hpp +269 -0
  114. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_inline.hpp +27 -0
  115. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/math/xsimd_rem_pio2.hpp +719 -0
  116. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp +349 -0
  117. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_alignment.hpp +91 -0
  118. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_all_registers.hpp +55 -0
  119. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_api.hpp +2765 -0
  120. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx2_register.hpp +44 -0
  121. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512bw_register.hpp +51 -0
  122. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512cd_register.hpp +51 -0
  123. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512dq_register.hpp +51 -0
  124. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512er_register.hpp +51 -0
  125. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512f_register.hpp +77 -0
  126. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512ifma_register.hpp +51 -0
  127. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512pf_register.hpp +51 -0
  128. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi2_register.hpp +51 -0
  129. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi_register.hpp +51 -0
  130. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512bw_register.hpp +54 -0
  131. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512vbmi2_register.hpp +53 -0
  132. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx_register.hpp +64 -0
  133. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avxvnni_register.hpp +44 -0
  134. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch.hpp +1524 -0
  135. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch_constant.hpp +300 -0
  136. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_common_arch.hpp +47 -0
  137. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_emulated_register.hpp +80 -0
  138. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx2_register.hpp +50 -0
  139. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx_register.hpp +50 -0
  140. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_sse_register.hpp +50 -0
  141. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma4_register.hpp +50 -0
  142. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_i8mm_neon64_register.hpp +55 -0
  143. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon64_register.hpp +55 -0
  144. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon_register.hpp +154 -0
  145. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_register.hpp +94 -0
  146. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_rvv_register.hpp +506 -0
  147. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse2_register.hpp +59 -0
  148. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse3_register.hpp +49 -0
  149. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_1_register.hpp +48 -0
  150. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_2_register.hpp +48 -0
  151. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_ssse3_register.hpp +48 -0
  152. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sve_register.hpp +156 -0
  153. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_traits.hpp +337 -0
  154. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_utils.hpp +536 -0
  155. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_vsx_register.hpp +77 -0
  156. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_wasm_register.hpp +59 -0
  157. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/xsimd.hpp +75 -0
  158. sequenzo/dissimilarity_measures/src/xsimd/test/architectures/dummy.cpp +7 -0
  159. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set.cpp +13 -0
  160. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean.cpp +24 -0
  161. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_aligned.cpp +25 -0
  162. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_arch_independent.cpp +28 -0
  163. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_tag_dispatch.cpp +25 -0
  164. sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_abstract_batches.cpp +7 -0
  165. sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_parametric_batches.cpp +8 -0
  166. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum.hpp +31 -0
  167. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_avx2.cpp +3 -0
  168. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_sse2.cpp +3 -0
  169. sequenzo/dissimilarity_measures/src/xsimd/test/doc/writing_vectorized_code.cpp +11 -0
  170. sequenzo/dissimilarity_measures/src/xsimd/test/main.cpp +31 -0
  171. sequenzo/dissimilarity_measures/src/xsimd/test/test_api.cpp +230 -0
  172. sequenzo/dissimilarity_measures/src/xsimd/test/test_arch.cpp +217 -0
  173. sequenzo/dissimilarity_measures/src/xsimd/test/test_basic_math.cpp +183 -0
  174. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch.cpp +1049 -0
  175. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_bool.cpp +508 -0
  176. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_cast.cpp +409 -0
  177. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_complex.cpp +712 -0
  178. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_constant.cpp +286 -0
  179. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_float.cpp +141 -0
  180. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_int.cpp +365 -0
  181. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_manip.cpp +308 -0
  182. sequenzo/dissimilarity_measures/src/xsimd/test/test_bitwise_cast.cpp +222 -0
  183. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_exponential.cpp +226 -0
  184. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_hyperbolic.cpp +183 -0
  185. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_power.cpp +265 -0
  186. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_trigonometric.cpp +236 -0
  187. sequenzo/dissimilarity_measures/src/xsimd/test/test_conversion.cpp +248 -0
  188. sequenzo/dissimilarity_measures/src/xsimd/test/test_custom_default_arch.cpp +28 -0
  189. sequenzo/dissimilarity_measures/src/xsimd/test/test_error_gamma.cpp +170 -0
  190. sequenzo/dissimilarity_measures/src/xsimd/test/test_explicit_batch_instantiation.cpp +32 -0
  191. sequenzo/dissimilarity_measures/src/xsimd/test/test_exponential.cpp +202 -0
  192. sequenzo/dissimilarity_measures/src/xsimd/test/test_extract_pair.cpp +92 -0
  193. sequenzo/dissimilarity_measures/src/xsimd/test/test_fp_manipulation.cpp +77 -0
  194. sequenzo/dissimilarity_measures/src/xsimd/test/test_gnu_source.cpp +30 -0
  195. sequenzo/dissimilarity_measures/src/xsimd/test/test_hyperbolic.cpp +167 -0
  196. sequenzo/dissimilarity_measures/src/xsimd/test/test_load_store.cpp +304 -0
  197. sequenzo/dissimilarity_measures/src/xsimd/test/test_memory.cpp +61 -0
  198. sequenzo/dissimilarity_measures/src/xsimd/test/test_poly_evaluation.cpp +64 -0
  199. sequenzo/dissimilarity_measures/src/xsimd/test/test_power.cpp +184 -0
  200. sequenzo/dissimilarity_measures/src/xsimd/test/test_rounding.cpp +199 -0
  201. sequenzo/dissimilarity_measures/src/xsimd/test/test_select.cpp +101 -0
  202. sequenzo/dissimilarity_measures/src/xsimd/test/test_shuffle.cpp +760 -0
  203. sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.cpp +4 -0
  204. sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.hpp +34 -0
  205. sequenzo/dissimilarity_measures/src/xsimd/test/test_traits.cpp +172 -0
  206. sequenzo/dissimilarity_measures/src/xsimd/test/test_trigonometric.cpp +208 -0
  207. sequenzo/dissimilarity_measures/src/xsimd/test/test_utils.hpp +611 -0
  208. sequenzo/dissimilarity_measures/src/xsimd/test/test_wasm/test_wasm_playwright.py +123 -0
  209. sequenzo/dissimilarity_measures/src/xsimd/test/test_xsimd_api.cpp +1460 -0
  210. sequenzo/dissimilarity_measures/utils/__init__.py +16 -0
  211. sequenzo/dissimilarity_measures/utils/get_LCP_length_for_2_seq.py +44 -0
  212. sequenzo/dissimilarity_measures/utils/get_sm_trate_substitution_cost_matrix.cpython-312-darwin.so +0 -0
  213. sequenzo/dissimilarity_measures/utils/seqconc.cpython-312-darwin.so +0 -0
  214. sequenzo/dissimilarity_measures/utils/seqdss.cpython-312-darwin.so +0 -0
  215. sequenzo/dissimilarity_measures/utils/seqdur.cpython-312-darwin.so +0 -0
  216. sequenzo/dissimilarity_measures/utils/seqlength.cpython-312-darwin.so +0 -0
  217. sequenzo/multidomain/__init__.py +23 -0
  218. sequenzo/multidomain/association_between_domains.py +311 -0
  219. sequenzo/multidomain/cat.py +431 -0
  220. sequenzo/multidomain/combt.py +519 -0
  221. sequenzo/multidomain/dat.py +89 -0
  222. sequenzo/multidomain/idcd.py +139 -0
  223. sequenzo/multidomain/linked_polyad.py +292 -0
  224. sequenzo/openmp_setup.py +233 -0
  225. sequenzo/prefix_tree/__init__.py +43 -0
  226. sequenzo/prefix_tree/individual_level_indicators.py +1274 -0
  227. sequenzo/prefix_tree/system_level_indicators.py +465 -0
  228. sequenzo/prefix_tree/utils.py +54 -0
  229. sequenzo/sequence_characteristics/__init__.py +40 -0
  230. sequenzo/sequence_characteristics/complexity_index.py +49 -0
  231. sequenzo/sequence_characteristics/overall_cross_sectional_entropy.py +220 -0
  232. sequenzo/sequence_characteristics/plot_characteristics.py +593 -0
  233. sequenzo/sequence_characteristics/simple_characteristics.py +311 -0
  234. sequenzo/sequence_characteristics/state_frequencies_and_entropy_per_sequence.py +39 -0
  235. sequenzo/sequence_characteristics/turbulence.py +155 -0
  236. sequenzo/sequence_characteristics/variance_of_spell_durations.py +86 -0
  237. sequenzo/sequence_characteristics/within_sequence_entropy.py +43 -0
  238. sequenzo/suffix_tree/__init__.py +48 -0
  239. sequenzo/suffix_tree/individual_level_indicators.py +1638 -0
  240. sequenzo/suffix_tree/system_level_indicators.py +456 -0
  241. sequenzo/suffix_tree/utils.py +56 -0
  242. sequenzo/visualization/__init__.py +29 -0
  243. sequenzo/visualization/plot_mean_time.py +194 -0
  244. sequenzo/visualization/plot_modal_state.py +276 -0
  245. sequenzo/visualization/plot_most_frequent_sequences.py +147 -0
  246. sequenzo/visualization/plot_relative_frequency.py +404 -0
  247. sequenzo/visualization/plot_sequence_index.py +937 -0
  248. sequenzo/visualization/plot_single_medoid.py +153 -0
  249. sequenzo/visualization/plot_state_distribution.py +613 -0
  250. sequenzo/visualization/plot_transition_matrix.py +190 -0
  251. sequenzo/visualization/utils/__init__.py +23 -0
  252. sequenzo/visualization/utils/utils.py +310 -0
  253. sequenzo/with_event_history_analysis/__init__.py +35 -0
  254. sequenzo/with_event_history_analysis/sequence_analysis_multi_state_model.py +850 -0
  255. sequenzo/with_event_history_analysis/sequence_history_analysis.py +283 -0
  256. sequenzo-0.1.21.dist-info/METADATA +308 -0
  257. sequenzo-0.1.21.dist-info/RECORD +254 -0
  258. sequenzo-0.1.21.dist-info/WHEEL +5 -0
  259. sequenzo-0.1.21.dist-info/licenses/LICENSE +28 -0
  260. sequenzo-0.1.21.dist-info/top_level.txt +1 -0
@@ -0,0 +1,61 @@
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/xsimd.hpp"
13
+ #ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
14
+
15
+ #include <type_traits>
16
+ #include <vector>
17
+
18
+ #include "doctest/doctest.h"
19
+
20
+ #include "xsimd/memory/xsimd_aligned_allocator.hpp"
21
+ #include "xsimd/memory/xsimd_alignment.hpp"
22
+
23
+ struct mock_container
24
+ {
25
+ };
26
+
27
+ TEST_CASE("[alignment]")
28
+ {
29
+ using u_vector_type = std::vector<double>;
30
+ using a_vector_type = std::vector<double, xsimd::default_allocator<double>>;
31
+
32
+ using u_vector_align = xsimd::container_alignment_t<u_vector_type>;
33
+ using a_vector_align = xsimd::container_alignment_t<a_vector_type>;
34
+ using mock_align = xsimd::container_alignment_t<mock_container>;
35
+
36
+ if (xsimd::default_arch::requires_alignment())
37
+ {
38
+ CHECK_UNARY((std::is_same<u_vector_align, xsimd::unaligned_mode>::value));
39
+ CHECK_UNARY((std::is_same<a_vector_align, xsimd::aligned_mode>::value));
40
+ CHECK_UNARY((std::is_same<mock_align, xsimd::unaligned_mode>::value));
41
+ }
42
+ }
43
+
44
+ TEST_CASE("[is_aligned]")
45
+ {
46
+ float f[100];
47
+ void* unaligned_f = static_cast<void*>(&f[0]);
48
+ constexpr std::size_t alignment = xsimd::default_arch::alignment();
49
+ std::size_t aligned_f_size = sizeof(f);
50
+ void* aligned_f = std::align(alignment, sizeof(f), unaligned_f, aligned_f_size);
51
+ CHECK_UNARY(xsimd::is_aligned(aligned_f));
52
+
53
+ // GCC does not generate correct alignment on ARM
54
+ // (see https://godbolt.org/z/obv1n8bWq)
55
+ #if !(XSIMD_WITH_NEON && defined(__GNUC__) && !defined(__clang__))
56
+ alignas(alignment) char aligned[8];
57
+ CHECK_UNARY(xsimd::is_aligned(&aligned[0]));
58
+ CHECK_UNARY(!xsimd::is_aligned(&aligned[3]));
59
+ #endif
60
+ }
61
+ #endif
@@ -0,0 +1,64 @@
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/xsimd.hpp"
13
+ #ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
14
+
15
+ #include "test_utils.hpp"
16
+
17
+ template <class B>
18
+ struct poly_evaluation_test
19
+ {
20
+ using batch_type = B;
21
+ using value_type = typename B::value_type;
22
+ static constexpr size_t size = B::size;
23
+ using vector_type = std::vector<value_type>;
24
+
25
+ size_t nb_input;
26
+ vector_type input;
27
+ vector_type horner_res;
28
+ vector_type estrin_res;
29
+
30
+ poly_evaluation_test()
31
+ {
32
+ nb_input = size * 10000;
33
+ input.resize(nb_input);
34
+ for (size_t i = 0; i < nb_input; ++i)
35
+ {
36
+ input[i] = value_type(i) / 4 + value_type(1.2) * std::sqrt(value_type(i + 0.25));
37
+ }
38
+ horner_res.resize(nb_input);
39
+ estrin_res.resize(nb_input);
40
+ }
41
+
42
+ void test_poly_evaluation()
43
+ {
44
+ batch_type in, out;
45
+ for (size_t i = 0; i < nb_input; i += size)
46
+ {
47
+ detail::load_batch(in, input, i);
48
+ out = xsimd::kernel::horner<typename batch_type::value_type, typename batch_type::arch_type, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16>(in);
49
+ detail::store_batch(out, horner_res, i);
50
+ out = xsimd::kernel::estrin<typename batch_type::value_type, typename batch_type::arch_type, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16>(in);
51
+ detail::store_batch(out, estrin_res, i);
52
+ }
53
+ size_t diff = detail::get_nb_diff(horner_res, estrin_res);
54
+ CHECK_EQ(diff, 0);
55
+ }
56
+ };
57
+
58
+ TEST_CASE_TEMPLATE("[poly evaluation]", B, BATCH_FLOAT_TYPES)
59
+ {
60
+
61
+ poly_evaluation_test<B> Test;
62
+ Test.test_poly_evaluation();
63
+ }
64
+ #endif
@@ -0,0 +1,184 @@
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/xsimd.hpp"
13
+ #ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
14
+
15
+ #include "test_utils.hpp"
16
+ #include <iostream>
17
+
18
+ template <class B>
19
+ struct power_test
20
+ {
21
+ using batch_type = B;
22
+ using value_type = typename B::value_type;
23
+ static constexpr size_t size = B::size;
24
+ using vector_type = std::vector<value_type>;
25
+
26
+ size_t nb_input;
27
+ vector_type zero_input;
28
+ vector_type zlhs_input;
29
+ vector_type lhs_input;
30
+ vector_type rhs_input;
31
+ vector_type expected;
32
+ vector_type res;
33
+
34
+ power_test()
35
+ {
36
+ nb_input = size * 10000;
37
+ zero_input.resize(nb_input);
38
+ zlhs_input.resize(nb_input);
39
+ lhs_input.resize(nb_input);
40
+ rhs_input.resize(nb_input);
41
+ for (size_t i = 0; i < nb_input; ++i)
42
+ {
43
+ zero_input[i] = 0;
44
+ lhs_input[i] = value_type(i / 4 + 1.2 * std::sqrt(i + 0.25));
45
+ zlhs_input[i] = lhs_input[i] * (i % 2);
46
+ rhs_input[i] = value_type(10.2 / (i + 2) + 0.25);
47
+ }
48
+
49
+ expected.resize(nb_input);
50
+ res.resize(nb_input);
51
+ }
52
+
53
+ void test_power_functions()
54
+ {
55
+ // pow
56
+ {
57
+ std::transform(lhs_input.cbegin(), lhs_input.cend(), rhs_input.cbegin(), expected.begin(),
58
+ [](const value_type& l, const value_type& r)
59
+ { return std::pow(l, r); });
60
+ batch_type lhs_in, rhs_in, out;
61
+ for (size_t i = 0; i < nb_input; i += size)
62
+ {
63
+ detail::load_batch(lhs_in, lhs_input, i);
64
+ detail::load_batch(rhs_in, rhs_input, i);
65
+ out = pow(lhs_in, rhs_in);
66
+ detail::store_batch(out, res, i);
67
+ }
68
+ size_t diff = detail::get_nb_diff(res, expected);
69
+ INFO("pow");
70
+ CHECK_EQ(diff, 0);
71
+ }
72
+ // pow zero
73
+ {
74
+ std::transform(zlhs_input.cbegin(), zlhs_input.cend(), rhs_input.cbegin(), expected.begin(),
75
+ [](const value_type& l, const value_type& r)
76
+ { return std::pow(l, r); });
77
+ batch_type zlhs_in, rhs_in, out;
78
+ for (size_t i = 0; i < nb_input; i += size)
79
+ {
80
+ detail::load_batch(zlhs_in, zlhs_input, i);
81
+ detail::load_batch(rhs_in, rhs_input, i);
82
+ out = pow(zlhs_in, rhs_in);
83
+ detail::store_batch(out, res, i);
84
+ }
85
+ size_t diff = detail::get_nb_diff(res, expected);
86
+ INFO("0 ^ x");
87
+ CHECK_EQ(diff, 0);
88
+
89
+ // use of undeclared identifier '_MM_SET_EXCEPTION_MASK for emscripten
90
+ #if defined(__SSE__) && !defined(EMSCRIPTEN)
91
+ // Test with FE_INVALID...
92
+ unsigned mask = _MM_GET_EXCEPTION_MASK();
93
+ _MM_SET_EXCEPTION_MASK(mask & ~_MM_MASK_INVALID);
94
+ for (size_t i = 0; i < nb_input; i += size)
95
+ {
96
+ detail::load_batch(zlhs_in, zlhs_input, i);
97
+ detail::load_batch(rhs_in, rhs_input, i);
98
+ out = pow(zlhs_in, rhs_in);
99
+ detail::store_batch(out, res, i);
100
+ }
101
+ _MM_SET_EXCEPTION_MASK(mask);
102
+ diff = detail::get_nb_diff(res, expected);
103
+ INFO("0 ^ x with exception");
104
+ CHECK_EQ(diff, 0);
105
+ #endif
106
+ }
107
+ #ifndef __FAST_MATH__
108
+ // pow 0^-x
109
+ {
110
+ std::transform(zero_input.cbegin(), zero_input.cend(), rhs_input.cbegin(), expected.begin(),
111
+ [](const value_type& z, const value_type& r)
112
+ { return std::pow(z, -r); });
113
+ batch_type zero_in, rhs_in, out;
114
+ for (size_t i = 0; i < nb_input; i += size)
115
+ {
116
+ detail::load_batch(zero_in, zero_input, i);
117
+ detail::load_batch(rhs_in, rhs_input, i);
118
+ out = pow(zero_in, -rhs_in);
119
+ detail::store_batch(out, res, i);
120
+ }
121
+ size_t diff = detail::get_nb_diff(res, expected);
122
+ INFO("pow(0, -x)");
123
+ CHECK_EQ(diff, 0);
124
+ }
125
+ #endif
126
+ // ipow
127
+ {
128
+ long k = 0;
129
+ std::transform(lhs_input.cbegin(), lhs_input.cend(), expected.begin(),
130
+ [&k, this](const value_type& l)
131
+ { auto arg = k / size / 8000 - nb_input / size / 8000 / 2; ++k; return std::pow(l, arg); });
132
+ batch_type lhs_in, out;
133
+ for (size_t i = 0; i < nb_input; i += size)
134
+ {
135
+ detail::load_batch(lhs_in, lhs_input, i);
136
+ out = pow(lhs_in, i / size / 8000 - nb_input / size / 8000 / 2);
137
+ detail::store_batch(out, res, i);
138
+ }
139
+ size_t diff = detail::get_nb_diff(res, expected);
140
+ INFO("ipow");
141
+ CHECK_EQ(diff, 0);
142
+ }
143
+ // hypot
144
+ {
145
+ std::transform(lhs_input.cbegin(), lhs_input.cend(), rhs_input.cbegin(), expected.begin(),
146
+ [](const value_type& l, const value_type& r)
147
+ { return std::hypot(l, r); });
148
+ batch_type lhs_in, rhs_in, out;
149
+ for (size_t i = 0; i < nb_input; i += size)
150
+ {
151
+ detail::load_batch(lhs_in, lhs_input, i);
152
+ detail::load_batch(rhs_in, rhs_input, i);
153
+ out = hypot(lhs_in, rhs_in);
154
+ detail::store_batch(out, res, i);
155
+ }
156
+ size_t diff = detail::get_nb_diff(res, expected);
157
+ INFO("hypot");
158
+ CHECK_EQ(diff, 0);
159
+ }
160
+ // cbrt
161
+ {
162
+ std::transform(lhs_input.cbegin(), lhs_input.cend(), expected.begin(),
163
+ [](const value_type& l)
164
+ { return std::cbrt(l); });
165
+ batch_type lhs_in, out;
166
+ for (size_t i = 0; i < nb_input; i += size)
167
+ {
168
+ detail::load_batch(lhs_in, lhs_input, i);
169
+ out = cbrt(lhs_in);
170
+ detail::store_batch(out, res, i);
171
+ }
172
+ size_t diff = detail::get_nb_diff(res, expected);
173
+ INFO("cbrt");
174
+ CHECK_EQ(diff, 0);
175
+ }
176
+ }
177
+ };
178
+
179
+ TEST_CASE_TEMPLATE("[power]", B, BATCH_FLOAT_TYPES)
180
+ {
181
+ power_test<B> Test;
182
+ Test.test_power_functions();
183
+ }
184
+ #endif
@@ -0,0 +1,199 @@
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/xsimd.hpp"
13
+ #ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
14
+
15
+ #include "test_utils.hpp"
16
+
17
+ template <class B>
18
+ struct rounding_test
19
+ {
20
+ using batch_type = B;
21
+ using arch_type = typename B::arch_type;
22
+ using value_type = typename B::value_type;
23
+ using int_value_type = xsimd::as_integer_t<value_type>;
24
+ using int_batch_type = xsimd::batch<int_value_type, arch_type>;
25
+ static constexpr size_t size = B::size;
26
+ static constexpr size_t nb_input = 8;
27
+ static constexpr size_t nb_batches = nb_input / size;
28
+
29
+ std::array<value_type, nb_input> input;
30
+ std::array<value_type, nb_input> expected;
31
+ std::array<value_type, nb_input> res;
32
+
33
+ rounding_test()
34
+ {
35
+ input[0] = value_type(-3.5);
36
+ input[1] = value_type(-2.7);
37
+ input[2] = value_type(-2.5);
38
+ input[3] = value_type(-2.3);
39
+ input[4] = value_type(2.3);
40
+ input[5] = value_type(2.5);
41
+ input[6] = value_type(2.7);
42
+ input[7] = value_type(3.5);
43
+ }
44
+
45
+ void test_rounding_functions()
46
+ {
47
+ // ceil
48
+ {
49
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
50
+ [](const value_type& v)
51
+ { return std::ceil(v); });
52
+ batch_type in, out;
53
+ for (size_t i = 0; i < nb_batches; i += size)
54
+ {
55
+ detail::load_batch(in, input, i);
56
+ out = ceil(in);
57
+ detail::store_batch(out, res, i);
58
+ }
59
+ for (size_t i = nb_batches; i < nb_input; ++i)
60
+ {
61
+ res[i] = std::ceil(input[i]);
62
+ }
63
+ size_t diff = detail::get_nb_diff(res, expected);
64
+ INFO("ceil");
65
+ CHECK_EQ(diff, 0);
66
+ }
67
+ // floor
68
+ {
69
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
70
+ [](const value_type& v)
71
+ { return std::floor(v); });
72
+ batch_type in, out;
73
+ for (size_t i = 0; i < nb_batches; i += size)
74
+ {
75
+ detail::load_batch(in, input, i);
76
+ out = floor(in);
77
+ detail::store_batch(out, res, i);
78
+ }
79
+ for (size_t i = nb_batches; i < nb_input; ++i)
80
+ {
81
+ res[i] = std::floor(input[i]);
82
+ }
83
+ size_t diff = detail::get_nb_diff(res, expected);
84
+ INFO("floor");
85
+ CHECK_EQ(diff, 0);
86
+ }
87
+ // trunc
88
+ {
89
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
90
+ [](const value_type& v)
91
+ { return std::trunc(v); });
92
+ batch_type in, out;
93
+ for (size_t i = 0; i < nb_batches; i += size)
94
+ {
95
+ detail::load_batch(in, input, i);
96
+ out = trunc(in);
97
+ detail::store_batch(out, res, i);
98
+ }
99
+ for (size_t i = nb_batches; i < nb_input; ++i)
100
+ {
101
+ res[i] = std::trunc(input[i]);
102
+ }
103
+ size_t diff = detail::get_nb_diff(res, expected);
104
+ INFO("trunc");
105
+ CHECK_EQ(diff, 0);
106
+ }
107
+ // round
108
+ {
109
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
110
+ [](const value_type& v)
111
+ { return std::round(v); });
112
+ batch_type in, out;
113
+ for (size_t i = 0; i < nb_batches; i += size)
114
+ {
115
+ detail::load_batch(in, input, i);
116
+ out = round(in);
117
+ detail::store_batch(out, res, i);
118
+ }
119
+ for (size_t i = nb_batches; i < nb_input; ++i)
120
+ {
121
+ res[i] = std::round(input[i]);
122
+ }
123
+ size_t diff = detail::get_nb_diff(res, expected);
124
+ INFO("round");
125
+ CHECK_EQ(diff, 0);
126
+ }
127
+ // nearbyint
128
+ {
129
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
130
+ [](const value_type& v)
131
+ { return std::nearbyint(v); });
132
+ batch_type in, out;
133
+ for (size_t i = 0; i < nb_batches; i += size)
134
+ {
135
+ detail::load_batch(in, input, i);
136
+ out = nearbyint(in);
137
+ detail::store_batch(out, res, i);
138
+ }
139
+ for (size_t i = nb_batches; i < nb_input; ++i)
140
+ {
141
+ res[i] = std::nearbyint(input[i]);
142
+ }
143
+ size_t diff = detail::get_nb_diff(res, expected);
144
+ INFO("nearbyint");
145
+ CHECK_EQ(diff, 0);
146
+ }
147
+ // nearbyint_as_int
148
+ {
149
+ std::array<int_value_type, nb_input> expected;
150
+ std::array<int_value_type, nb_input> res;
151
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
152
+ [](const value_type& v)
153
+ { return xsimd::nearbyint_as_int(v); });
154
+ batch_type in;
155
+ int_batch_type out;
156
+ for (size_t i = 0; i < nb_batches; i += size)
157
+ {
158
+ detail::load_batch(in, input, i);
159
+ out = nearbyint_as_int(in);
160
+ detail::store_batch(out, res, i);
161
+ }
162
+ for (size_t i = nb_batches; i < nb_input; ++i)
163
+ {
164
+ res[i] = xsimd::nearbyint_as_int(input[i]);
165
+ }
166
+ size_t diff = detail::get_nb_diff(res, expected);
167
+ INFO("nearbyint_as_int");
168
+ CHECK_EQ(diff, 0);
169
+ }
170
+ // rint
171
+ {
172
+ std::transform(input.cbegin(), input.cend(), expected.begin(),
173
+ [](const value_type& v)
174
+ { return std::rint(v); });
175
+ batch_type in, out;
176
+ for (size_t i = 0; i < nb_batches; i += size)
177
+ {
178
+ detail::load_batch(in, input, i);
179
+ out = rint(in);
180
+ detail::store_batch(out, res, i);
181
+ }
182
+ for (size_t i = nb_batches; i < nb_input; ++i)
183
+ {
184
+ res[i] = std::rint(input[i]);
185
+ }
186
+ size_t diff = detail::get_nb_diff(res, expected);
187
+ INFO("rint");
188
+ CHECK_EQ(diff, 0);
189
+ }
190
+ }
191
+ };
192
+
193
+ TEST_CASE_TEMPLATE("[rounding]", B, BATCH_FLOAT_TYPES)
194
+ {
195
+
196
+ rounding_test<B> Test;
197
+ Test.test_rounding_functions();
198
+ }
199
+ #endif
@@ -0,0 +1,101 @@
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/xsimd.hpp"
13
+ #ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
14
+
15
+ #include "test_utils.hpp"
16
+
17
+ template <class B>
18
+ struct select_test
19
+ {
20
+ using batch_type = B;
21
+ using value_type = typename B::value_type;
22
+ using arch_type = typename B::arch_type;
23
+ static constexpr size_t size = B::size;
24
+ using vector_type = std::vector<value_type>;
25
+
26
+ size_t nb_input;
27
+ vector_type lhs_input;
28
+ vector_type rhs_input;
29
+ vector_type expected;
30
+ vector_type res;
31
+
32
+ select_test()
33
+ {
34
+ nb_input = size * 10000;
35
+ lhs_input.resize(nb_input);
36
+ rhs_input.resize(nb_input);
37
+ auto clamp = [](double v)
38
+ {
39
+ return static_cast<value_type>(std::min(v, static_cast<double>(std::numeric_limits<value_type>::max())));
40
+ };
41
+ for (size_t i = 0; i < nb_input; ++i)
42
+ {
43
+ lhs_input[i] = clamp(i / 4 + 1.2 * std::sqrt(i + 0.25));
44
+ rhs_input[i] = clamp(10.2 / (i + 2) + 0.25);
45
+ }
46
+ expected.resize(nb_input);
47
+ res.resize(nb_input);
48
+ }
49
+
50
+ void test_select_dynamic()
51
+ {
52
+ for (size_t i = 0; i < nb_input; ++i)
53
+ {
54
+ expected[i] = lhs_input[i] > value_type(3) ? lhs_input[i] : rhs_input[i];
55
+ }
56
+
57
+ batch_type lhs_in, rhs_in, out;
58
+ for (size_t i = 0; i < nb_input; i += size)
59
+ {
60
+ detail::load_batch(lhs_in, lhs_input, i);
61
+ detail::load_batch(rhs_in, rhs_input, i);
62
+ out = xsimd::select(lhs_in > value_type(3), lhs_in, rhs_in);
63
+ detail::store_batch(out, res, i);
64
+ }
65
+ size_t diff = detail::get_nb_diff(res, expected);
66
+ CHECK_EQ(diff, 0);
67
+ }
68
+ struct pattern
69
+ {
70
+ static constexpr bool get(std::size_t i, std::size_t) { return i % 2; }
71
+ };
72
+
73
+ void test_select_static()
74
+ {
75
+ constexpr auto mask = xsimd::make_batch_bool_constant<value_type, pattern, arch_type>();
76
+
77
+ for (size_t i = 0; i < nb_input; ++i)
78
+ {
79
+ expected[i] = mask.get(i % size) ? lhs_input[i] : rhs_input[i];
80
+ }
81
+
82
+ batch_type lhs_in, rhs_in, out;
83
+ for (size_t i = 0; i < nb_input; i += size)
84
+ {
85
+ detail::load_batch(lhs_in, lhs_input, i);
86
+ detail::load_batch(rhs_in, rhs_input, i);
87
+ out = xsimd::select(mask, lhs_in, rhs_in);
88
+ detail::store_batch(out, res, i);
89
+ }
90
+ size_t diff = detail::get_nb_diff(res, expected);
91
+ CHECK_EQ(diff, 0);
92
+ }
93
+ };
94
+
95
+ TEST_CASE_TEMPLATE("[select]", B, BATCH_TYPES)
96
+ {
97
+ select_test<B> Test;
98
+ SUBCASE("select_dynamic") { Test.test_select_dynamic(); }
99
+ SUBCASE("select_static") { Test.test_select_static(); }
100
+ }
101
+ #endif