sequenzo 0.1.21__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 (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-311-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-311-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-311-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-311-darwin.so +0 -0
  213. sequenzo/dissimilarity_measures/utils/seqconc.cpython-311-darwin.so +0 -0
  214. sequenzo/dissimilarity_measures/utils/seqdss.cpython-311-darwin.so +0 -0
  215. sequenzo/dissimilarity_measures/utils/seqdur.cpython-311-darwin.so +0 -0
  216. sequenzo/dissimilarity_measures/utils/seqlength.cpython-311-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,1049 @@
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 <cmath>
16
+ #include <functional>
17
+ #include <numeric>
18
+ #include <sstream>
19
+
20
+ #include "test_utils.hpp"
21
+
22
+ using namespace std::placeholders;
23
+
24
+ template <class B>
25
+ struct batch_test
26
+ {
27
+ using batch_type = B;
28
+ using value_type = typename B::value_type;
29
+ static constexpr size_t size = B::size;
30
+ using array_type = std::array<value_type, size>;
31
+ using bool_array_type = std::array<bool, size>;
32
+
33
+ array_type lhs;
34
+ array_type rhs;
35
+ value_type scalar;
36
+
37
+ batch_test()
38
+ {
39
+ init_operands();
40
+ }
41
+
42
+ void test_stream_dump() const
43
+ {
44
+ array_type res;
45
+ batch_type b = batch_type::load_unaligned(lhs.data());
46
+ b.store_unaligned(res.data());
47
+
48
+ std::ostringstream b_dump;
49
+ b_dump << b;
50
+
51
+ std::ostringstream res_dump;
52
+ res_dump << '(';
53
+ for (std::size_t i = 0; i < res.size() - 1; ++i)
54
+ res_dump << res[i] << ", ";
55
+ res_dump << res.back() << ')';
56
+
57
+ CHECK_EQ(res_dump.str(), b_dump.str());
58
+ }
59
+
60
+ void test_load_store() const
61
+ {
62
+ array_type res;
63
+ batch_type b = batch_type::load_unaligned(lhs.data());
64
+ b.store_unaligned(res.data());
65
+ INFO("load_unaligned / store_unaligned");
66
+ CHECK_EQ(res, lhs);
67
+
68
+ alignas(xsimd::default_arch::alignment()) array_type arhs(this->rhs);
69
+ alignas(xsimd::default_arch::alignment()) array_type ares;
70
+ b = batch_type::load_aligned(arhs.data());
71
+ b.store_aligned(ares.data());
72
+ INFO("load_aligned / store_aligned");
73
+ CHECK_EQ(ares, rhs);
74
+ }
75
+
76
+ template <size_t... Is>
77
+ struct pack
78
+ {
79
+ };
80
+
81
+ template <size_t... Values>
82
+ void check_constructor_from_sequence(std::integral_constant<size_t, 0>, pack<Values...>) const
83
+ {
84
+ array_type tmp = { static_cast<value_type>(Values)... };
85
+ batch_type b0(static_cast<value_type>(Values)...);
86
+ INFO("batch(values...)");
87
+ CHECK_EQ(b0, tmp);
88
+
89
+ batch_type b1 { static_cast<value_type>(Values)... };
90
+ INFO("batch{values...}");
91
+ CHECK_EQ(b0, tmp);
92
+ }
93
+
94
+ template <size_t I, size_t... Values>
95
+ void check_constructor_from_sequence(std::integral_constant<size_t, I>, pack<Values...>) const
96
+ {
97
+ return check_constructor_from_sequence(std::integral_constant<size_t, I - 1>(), pack<Values..., I>());
98
+ }
99
+
100
+ void test_constructors() const
101
+ {
102
+ batch_type b;
103
+ // value initialized to random data, can't be checked
104
+ (void)b;
105
+
106
+ array_type tmp;
107
+ std::fill(tmp.begin(), tmp.end(), value_type(2));
108
+ batch_type b0a(2);
109
+ INFO("batch(value_type)");
110
+ CHECK_EQ(b0a, tmp);
111
+
112
+ batch_type b0b { 2 };
113
+ INFO("batch{value_type}");
114
+ CHECK_EQ(b0b, tmp);
115
+
116
+ check_constructor_from_sequence(std::integral_constant<size_t, size>(), pack<>());
117
+ }
118
+
119
+ void test_static_builders() const
120
+ {
121
+ {
122
+ array_type expected;
123
+ std::fill(expected.begin(), expected.end(), value_type(2));
124
+
125
+ auto res = batch_type::broadcast(value_type(2));
126
+ INFO("batch::broadcast");
127
+ CHECK_EQ(res, expected);
128
+ }
129
+ {
130
+ array_type res;
131
+ auto b = batch_type::load_unaligned(lhs.data());
132
+ b.store_unaligned(res.data());
133
+ INFO("batch::load_unaligned");
134
+ CHECK_EQ(res, lhs);
135
+ }
136
+ {
137
+ alignas(xsimd::default_arch::alignment()) array_type arhs(this->rhs);
138
+ alignas(xsimd::default_arch::alignment()) array_type ares;
139
+ auto b = batch_type::load_aligned(arhs.data());
140
+ b.store_aligned(ares.data());
141
+ INFO("batch::load_aligned");
142
+ CHECK_EQ(ares, rhs);
143
+ }
144
+ }
145
+
146
+ void test_access_operator() const
147
+ {
148
+ batch_type res = batch_lhs();
149
+ for (size_t i = 0; i < size; ++i)
150
+ {
151
+ CHECK_EQ(res.get(i), lhs[i]);
152
+ }
153
+ }
154
+
155
+ void test_first_element() const
156
+ {
157
+ batch_type res = batch_lhs();
158
+ CHECK_EQ(res.first(), lhs[0]);
159
+ }
160
+
161
+ void test_arithmetic() const
162
+ {
163
+ // +batch
164
+ {
165
+ array_type expected = lhs;
166
+ batch_type res = +batch_lhs();
167
+ INFO("+batch");
168
+ CHECK_BATCH_EQ(res, expected);
169
+ }
170
+ // -batch
171
+ {
172
+ array_type expected;
173
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::negate<value_type>());
174
+ batch_type res = -batch_lhs();
175
+ INFO("-batch");
176
+ CHECK_BATCH_EQ(res, expected);
177
+ }
178
+ // batch + batch
179
+ {
180
+ array_type expected;
181
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::plus<value_type>());
182
+ batch_type res = batch_lhs() + batch_rhs();
183
+ INFO("batch + batch");
184
+ CHECK_BATCH_EQ(res, expected);
185
+ }
186
+ // batch + scalar
187
+ {
188
+ array_type expected;
189
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::plus<value_type>(), _1, scalar));
190
+ batch_type lres = batch_lhs() + scalar;
191
+ INFO("batch + scalar");
192
+ CHECK_BATCH_EQ(lres, expected);
193
+ batch_type rres = scalar + batch_lhs();
194
+ INFO("scalar + batch");
195
+ CHECK_BATCH_EQ(rres, expected);
196
+ }
197
+ // batch - batch
198
+ {
199
+ array_type expected;
200
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::minus<value_type>());
201
+ batch_type res = batch_lhs() - batch_rhs();
202
+ INFO("batch - batch");
203
+ CHECK_BATCH_EQ(res, expected);
204
+ }
205
+ // batch - scalar
206
+ {
207
+ array_type expected;
208
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::minus<value_type>(), _1, scalar));
209
+ batch_type lres = batch_lhs() - scalar;
210
+ INFO("batch - scalar");
211
+ CHECK_BATCH_EQ(lres, expected);
212
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::minus<value_type>(), scalar, _1));
213
+ batch_type rres = scalar - batch_lhs();
214
+ INFO("scalar - batch");
215
+ CHECK_BATCH_EQ(rres, expected);
216
+ }
217
+ // batch * batch
218
+ {
219
+ array_type expected;
220
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::multiplies<value_type>());
221
+ batch_type res = batch_lhs() * batch_rhs();
222
+ INFO("batch * batch");
223
+ CHECK_BATCH_EQ(res, expected);
224
+ }
225
+ // batch * scalar
226
+ {
227
+ array_type expected;
228
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::multiplies<value_type>(), _1, scalar));
229
+ batch_type lres = batch_lhs() * scalar;
230
+ INFO("batch * scalar");
231
+ CHECK_BATCH_EQ(lres, expected);
232
+ batch_type rres = scalar * batch_lhs();
233
+ INFO("scalar * batch");
234
+ CHECK_BATCH_EQ(rres, expected);
235
+ }
236
+ // batch / batch
237
+ {
238
+ array_type expected;
239
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::divides<value_type>());
240
+ batch_type res = batch_lhs() / batch_rhs();
241
+ INFO("batch / batch");
242
+ CHECK_BATCH_EQ(res, expected);
243
+ }
244
+ // batch / scalar
245
+ {
246
+ array_type expected;
247
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::divides<value_type>(), _1, scalar));
248
+ batch_type lres = batch_lhs() / scalar;
249
+ INFO("batch / scalar");
250
+ CHECK_BATCH_EQ(lres, expected);
251
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::divides<value_type>(), scalar, _1));
252
+ batch_type rres = scalar / batch_lhs();
253
+ INFO("scalar / batch");
254
+ CHECK_BATCH_EQ(rres, expected);
255
+ }
256
+ }
257
+
258
+ void test_incr_decr() const
259
+ {
260
+ // incr
261
+ {
262
+ array_type expected;
263
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), xsimd::incr<value_type>);
264
+ batch_type res = xsimd::incr(batch_lhs());
265
+ INFO("incr(batch)");
266
+ CHECK_BATCH_EQ(res, expected);
267
+ }
268
+
269
+ // incr_if
270
+ {
271
+ array_type expected;
272
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
273
+ [](value_type v)
274
+ { return v > 1 ? v + 1 : v; });
275
+ batch_type res = xsimd::incr_if(batch_lhs(), batch_lhs() > value_type(1));
276
+ INFO("incr_if(batch)");
277
+ CHECK_BATCH_EQ(res, expected);
278
+ }
279
+
280
+ // decr
281
+ {
282
+ array_type expected;
283
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), xsimd::decr<value_type>);
284
+ batch_type res = xsimd::decr(batch_lhs());
285
+ INFO("decr(batch)");
286
+ CHECK_BATCH_EQ(res, expected);
287
+ }
288
+
289
+ // decr_if
290
+ {
291
+ array_type expected;
292
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
293
+ [](value_type v)
294
+ { return v > 1 ? v - 1 : v; });
295
+ batch_type res = xsimd::decr_if(batch_lhs(), batch_lhs() > value_type(1));
296
+ INFO("decr_if(batch)");
297
+ CHECK_BATCH_EQ(res, expected);
298
+ }
299
+ }
300
+
301
+ void test_saturated_arithmetic() const
302
+ {
303
+ // batch + batch
304
+ {
305
+ array_type expected;
306
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), xsimd::sadd<value_type>);
307
+ batch_type res = xsimd::sadd(batch_lhs(), batch_rhs());
308
+ INFO("sadd(batch, batch)");
309
+ CHECK_BATCH_EQ(res, expected);
310
+ }
311
+ #if 0
312
+ // batch + scalar
313
+ {
314
+ array_type expected;
315
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), [this](value_type x)
316
+ { return xsimd::sadd(x, scalar); });
317
+ batch_type lres = xsimd::sadd(batch_lhs(), scalar);
318
+ INFO("sadd(batch, scalar)");
319
+ CHECK_BATCH_EQ(lres, expected);
320
+ batch_type rres = xsimd::sadd(scalar, batch_lhs());
321
+ INFO("sadd(scalar, batch)");
322
+ CHECK_BATCH_EQ(rres, expected);
323
+ }
324
+ #endif
325
+ // batch - batch
326
+ {
327
+ array_type expected;
328
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), [](value_type x, value_type y)
329
+ { return xsimd::ssub(x, y); });
330
+ batch_type res = xsimd::ssub(batch_lhs(), batch_rhs());
331
+ INFO("ssub(batch, batch)");
332
+ CHECK_BATCH_EQ(res, expected);
333
+ }
334
+ #if 0
335
+ // batch - scalar
336
+ {
337
+ array_type expected;
338
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), [this](value_type x)
339
+ { return xsimd::ssub(x, scalar); });
340
+ batch_type lres = xsimd::ssub(batch_lhs(), scalar);
341
+ INFO("ssub(batch, scalar)");
342
+ CHECK_BATCH_EQ(lres, expected);
343
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), [this](value_type x)
344
+ { return xsimd::ssub(scalar, x); });
345
+ batch_type rres = xsimd::ssub(scalar, batch_lhs());
346
+ INFO("ssub(scalar, batch)");
347
+ CHECK_BATCH_EQ(rres, expected);
348
+ }
349
+ #endif
350
+ }
351
+
352
+ void test_computed_assignment() const
353
+ {
354
+ // batch += batch
355
+ {
356
+ array_type expected;
357
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::plus<value_type>());
358
+ batch_type res = batch_lhs();
359
+ res += batch_rhs();
360
+ INFO("batch += batch");
361
+ CHECK_BATCH_EQ(res, expected);
362
+ }
363
+ // batch += scalar
364
+ {
365
+ array_type expected;
366
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::plus<value_type>(), _1, scalar));
367
+ batch_type res = batch_lhs();
368
+ res += scalar;
369
+ INFO("batch += scalar");
370
+ CHECK_BATCH_EQ(res, expected);
371
+ }
372
+ // batch -= batch
373
+ {
374
+ array_type expected;
375
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::minus<value_type>());
376
+ batch_type res = batch_lhs();
377
+ res -= batch_rhs();
378
+ INFO("batch -= batch");
379
+ CHECK_BATCH_EQ(res, expected);
380
+ }
381
+ // batch -= scalar
382
+ {
383
+ array_type expected;
384
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::minus<value_type>(), _1, scalar));
385
+ batch_type res = batch_lhs();
386
+ res -= scalar;
387
+ INFO("batch -= scalar");
388
+ CHECK_BATCH_EQ(res, expected);
389
+ }
390
+ // batch *= batch
391
+ {
392
+ array_type expected;
393
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::multiplies<value_type>());
394
+ batch_type res = batch_lhs();
395
+ res *= batch_rhs();
396
+ INFO("batch *= batch");
397
+ CHECK_BATCH_EQ(res, expected);
398
+ }
399
+ // batch *= scalar
400
+ {
401
+ array_type expected;
402
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::multiplies<value_type>(), _1, scalar));
403
+ batch_type res = batch_lhs();
404
+ res *= scalar;
405
+ INFO("batch *= scalar");
406
+ CHECK_BATCH_EQ(res, expected);
407
+ }
408
+ // batch /= batch
409
+ {
410
+ array_type expected;
411
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::divides<value_type>());
412
+ batch_type res = batch_lhs();
413
+ res /= batch_rhs();
414
+ INFO("batch /= batch");
415
+ CHECK_BATCH_EQ(res, expected);
416
+ }
417
+ // batch /= scalar
418
+ {
419
+ array_type expected;
420
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::divides<value_type>(), _1, scalar));
421
+ batch_type res = batch_lhs();
422
+ res /= scalar;
423
+ INFO("batch /= scalar");
424
+ CHECK_BATCH_EQ(res, expected);
425
+ }
426
+ }
427
+
428
+ void test_comparison() const
429
+ {
430
+
431
+ // batch == batch
432
+ {
433
+ bool_array_type expected;
434
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
435
+ [](const value_type& l, const value_type& r)
436
+ { return l == r; });
437
+ auto res = batch_lhs() == batch_rhs();
438
+ INFO("batch == batch");
439
+ CHECK_BATCH_EQ(res, expected);
440
+ }
441
+ // batch == scalar
442
+ {
443
+ bool_array_type expected;
444
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
445
+ [this](const value_type& l)
446
+ { return l == scalar; });
447
+ auto res = batch_lhs() == scalar;
448
+ INFO("batch == scalar");
449
+ CHECK_BATCH_EQ(res, expected);
450
+ }
451
+ // batch != batch
452
+ {
453
+ bool_array_type expected;
454
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
455
+ [](const value_type& l, const value_type& r)
456
+ { return l != r; });
457
+ auto res = batch_lhs() != batch_rhs();
458
+ INFO("batch != batch");
459
+ CHECK_BATCH_EQ(res, expected);
460
+ }
461
+ // batch != scalar
462
+ {
463
+ bool_array_type expected;
464
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
465
+ [this](const value_type& l)
466
+ { return l != scalar; });
467
+ auto res = batch_lhs() != scalar;
468
+ INFO("batch != scalar");
469
+ CHECK_BATCH_EQ(res, expected);
470
+ }
471
+ // batch < batch
472
+ {
473
+ bool_array_type expected;
474
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
475
+ [](const value_type& l, const value_type& r)
476
+ { return l < r; });
477
+ auto res = batch_lhs() < batch_rhs();
478
+ INFO("batch < batch");
479
+ CHECK_BATCH_EQ(res, expected);
480
+
481
+ std::fill(expected.begin(), expected.end(), false);
482
+ res = batch_lhs() < batch_lhs();
483
+ INFO("batch < (self)");
484
+ CHECK_BATCH_EQ(res, expected);
485
+ }
486
+ // batch < scalar
487
+ {
488
+ bool_array_type expected;
489
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
490
+ [this](const value_type& l)
491
+ { return l < scalar; });
492
+ auto res = batch_lhs() < scalar;
493
+ INFO("batch < scalar");
494
+ CHECK_BATCH_EQ(res, expected);
495
+
496
+ auto res_neg = batch_lhs() >= scalar;
497
+ INFO("batch >= scalar");
498
+ CHECK_BATCH_EQ(!res_neg, expected);
499
+ }
500
+
501
+ // batch <= batch
502
+ {
503
+ bool_array_type expected;
504
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
505
+ [](const value_type& l, const value_type& r)
506
+ { return l <= r; });
507
+ auto res = batch_lhs() <= batch_rhs();
508
+ INFO("batch <= batch");
509
+ CHECK_BATCH_EQ(res, expected);
510
+
511
+ std::fill(expected.begin(), expected.end(), true);
512
+ res = batch_lhs() <= batch_lhs();
513
+ INFO("batch < (self)");
514
+ CHECK_BATCH_EQ(res, expected);
515
+ }
516
+ // batch <= scalar
517
+ {
518
+ bool_array_type expected;
519
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
520
+ [this](const value_type& l)
521
+ { return l <= scalar; });
522
+ auto res = batch_lhs() <= scalar;
523
+ INFO("batch <= scalar");
524
+ CHECK_BATCH_EQ(res, expected);
525
+
526
+ auto res_neg = batch_lhs() > scalar;
527
+ INFO("batch > scalar");
528
+ CHECK_BATCH_EQ(!res_neg, expected);
529
+ }
530
+
531
+ // batch > batch
532
+ {
533
+ bool_array_type expected;
534
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
535
+ [](const value_type& l, const value_type& r)
536
+ { return l > r; });
537
+ auto res = batch_lhs() > batch_rhs();
538
+ INFO("batch > batch");
539
+ CHECK_BATCH_EQ(res, expected);
540
+
541
+ std::fill(expected.begin(), expected.end(), false);
542
+ res = batch_lhs() > batch_lhs();
543
+ INFO("batch > (self)");
544
+ CHECK_BATCH_EQ(res, expected);
545
+ }
546
+ // batch > scalar
547
+ {
548
+ bool_array_type expected;
549
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
550
+ [this](const value_type& l)
551
+ { return l > scalar; });
552
+ auto res = batch_lhs() > scalar;
553
+ INFO("batch > scalar");
554
+ CHECK_BATCH_EQ(res, expected);
555
+
556
+ auto res_neg = batch_lhs() <= scalar;
557
+ INFO("batch <= scalar");
558
+ CHECK_BATCH_EQ(!res_neg, expected);
559
+ }
560
+ // batch >= batch
561
+ {
562
+ bool_array_type expected;
563
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
564
+ [](const value_type& l, const value_type& r)
565
+ { return l >= r; });
566
+ auto res = batch_lhs() >= batch_rhs();
567
+ INFO("batch >= batch");
568
+ CHECK_BATCH_EQ(res, expected);
569
+
570
+ std::fill(expected.begin(), expected.end(), true);
571
+ res = batch_lhs() >= batch_lhs();
572
+ INFO("batch >= (self)");
573
+ CHECK_BATCH_EQ(res, expected);
574
+ }
575
+ // batch >= scalar
576
+ {
577
+ bool_array_type expected;
578
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
579
+ [this](const value_type& l)
580
+ { return l >= scalar; });
581
+ auto res = batch_lhs() >= scalar;
582
+ INFO("batch >= scalar");
583
+ CHECK_BATCH_EQ(res, expected);
584
+
585
+ auto res_neg = batch_lhs() < scalar;
586
+ INFO("batch < scalar");
587
+ CHECK_BATCH_EQ(!res_neg, expected);
588
+ }
589
+ }
590
+
591
+ void test_logical() const
592
+ {
593
+ // batch && batch
594
+ {
595
+ array_type expected;
596
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::logical_and<value_type>());
597
+ batch_type res = batch_lhs() && batch_rhs();
598
+ INFO("batch && batch");
599
+ CHECK_BATCH_EQ(res, expected);
600
+ }
601
+ // batch && scalar
602
+ {
603
+ array_type expected;
604
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::logical_and<value_type>(), _1, scalar));
605
+ batch_type lres = batch_lhs() && scalar;
606
+ INFO("batch && scalar");
607
+ CHECK_BATCH_EQ(lres, expected);
608
+ batch_type rres = scalar && batch_lhs();
609
+ INFO("scalar && batch");
610
+ CHECK_BATCH_EQ(rres, expected);
611
+ }
612
+ // batch || batch
613
+ {
614
+ array_type expected;
615
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(), std::logical_or<value_type>());
616
+ batch_type res = batch_lhs() || batch_rhs();
617
+ INFO("batch && batch");
618
+ CHECK_BATCH_EQ(res, expected);
619
+ }
620
+ // batch || scalar
621
+ {
622
+ array_type expected;
623
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(), std::bind(std::logical_or<value_type>(), _1, scalar));
624
+ batch_type lres = batch_lhs() || scalar;
625
+ INFO("batch || scalar");
626
+ CHECK_BATCH_EQ(lres, expected);
627
+ batch_type rres = scalar || batch_lhs();
628
+ INFO("scalar || batch");
629
+ CHECK_BATCH_EQ(rres, expected);
630
+ }
631
+ }
632
+
633
+ void test_min_max() const
634
+ {
635
+ // min
636
+ {
637
+ array_type expected;
638
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
639
+ [](const value_type& l, const value_type& r)
640
+ { return std::min(l, r); });
641
+ batch_type res = min(batch_lhs(), batch_rhs());
642
+ INFO("min");
643
+ CHECK_BATCH_EQ(res, expected);
644
+ }
645
+ // min limit case
646
+ {
647
+ array_type expected;
648
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
649
+ [](const value_type&, const value_type& r)
650
+ { return std::min(std::numeric_limits<value_type>::min(), r); });
651
+ batch_type res = xsimd::min(batch_type(std::numeric_limits<value_type>::min()), batch_rhs());
652
+ INFO("min limit");
653
+ CHECK_BATCH_EQ(res, expected);
654
+ }
655
+ // fmin
656
+ {
657
+ array_type expected;
658
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
659
+ [](const value_type& l, const value_type& r)
660
+ { return std::fmin(l, r); });
661
+ batch_type res = min(batch_lhs(), batch_rhs());
662
+ INFO("fmin");
663
+ CHECK_BATCH_EQ(res, expected);
664
+ }
665
+ // max
666
+ {
667
+ array_type expected;
668
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
669
+ [](const value_type& l, const value_type& r)
670
+ { return std::max(l, r); });
671
+ batch_type res = max(batch_lhs(), batch_rhs());
672
+ INFO("max");
673
+ CHECK_BATCH_EQ(res, expected);
674
+ }
675
+ // max limit case
676
+ {
677
+ array_type expected;
678
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
679
+ [](const value_type&, const value_type& r)
680
+ { return std::max(std::numeric_limits<value_type>::max(), r); });
681
+ batch_type res = xsimd::max(batch_type(std::numeric_limits<value_type>::max()), batch_rhs());
682
+ INFO("max limit");
683
+ CHECK_BATCH_EQ(res, expected);
684
+ }
685
+ // fmax
686
+ {
687
+ array_type expected;
688
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
689
+ [](const value_type& l, const value_type& r)
690
+ { return std::fmax(l, r); });
691
+ batch_type res = fmax(batch_lhs(), batch_rhs());
692
+ INFO("fmax");
693
+ CHECK_BATCH_EQ(res, expected);
694
+ }
695
+ }
696
+
697
+ void test_fused_operations() const
698
+ {
699
+ // fma
700
+ {
701
+ array_type expected;
702
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.begin(), expected.begin(),
703
+ [](const value_type& l, const value_type& r)
704
+ { return l * r + r; });
705
+ // Warning: ADL seems to not work correctly on Windows, thus the full qualified call
706
+ batch_type res = xsimd::fma(batch_lhs(), batch_rhs(), batch_rhs());
707
+ INFO("fma");
708
+ CHECK_BATCH_EQ(res, expected);
709
+ }
710
+ // fms
711
+ {
712
+ array_type expected;
713
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.begin(), expected.begin(),
714
+ [](const value_type& l, const value_type& r)
715
+ { return l * r - r; });
716
+ batch_type res = fms(batch_lhs(), batch_rhs(), batch_rhs());
717
+ INFO("fms");
718
+ CHECK_BATCH_EQ(res, expected);
719
+ }
720
+ // fnma
721
+ {
722
+ array_type expected;
723
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.begin(), expected.begin(),
724
+ [](const value_type& l, const value_type& r)
725
+ { return -l * r + r; });
726
+ batch_type res = fnma(batch_lhs(), batch_rhs(), batch_rhs());
727
+ INFO("fnma");
728
+ CHECK_BATCH_EQ(res, expected);
729
+ }
730
+ // fnms
731
+ {
732
+ array_type expected;
733
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.begin(), expected.begin(),
734
+ [](const value_type& l, const value_type& r)
735
+ { return -l * r - r; });
736
+ batch_type res = fnms(batch_lhs(), batch_rhs(), batch_rhs());
737
+ INFO("fnms");
738
+ CHECK_BATCH_EQ(res, expected);
739
+ }
740
+ // fmas
741
+ {
742
+ array_type expected;
743
+ for (std::size_t i = 0; i < expected.size(); ++i)
744
+ {
745
+ // even lanes: x*y - z, odd lanes: x*y + z
746
+ expected[i] = (i & 1u) == 0
747
+ ? lhs[i] * rhs[i] - rhs[i]
748
+ : lhs[i] * rhs[i] + rhs[i];
749
+ }
750
+ batch_type res = fmas(batch_lhs(), batch_rhs(), batch_rhs());
751
+ INFO("fmas");
752
+ CHECK_BATCH_EQ(res, expected);
753
+ }
754
+ }
755
+
756
+ void test_abs() const
757
+ {
758
+ // abs
759
+ {
760
+ array_type expected;
761
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
762
+ [](const value_type& l)
763
+ { return ::detail::uabs(l); });
764
+ batch_type res = abs(batch_lhs());
765
+ INFO("abs");
766
+ CHECK_BATCH_EQ(res, expected);
767
+ }
768
+ // fabs
769
+ {
770
+ array_type expected;
771
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
772
+ [](const value_type& l)
773
+ { return std::fabs(l); });
774
+ batch_type res = fabs(batch_lhs());
775
+ INFO("fabs");
776
+ CHECK_BATCH_EQ(res, expected);
777
+ }
778
+ }
779
+
780
+ void test_avg() const
781
+ {
782
+ {
783
+ array_type expected;
784
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
785
+ [](const value_type& l, const value_type& r) -> value_type
786
+ {
787
+ if (std::is_integral<value_type>::value)
788
+ {
789
+ return static_cast<value_type>(((long long)l + r) / 2);
790
+ }
791
+ else
792
+ {
793
+ return (l + r) / 2;
794
+ }
795
+ });
796
+ batch_type res = avg(batch_lhs(), batch_rhs());
797
+ INFO("avg");
798
+ CHECK_BATCH_EQ(res, expected);
799
+ }
800
+ {
801
+ array_type expected;
802
+ std::transform(lhs.cbegin(), lhs.cend(), rhs.cbegin(), expected.begin(),
803
+ [](const value_type& l, const value_type& r) -> value_type
804
+ {
805
+ if (std::is_integral<value_type>::value)
806
+ {
807
+ return static_cast<value_type>(((long long)l + r) / 2 + ((long long)(l + r) & 1));
808
+ }
809
+ else
810
+ {
811
+ return (l + r) / 2;
812
+ }
813
+ });
814
+ batch_type res = avgr(batch_lhs(), batch_rhs());
815
+ INFO("avgr");
816
+ CHECK_BATCH_EQ(res, expected);
817
+ }
818
+ }
819
+
820
+ void test_horizontal_operations() const
821
+ {
822
+ // reduce_add
823
+ {
824
+ value_type expected = std::accumulate(lhs.cbegin(), lhs.cend(), value_type(0));
825
+ value_type res = reduce_add(batch_lhs());
826
+ INFO("reduce_add");
827
+ CHECK_SCALAR_EQ(res, expected);
828
+ }
829
+ // reduce_max
830
+ {
831
+ value_type expected = *std::max_element(lhs.cbegin(), lhs.cend());
832
+ value_type res = reduce_max(batch_lhs());
833
+ INFO("reduce_max");
834
+ CHECK_SCALAR_EQ(res, expected);
835
+ }
836
+ // reduce_min
837
+ {
838
+ value_type expected = *std::min_element(lhs.cbegin(), lhs.cend());
839
+ value_type res = reduce_min(batch_lhs());
840
+ INFO("reduce_min");
841
+ CHECK_SCALAR_EQ(res, expected);
842
+ }
843
+ // reduce_mul
844
+ {
845
+ value_type expected = std::accumulate(lhs.cbegin(), lhs.cend(), value_type(1), std::multiplies<value_type>());
846
+ value_type res = reduce_mul(batch_lhs());
847
+ INFO("reduce_mul");
848
+ CHECK_SCALAR_EQ(res, expected);
849
+ }
850
+ }
851
+
852
+ template <size_t N>
853
+ typename std::enable_if<4 <= N, void>::type test_common_horizontal_operations(std::integral_constant<size_t, N>) const
854
+ {
855
+ // reduce common
856
+ {
857
+ value_type expected = std::accumulate(lhs.cbegin(), lhs.cend(), value_type(1), std::multiplies<value_type>());
858
+ value_type res = reduce(xsimd::mul<typename B::value_type, typename B::arch_type>, batch_lhs());
859
+ INFO("common reduce");
860
+ CHECK_SCALAR_EQ(res, expected);
861
+ }
862
+ }
863
+ void test_common_horizontal_operations(...) const { }
864
+
865
+ void test_boolean_conversions() const
866
+ {
867
+ using batch_bool_type = typename batch_type::batch_bool_type;
868
+ // batch = true
869
+ {
870
+ batch_bool_type tbt(true);
871
+ batch_type expected = batch_type(value_type(1));
872
+ batch_type res = (batch_type)tbt;
873
+ INFO("batch = true");
874
+ CHECK_BATCH_EQ(res, expected);
875
+ }
876
+ // batch = false
877
+ {
878
+ batch_bool_type fbt(false);
879
+ batch_type expected = batch_type(value_type(0));
880
+ batch_type res = (batch_type)fbt;
881
+ INFO("batch = false");
882
+ CHECK_BATCH_EQ(res, expected);
883
+ }
884
+ // !batch
885
+ {
886
+ array_type expected;
887
+ std::transform(lhs.cbegin(), lhs.cend(), expected.begin(),
888
+ [](const value_type& l)
889
+ { return !l; });
890
+ batch_type res = (batch_type)!batch_lhs();
891
+ INFO("!batch");
892
+ CHECK_BATCH_EQ(res, expected);
893
+ }
894
+ // bitwise_cast
895
+ {
896
+ batch_bool_type fbt(false);
897
+ batch_type expected = batch_type(value_type(0));
898
+ batch_type res = bitwise_cast(fbt);
899
+ INFO("bitwise_cast");
900
+ CHECK_BATCH_EQ(res, expected);
901
+ }
902
+ // bitwise not
903
+ {
904
+ batch_bool_type fbt(true);
905
+ batch_type expected = batch_type(value_type(0));
906
+ batch_type res = ~bitwise_cast(fbt);
907
+ INFO("~batch");
908
+ CHECK_BATCH_EQ(res, expected);
909
+ }
910
+ }
911
+
912
+ private:
913
+ batch_type batch_lhs() const
914
+ {
915
+ return batch_type::load_unaligned(lhs.data());
916
+ }
917
+
918
+ batch_type batch_rhs() const
919
+ {
920
+ return batch_type::load_unaligned(rhs.data());
921
+ }
922
+
923
+ template <class T = value_type>
924
+ xsimd::enable_integral_t<T, void> init_operands()
925
+ {
926
+ for (size_t i = 0; i < size; ++i)
927
+ {
928
+ bool negative_lhs = std::is_signed<T>::value && (i % 2 == 1);
929
+ lhs[i] = value_type(i) * (negative_lhs ? -3 : 3);
930
+ if (lhs[i] == value_type(0))
931
+ {
932
+ lhs[i] += value_type(1);
933
+ }
934
+ rhs[i] = value_type(i) + value_type(2);
935
+ }
936
+ scalar = value_type(3);
937
+ }
938
+
939
+ template <class T = value_type>
940
+ xsimd::enable_floating_point_t<T, void> init_operands()
941
+ {
942
+ for (size_t i = 0; i < size; ++i)
943
+ {
944
+ lhs[i] = value_type(i) / 4 + value_type(1.2) * std::sqrt(value_type(i + 0.25));
945
+ if (lhs[i] == value_type(0))
946
+ {
947
+ lhs[i] += value_type(0.1);
948
+ }
949
+ rhs[i] = value_type(10.2) / (i + 2) + value_type(0.25);
950
+ }
951
+ scalar = value_type(1.2);
952
+ }
953
+ };
954
+
955
+ TEST_CASE_TEMPLATE("[batch]", B, BATCH_TYPES)
956
+ {
957
+ batch_test<B> Test;
958
+
959
+ SUBCASE("stream_dump")
960
+ {
961
+ Test.test_stream_dump();
962
+ }
963
+
964
+ SUBCASE("load_store")
965
+ {
966
+ Test.test_load_store();
967
+ }
968
+
969
+ SUBCASE("constructors")
970
+ {
971
+ Test.test_constructors();
972
+ }
973
+
974
+ SUBCASE("static_builders")
975
+ {
976
+ Test.test_static_builders();
977
+ }
978
+
979
+ SUBCASE("access_operator")
980
+ {
981
+ Test.test_access_operator();
982
+ }
983
+
984
+ SUBCASE("first element")
985
+ {
986
+ Test.test_first_element();
987
+ }
988
+
989
+ SUBCASE("arithmetic")
990
+ {
991
+ Test.test_arithmetic();
992
+ }
993
+
994
+ SUBCASE("incr decr")
995
+ {
996
+ Test.test_incr_decr();
997
+ }
998
+
999
+ SUBCASE("saturated_arithmetic")
1000
+ {
1001
+ Test.test_saturated_arithmetic();
1002
+ }
1003
+
1004
+ SUBCASE("computed_assignment")
1005
+ {
1006
+ Test.test_computed_assignment();
1007
+ }
1008
+
1009
+ SUBCASE("comparison")
1010
+ {
1011
+ Test.test_comparison();
1012
+ }
1013
+ SUBCASE("logical")
1014
+ {
1015
+ Test.test_logical();
1016
+ }
1017
+
1018
+ SUBCASE("min_max")
1019
+ {
1020
+ Test.test_min_max();
1021
+ }
1022
+
1023
+ SUBCASE("fused_operations")
1024
+ {
1025
+ Test.test_fused_operations();
1026
+ }
1027
+
1028
+ SUBCASE("abs")
1029
+ {
1030
+ Test.test_abs();
1031
+ }
1032
+
1033
+ SUBCASE("avg")
1034
+ {
1035
+ Test.test_avg();
1036
+ }
1037
+
1038
+ SUBCASE("horizontal_operations")
1039
+ {
1040
+ Test.test_horizontal_operations();
1041
+ Test.test_common_horizontal_operations(std::integral_constant<size_t, sizeof(typename B::value_type)>());
1042
+ }
1043
+
1044
+ SUBCASE("boolean_conversions")
1045
+ {
1046
+ Test.test_boolean_conversions();
1047
+ }
1048
+ }
1049
+ #endif