sequenzo 0.1.31__cp310-cp310-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.
Files changed (299) hide show
  1. _sequenzo_fastcluster.cpython-310-darwin.so +0 -0
  2. sequenzo/__init__.py +349 -0
  3. sequenzo/big_data/__init__.py +12 -0
  4. sequenzo/big_data/clara/__init__.py +26 -0
  5. sequenzo/big_data/clara/clara.py +476 -0
  6. sequenzo/big_data/clara/utils/__init__.py +27 -0
  7. sequenzo/big_data/clara/utils/aggregatecases.py +92 -0
  8. sequenzo/big_data/clara/utils/davies_bouldin.py +91 -0
  9. sequenzo/big_data/clara/utils/get_weighted_diss.cpython-310-darwin.so +0 -0
  10. sequenzo/big_data/clara/utils/wfcmdd.py +205 -0
  11. sequenzo/big_data/clara/visualization.py +88 -0
  12. sequenzo/clustering/KMedoids.py +178 -0
  13. sequenzo/clustering/__init__.py +30 -0
  14. sequenzo/clustering/clustering_c_code.cpython-310-darwin.so +0 -0
  15. sequenzo/clustering/hierarchical_clustering.py +1256 -0
  16. sequenzo/clustering/sequenzo_fastcluster/fastcluster.py +495 -0
  17. sequenzo/clustering/sequenzo_fastcluster/src/fastcluster.cpp +1877 -0
  18. sequenzo/clustering/sequenzo_fastcluster/src/fastcluster_python.cpp +1264 -0
  19. sequenzo/clustering/src/KMedoid.cpp +263 -0
  20. sequenzo/clustering/src/PAM.cpp +237 -0
  21. sequenzo/clustering/src/PAMonce.cpp +265 -0
  22. sequenzo/clustering/src/cluster_quality.cpp +496 -0
  23. sequenzo/clustering/src/cluster_quality.h +128 -0
  24. sequenzo/clustering/src/cluster_quality_backup.cpp +570 -0
  25. sequenzo/clustering/src/module.cpp +228 -0
  26. sequenzo/clustering/src/weightedinertia.cpp +111 -0
  27. sequenzo/clustering/utils/__init__.py +27 -0
  28. sequenzo/clustering/utils/disscenter.py +122 -0
  29. sequenzo/data_preprocessing/__init__.py +22 -0
  30. sequenzo/data_preprocessing/helpers.py +303 -0
  31. sequenzo/datasets/__init__.py +41 -0
  32. sequenzo/datasets/biofam.csv +2001 -0
  33. sequenzo/datasets/biofam_child_domain.csv +2001 -0
  34. sequenzo/datasets/biofam_left_domain.csv +2001 -0
  35. sequenzo/datasets/biofam_married_domain.csv +2001 -0
  36. sequenzo/datasets/chinese_colonial_territories.csv +12 -0
  37. sequenzo/datasets/country_co2_emissions.csv +194 -0
  38. sequenzo/datasets/country_co2_emissions_global_deciles.csv +195 -0
  39. sequenzo/datasets/country_co2_emissions_global_quintiles.csv +195 -0
  40. sequenzo/datasets/country_co2_emissions_local_deciles.csv +195 -0
  41. sequenzo/datasets/country_co2_emissions_local_quintiles.csv +195 -0
  42. sequenzo/datasets/country_gdp_per_capita.csv +194 -0
  43. sequenzo/datasets/dyadic_children.csv +61 -0
  44. sequenzo/datasets/dyadic_parents.csv +61 -0
  45. sequenzo/datasets/mvad.csv +713 -0
  46. sequenzo/datasets/pairfam_activity_by_month.csv +1028 -0
  47. sequenzo/datasets/pairfam_activity_by_year.csv +1028 -0
  48. sequenzo/datasets/pairfam_family_by_month.csv +1028 -0
  49. sequenzo/datasets/pairfam_family_by_year.csv +1028 -0
  50. sequenzo/datasets/political_science_aid_shock.csv +166 -0
  51. sequenzo/datasets/political_science_donor_fragmentation.csv +157 -0
  52. sequenzo/define_sequence_data.py +1400 -0
  53. sequenzo/dissimilarity_measures/__init__.py +31 -0
  54. sequenzo/dissimilarity_measures/c_code.cpython-310-darwin.so +0 -0
  55. sequenzo/dissimilarity_measures/get_distance_matrix.py +762 -0
  56. sequenzo/dissimilarity_measures/get_substitution_cost_matrix.py +246 -0
  57. sequenzo/dissimilarity_measures/src/DHDdistance.cpp +148 -0
  58. sequenzo/dissimilarity_measures/src/LCPdistance.cpp +114 -0
  59. sequenzo/dissimilarity_measures/src/LCPspellDistance.cpp +215 -0
  60. sequenzo/dissimilarity_measures/src/OMdistance.cpp +247 -0
  61. sequenzo/dissimilarity_measures/src/OMspellDistance.cpp +281 -0
  62. sequenzo/dissimilarity_measures/src/__init__.py +0 -0
  63. sequenzo/dissimilarity_measures/src/dist2matrix.cpp +63 -0
  64. sequenzo/dissimilarity_measures/src/dp_utils.h +160 -0
  65. sequenzo/dissimilarity_measures/src/module.cpp +40 -0
  66. sequenzo/dissimilarity_measures/src/setup.py +30 -0
  67. sequenzo/dissimilarity_measures/src/utils.h +25 -0
  68. sequenzo/dissimilarity_measures/src/xsimd/.github/cmake-test/main.cpp +6 -0
  69. sequenzo/dissimilarity_measures/src/xsimd/benchmark/main.cpp +159 -0
  70. sequenzo/dissimilarity_measures/src/xsimd/benchmark/xsimd_benchmark.hpp +565 -0
  71. sequenzo/dissimilarity_measures/src/xsimd/docs/source/conf.py +37 -0
  72. sequenzo/dissimilarity_measures/src/xsimd/examples/mandelbrot.cpp +330 -0
  73. sequenzo/dissimilarity_measures/src/xsimd/examples/pico_bench.hpp +246 -0
  74. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_arithmetic.hpp +266 -0
  75. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_complex.hpp +112 -0
  76. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_details.hpp +323 -0
  77. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_logical.hpp +218 -0
  78. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_math.hpp +2583 -0
  79. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_memory.hpp +880 -0
  80. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_rounding.hpp +72 -0
  81. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_swizzle.hpp +174 -0
  82. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_trigo.hpp +978 -0
  83. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx.hpp +1924 -0
  84. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx2.hpp +1144 -0
  85. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512bw.hpp +656 -0
  86. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512cd.hpp +28 -0
  87. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512dq.hpp +244 -0
  88. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512er.hpp +20 -0
  89. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512f.hpp +2650 -0
  90. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512ifma.hpp +20 -0
  91. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512pf.hpp +20 -0
  92. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi.hpp +77 -0
  93. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi2.hpp +131 -0
  94. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512bw.hpp +20 -0
  95. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512vbmi2.hpp +20 -0
  96. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avxvnni.hpp +20 -0
  97. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common.hpp +24 -0
  98. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common_fwd.hpp +77 -0
  99. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_constants.hpp +393 -0
  100. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_emulated.hpp +788 -0
  101. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx.hpp +93 -0
  102. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx2.hpp +46 -0
  103. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_sse.hpp +97 -0
  104. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma4.hpp +92 -0
  105. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_i8mm_neon64.hpp +17 -0
  106. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_isa.hpp +142 -0
  107. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon.hpp +3142 -0
  108. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon64.hpp +1543 -0
  109. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_rvv.hpp +1513 -0
  110. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_scalar.hpp +1260 -0
  111. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse2.hpp +2024 -0
  112. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse3.hpp +67 -0
  113. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_1.hpp +339 -0
  114. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_2.hpp +44 -0
  115. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_ssse3.hpp +186 -0
  116. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sve.hpp +1155 -0
  117. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_vsx.hpp +892 -0
  118. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_wasm.hpp +1780 -0
  119. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_arch.hpp +240 -0
  120. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_config.hpp +484 -0
  121. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_cpuid.hpp +269 -0
  122. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_inline.hpp +27 -0
  123. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/math/xsimd_rem_pio2.hpp +719 -0
  124. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp +349 -0
  125. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_alignment.hpp +91 -0
  126. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_all_registers.hpp +55 -0
  127. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_api.hpp +2765 -0
  128. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx2_register.hpp +44 -0
  129. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512bw_register.hpp +51 -0
  130. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512cd_register.hpp +51 -0
  131. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512dq_register.hpp +51 -0
  132. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512er_register.hpp +51 -0
  133. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512f_register.hpp +77 -0
  134. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512ifma_register.hpp +51 -0
  135. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512pf_register.hpp +51 -0
  136. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi2_register.hpp +51 -0
  137. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi_register.hpp +51 -0
  138. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512bw_register.hpp +54 -0
  139. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512vbmi2_register.hpp +53 -0
  140. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx_register.hpp +64 -0
  141. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avxvnni_register.hpp +44 -0
  142. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch.hpp +1524 -0
  143. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch_constant.hpp +300 -0
  144. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_common_arch.hpp +47 -0
  145. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_emulated_register.hpp +80 -0
  146. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx2_register.hpp +50 -0
  147. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx_register.hpp +50 -0
  148. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_sse_register.hpp +50 -0
  149. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma4_register.hpp +50 -0
  150. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_i8mm_neon64_register.hpp +55 -0
  151. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon64_register.hpp +55 -0
  152. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon_register.hpp +154 -0
  153. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_register.hpp +94 -0
  154. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_rvv_register.hpp +506 -0
  155. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse2_register.hpp +59 -0
  156. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse3_register.hpp +49 -0
  157. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_1_register.hpp +48 -0
  158. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_2_register.hpp +48 -0
  159. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_ssse3_register.hpp +48 -0
  160. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sve_register.hpp +156 -0
  161. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_traits.hpp +337 -0
  162. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_utils.hpp +536 -0
  163. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_vsx_register.hpp +77 -0
  164. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_wasm_register.hpp +59 -0
  165. sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/xsimd.hpp +75 -0
  166. sequenzo/dissimilarity_measures/src/xsimd/test/architectures/dummy.cpp +7 -0
  167. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set.cpp +13 -0
  168. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean.cpp +24 -0
  169. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_aligned.cpp +25 -0
  170. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_arch_independent.cpp +28 -0
  171. sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_tag_dispatch.cpp +25 -0
  172. sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_abstract_batches.cpp +7 -0
  173. sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_parametric_batches.cpp +8 -0
  174. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum.hpp +31 -0
  175. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_avx2.cpp +3 -0
  176. sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_sse2.cpp +3 -0
  177. sequenzo/dissimilarity_measures/src/xsimd/test/doc/writing_vectorized_code.cpp +11 -0
  178. sequenzo/dissimilarity_measures/src/xsimd/test/main.cpp +31 -0
  179. sequenzo/dissimilarity_measures/src/xsimd/test/test_api.cpp +230 -0
  180. sequenzo/dissimilarity_measures/src/xsimd/test/test_arch.cpp +217 -0
  181. sequenzo/dissimilarity_measures/src/xsimd/test/test_basic_math.cpp +183 -0
  182. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch.cpp +1049 -0
  183. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_bool.cpp +508 -0
  184. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_cast.cpp +409 -0
  185. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_complex.cpp +712 -0
  186. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_constant.cpp +286 -0
  187. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_float.cpp +141 -0
  188. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_int.cpp +365 -0
  189. sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_manip.cpp +308 -0
  190. sequenzo/dissimilarity_measures/src/xsimd/test/test_bitwise_cast.cpp +222 -0
  191. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_exponential.cpp +226 -0
  192. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_hyperbolic.cpp +183 -0
  193. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_power.cpp +265 -0
  194. sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_trigonometric.cpp +236 -0
  195. sequenzo/dissimilarity_measures/src/xsimd/test/test_conversion.cpp +248 -0
  196. sequenzo/dissimilarity_measures/src/xsimd/test/test_custom_default_arch.cpp +28 -0
  197. sequenzo/dissimilarity_measures/src/xsimd/test/test_error_gamma.cpp +170 -0
  198. sequenzo/dissimilarity_measures/src/xsimd/test/test_explicit_batch_instantiation.cpp +32 -0
  199. sequenzo/dissimilarity_measures/src/xsimd/test/test_exponential.cpp +202 -0
  200. sequenzo/dissimilarity_measures/src/xsimd/test/test_extract_pair.cpp +92 -0
  201. sequenzo/dissimilarity_measures/src/xsimd/test/test_fp_manipulation.cpp +77 -0
  202. sequenzo/dissimilarity_measures/src/xsimd/test/test_gnu_source.cpp +30 -0
  203. sequenzo/dissimilarity_measures/src/xsimd/test/test_hyperbolic.cpp +167 -0
  204. sequenzo/dissimilarity_measures/src/xsimd/test/test_load_store.cpp +304 -0
  205. sequenzo/dissimilarity_measures/src/xsimd/test/test_memory.cpp +61 -0
  206. sequenzo/dissimilarity_measures/src/xsimd/test/test_poly_evaluation.cpp +64 -0
  207. sequenzo/dissimilarity_measures/src/xsimd/test/test_power.cpp +184 -0
  208. sequenzo/dissimilarity_measures/src/xsimd/test/test_rounding.cpp +199 -0
  209. sequenzo/dissimilarity_measures/src/xsimd/test/test_select.cpp +101 -0
  210. sequenzo/dissimilarity_measures/src/xsimd/test/test_shuffle.cpp +760 -0
  211. sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.cpp +4 -0
  212. sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.hpp +34 -0
  213. sequenzo/dissimilarity_measures/src/xsimd/test/test_traits.cpp +172 -0
  214. sequenzo/dissimilarity_measures/src/xsimd/test/test_trigonometric.cpp +208 -0
  215. sequenzo/dissimilarity_measures/src/xsimd/test/test_utils.hpp +611 -0
  216. sequenzo/dissimilarity_measures/src/xsimd/test/test_wasm/test_wasm_playwright.py +123 -0
  217. sequenzo/dissimilarity_measures/src/xsimd/test/test_xsimd_api.cpp +1460 -0
  218. sequenzo/dissimilarity_measures/utils/__init__.py +16 -0
  219. sequenzo/dissimilarity_measures/utils/get_LCP_length_for_2_seq.py +44 -0
  220. sequenzo/dissimilarity_measures/utils/get_sm_trate_substitution_cost_matrix.cpython-310-darwin.so +0 -0
  221. sequenzo/dissimilarity_measures/utils/seqconc.cpython-310-darwin.so +0 -0
  222. sequenzo/dissimilarity_measures/utils/seqdss.cpython-310-darwin.so +0 -0
  223. sequenzo/dissimilarity_measures/utils/seqdur.cpython-310-darwin.so +0 -0
  224. sequenzo/dissimilarity_measures/utils/seqlength.cpython-310-darwin.so +0 -0
  225. sequenzo/multidomain/__init__.py +23 -0
  226. sequenzo/multidomain/association_between_domains.py +311 -0
  227. sequenzo/multidomain/cat.py +597 -0
  228. sequenzo/multidomain/combt.py +519 -0
  229. sequenzo/multidomain/dat.py +81 -0
  230. sequenzo/multidomain/idcd.py +139 -0
  231. sequenzo/multidomain/linked_polyad.py +292 -0
  232. sequenzo/openmp_setup.py +233 -0
  233. sequenzo/prefix_tree/__init__.py +62 -0
  234. sequenzo/prefix_tree/hub.py +114 -0
  235. sequenzo/prefix_tree/individual_level_indicators.py +1321 -0
  236. sequenzo/prefix_tree/spell_individual_level_indicators.py +580 -0
  237. sequenzo/prefix_tree/spell_level_indicators.py +297 -0
  238. sequenzo/prefix_tree/system_level_indicators.py +544 -0
  239. sequenzo/prefix_tree/utils.py +54 -0
  240. sequenzo/seqhmm/__init__.py +95 -0
  241. sequenzo/seqhmm/advanced_optimization.py +305 -0
  242. sequenzo/seqhmm/bootstrap.py +411 -0
  243. sequenzo/seqhmm/build_hmm.py +142 -0
  244. sequenzo/seqhmm/build_mhmm.py +136 -0
  245. sequenzo/seqhmm/build_nhmm.py +121 -0
  246. sequenzo/seqhmm/fit_mhmm.py +62 -0
  247. sequenzo/seqhmm/fit_model.py +61 -0
  248. sequenzo/seqhmm/fit_nhmm.py +76 -0
  249. sequenzo/seqhmm/formulas.py +289 -0
  250. sequenzo/seqhmm/forward_backward_nhmm.py +276 -0
  251. sequenzo/seqhmm/gradients_nhmm.py +306 -0
  252. sequenzo/seqhmm/hmm.py +291 -0
  253. sequenzo/seqhmm/mhmm.py +314 -0
  254. sequenzo/seqhmm/model_comparison.py +238 -0
  255. sequenzo/seqhmm/multichannel_em.py +282 -0
  256. sequenzo/seqhmm/multichannel_utils.py +138 -0
  257. sequenzo/seqhmm/nhmm.py +270 -0
  258. sequenzo/seqhmm/nhmm_utils.py +191 -0
  259. sequenzo/seqhmm/predict.py +137 -0
  260. sequenzo/seqhmm/predict_mhmm.py +142 -0
  261. sequenzo/seqhmm/simulate.py +878 -0
  262. sequenzo/seqhmm/utils.py +218 -0
  263. sequenzo/seqhmm/visualization.py +910 -0
  264. sequenzo/sequence_characteristics/__init__.py +40 -0
  265. sequenzo/sequence_characteristics/complexity_index.py +49 -0
  266. sequenzo/sequence_characteristics/overall_cross_sectional_entropy.py +220 -0
  267. sequenzo/sequence_characteristics/plot_characteristics.py +593 -0
  268. sequenzo/sequence_characteristics/simple_characteristics.py +311 -0
  269. sequenzo/sequence_characteristics/state_frequencies_and_entropy_per_sequence.py +39 -0
  270. sequenzo/sequence_characteristics/turbulence.py +155 -0
  271. sequenzo/sequence_characteristics/variance_of_spell_durations.py +86 -0
  272. sequenzo/sequence_characteristics/within_sequence_entropy.py +43 -0
  273. sequenzo/suffix_tree/__init__.py +66 -0
  274. sequenzo/suffix_tree/hub.py +114 -0
  275. sequenzo/suffix_tree/individual_level_indicators.py +1679 -0
  276. sequenzo/suffix_tree/spell_individual_level_indicators.py +493 -0
  277. sequenzo/suffix_tree/spell_level_indicators.py +248 -0
  278. sequenzo/suffix_tree/system_level_indicators.py +535 -0
  279. sequenzo/suffix_tree/utils.py +56 -0
  280. sequenzo/version_check.py +283 -0
  281. sequenzo/visualization/__init__.py +29 -0
  282. sequenzo/visualization/plot_mean_time.py +222 -0
  283. sequenzo/visualization/plot_modal_state.py +276 -0
  284. sequenzo/visualization/plot_most_frequent_sequences.py +147 -0
  285. sequenzo/visualization/plot_relative_frequency.py +405 -0
  286. sequenzo/visualization/plot_sequence_index.py +1175 -0
  287. sequenzo/visualization/plot_single_medoid.py +153 -0
  288. sequenzo/visualization/plot_state_distribution.py +651 -0
  289. sequenzo/visualization/plot_transition_matrix.py +190 -0
  290. sequenzo/visualization/utils/__init__.py +23 -0
  291. sequenzo/visualization/utils/utils.py +310 -0
  292. sequenzo/with_event_history_analysis/__init__.py +35 -0
  293. sequenzo/with_event_history_analysis/sequence_analysis_multi_state_model.py +850 -0
  294. sequenzo/with_event_history_analysis/sequence_history_analysis.py +283 -0
  295. sequenzo-0.1.31.dist-info/METADATA +286 -0
  296. sequenzo-0.1.31.dist-info/RECORD +299 -0
  297. sequenzo-0.1.31.dist-info/WHEEL +5 -0
  298. sequenzo-0.1.31.dist-info/licenses/LICENSE +28 -0
  299. sequenzo-0.1.31.dist-info/top_level.txt +2 -0
@@ -0,0 +1,1155 @@
1
+ /***************************************************************************
2
+ * Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
3
+ * Martin Renou *
4
+ * Copyright (c) QuantStack *
5
+ * Copyright (c) Serge Guelton *
6
+ * Copyright (c) Yibo Cai *
7
+ * *
8
+ * Distributed under the terms of the BSD 3-Clause License. *
9
+ * *
10
+ * The full license is in the file LICENSE, distributed with this software. *
11
+ ****************************************************************************/
12
+
13
+ #ifndef XSIMD_SVE_HPP
14
+ #define XSIMD_SVE_HPP
15
+
16
+ #include <complex>
17
+ #include <type_traits>
18
+
19
+ #include "../types/xsimd_sve_register.hpp"
20
+
21
+ namespace xsimd
22
+ {
23
+ template <typename T, class A, T... Values>
24
+ struct batch_constant;
25
+
26
+ namespace kernel
27
+ {
28
+ namespace detail
29
+ {
30
+ using xsimd::index;
31
+ using xsimd::types::detail::sve_vector_type;
32
+
33
+ // predicate creation
34
+ XSIMD_INLINE svbool_t sve_ptrue_impl(index<1>) noexcept { return svptrue_b8(); }
35
+ XSIMD_INLINE svbool_t sve_ptrue_impl(index<2>) noexcept { return svptrue_b16(); }
36
+ XSIMD_INLINE svbool_t sve_ptrue_impl(index<4>) noexcept { return svptrue_b32(); }
37
+ XSIMD_INLINE svbool_t sve_ptrue_impl(index<8>) noexcept { return svptrue_b64(); }
38
+
39
+ template <class T>
40
+ svbool_t sve_ptrue() noexcept { return sve_ptrue_impl(index<sizeof(T)> {}); }
41
+
42
+ // count active lanes in a predicate
43
+ XSIMD_INLINE uint64_t sve_pcount_impl(svbool_t p, index<1>) noexcept { return svcntp_b8(p, p); }
44
+ XSIMD_INLINE uint64_t sve_pcount_impl(svbool_t p, index<2>) noexcept { return svcntp_b16(p, p); }
45
+ XSIMD_INLINE uint64_t sve_pcount_impl(svbool_t p, index<4>) noexcept { return svcntp_b32(p, p); }
46
+ XSIMD_INLINE uint64_t sve_pcount_impl(svbool_t p, index<8>) noexcept { return svcntp_b64(p, p); }
47
+
48
+ template <class T>
49
+ XSIMD_INLINE uint64_t sve_pcount(svbool_t p) noexcept { return sve_pcount_impl(p, index<sizeof(T)> {}); }
50
+
51
+ // enable for signed integers
52
+ template <class T>
53
+ using sve_enable_signed_int_t = typename std::enable_if<std::is_integral<T>::value && std::is_signed<T>::value, int>::type;
54
+
55
+ // enable for unsigned integers
56
+ template <class T>
57
+ using sve_enable_unsigned_int_t = typename std::enable_if<std::is_integral<T>::value && !std::is_signed<T>::value, int>::type;
58
+
59
+ // enable for floating points
60
+ template <class T>
61
+ using sve_enable_floating_point_t = typename std::enable_if<std::is_floating_point<T>::value, int>::type;
62
+
63
+ // enable for signed integers or floating points
64
+ template <class T>
65
+ using sve_enable_signed_int_or_floating_point_t = typename std::enable_if<std::is_signed<T>::value, int>::type;
66
+
67
+ // enable for all SVE supported types
68
+ template <class T>
69
+ using sve_enable_all_t = typename std::enable_if<std::is_arithmetic<T>::value, int>::type;
70
+ } // namespace detail
71
+
72
+ /*********
73
+ * Load *
74
+ *********/
75
+
76
+ namespace detail
77
+ {
78
+ // "char" is not allowed in SVE load/store operations
79
+ using sve_fix_char_t_impl = typename std::conditional<std::is_signed<char>::value, int8_t, uint8_t>::type;
80
+
81
+ template <class T>
82
+ using sve_fix_char_t = typename std::conditional<std::is_same<char, typename std::decay<T>::type>::value,
83
+ sve_fix_char_t_impl, T>::type;
84
+ }
85
+
86
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
87
+ XSIMD_INLINE batch<T, A> load_aligned(T const* src, convert<T>, requires_arch<sve>) noexcept
88
+ {
89
+ return svld1(detail::sve_ptrue<T>(), reinterpret_cast<detail::sve_fix_char_t<T> const*>(src));
90
+ }
91
+
92
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
93
+ XSIMD_INLINE batch<T, A> load_unaligned(T const* src, convert<T>, requires_arch<sve>) noexcept
94
+ {
95
+ return load_aligned<A>(src, convert<T>(), sve {});
96
+ }
97
+
98
+ // load_complex
99
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
100
+ XSIMD_INLINE batch<std::complex<T>, A> load_complex_aligned(std::complex<T> const* mem, convert<std::complex<T>>, requires_arch<sve>) noexcept
101
+ {
102
+ const T* buf = reinterpret_cast<const T*>(mem);
103
+ const auto tmp = svld2(detail::sve_ptrue<T>(), buf);
104
+ const auto real = svget2(tmp, 0);
105
+ const auto imag = svget2(tmp, 1);
106
+ return batch<std::complex<T>, A> { real, imag };
107
+ }
108
+
109
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
110
+ XSIMD_INLINE batch<std::complex<T>, A> load_complex_unaligned(std::complex<T> const* mem, convert<std::complex<T>>, requires_arch<sve>) noexcept
111
+ {
112
+ return load_complex_aligned<A>(mem, convert<std::complex<T>> {}, sve {});
113
+ }
114
+
115
+ /*********
116
+ * Store *
117
+ *********/
118
+
119
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
120
+ XSIMD_INLINE void store_aligned(T* dst, batch<T, A> const& src, requires_arch<sve>) noexcept
121
+ {
122
+ svst1(detail::sve_ptrue<T>(), reinterpret_cast<detail::sve_fix_char_t<T>*>(dst), src);
123
+ }
124
+
125
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
126
+ XSIMD_INLINE void store_unaligned(T* dst, batch<T, A> const& src, requires_arch<sve>) noexcept
127
+ {
128
+ store_aligned<A>(dst, src, sve {});
129
+ }
130
+
131
+ // store_complex
132
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
133
+ XSIMD_INLINE void store_complex_aligned(std::complex<T>* dst, batch<std::complex<T>, A> const& src, requires_arch<sve>) noexcept
134
+ {
135
+ using v2type = typename std::conditional<(sizeof(T) == 4), svfloat32x2_t, svfloat64x2_t>::type;
136
+ v2type tmp {};
137
+ tmp = svset2(tmp, 0, src.real());
138
+ tmp = svset2(tmp, 1, src.imag());
139
+ T* buf = reinterpret_cast<T*>(dst);
140
+ svst2(detail::sve_ptrue<T>(), buf, tmp);
141
+ }
142
+
143
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
144
+ XSIMD_INLINE void store_complex_unaligned(std::complex<T>* dst, batch<std::complex<T>, A> const& src, requires_arch<sve>) noexcept
145
+ {
146
+ store_complex_aligned(dst, src, sve {});
147
+ }
148
+
149
+ /******************
150
+ * scatter/gather *
151
+ ******************/
152
+
153
+ namespace detail
154
+ {
155
+ template <class T, class U>
156
+ using sve_enable_sg_t = typename std::enable_if<(sizeof(T) == sizeof(U) && (sizeof(T) == 4 || sizeof(T) == 8)), int>::type;
157
+ }
158
+
159
+ // scatter
160
+ template <class A, class T, class U, detail::sve_enable_sg_t<T, U> = 0>
161
+ XSIMD_INLINE void scatter(batch<T, A> const& src, T* dst, batch<U, A> const& index, kernel::requires_arch<sve>) noexcept
162
+ {
163
+ svst1_scatter_index(detail::sve_ptrue<T>(), dst, index.data, src.data);
164
+ }
165
+
166
+ // gather
167
+ template <class A, class T, class U, detail::sve_enable_sg_t<T, U> = 0>
168
+ XSIMD_INLINE batch<T, A> gather(batch<T, A> const&, T const* src, batch<U, A> const& index, kernel::requires_arch<sve>) noexcept
169
+ {
170
+ return svld1_gather_index(detail::sve_ptrue<T>(), src, index.data);
171
+ }
172
+
173
+ /********************
174
+ * Scalar to vector *
175
+ ********************/
176
+
177
+ // broadcast
178
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 1> = 0>
179
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
180
+ {
181
+ return svdup_n_u8(uint8_t(arg));
182
+ }
183
+
184
+ template <class A, class T, detail::enable_sized_signed_t<T, 1> = 0>
185
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
186
+ {
187
+ return svdup_n_s8(int8_t(arg));
188
+ }
189
+
190
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 2> = 0>
191
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
192
+ {
193
+ return svdup_n_u16(uint16_t(arg));
194
+ }
195
+
196
+ template <class A, class T, detail::enable_sized_signed_t<T, 2> = 0>
197
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
198
+ {
199
+ return svdup_n_s16(int16_t(arg));
200
+ }
201
+
202
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 4> = 0>
203
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
204
+ {
205
+ return svdup_n_u32(uint32_t(arg));
206
+ }
207
+
208
+ template <class A, class T, detail::enable_sized_signed_t<T, 4> = 0>
209
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
210
+ {
211
+ return svdup_n_s32(int32_t(arg));
212
+ }
213
+
214
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 8> = 0>
215
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
216
+ {
217
+ return svdup_n_u64(uint64_t(arg));
218
+ }
219
+
220
+ template <class A, class T, detail::enable_sized_signed_t<T, 8> = 0>
221
+ XSIMD_INLINE batch<T, A> broadcast(T arg, requires_arch<sve>) noexcept
222
+ {
223
+ return svdup_n_s64(int64_t(arg));
224
+ }
225
+
226
+ template <class A>
227
+ XSIMD_INLINE batch<float, A> broadcast(float arg, requires_arch<sve>) noexcept
228
+ {
229
+ return svdup_n_f32(arg);
230
+ }
231
+
232
+ template <class A>
233
+ XSIMD_INLINE batch<double, A> broadcast(double arg, requires_arch<sve>) noexcept
234
+ {
235
+ return svdup_n_f64(arg);
236
+ }
237
+
238
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
239
+ XSIMD_INLINE batch<T, A> broadcast(T val, requires_arch<sve>) noexcept
240
+ {
241
+ return broadcast<sve>(val, sve {});
242
+ }
243
+
244
+ /**************
245
+ * Arithmetic *
246
+ **************/
247
+
248
+ // add
249
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
250
+ XSIMD_INLINE batch<T, A> add(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
251
+ {
252
+ return svadd_x(detail::sve_ptrue<T>(), lhs, rhs);
253
+ }
254
+
255
+ // sadd
256
+ template <class A, class T, detail::enable_integral_t<T> = 0>
257
+ XSIMD_INLINE batch<T, A> sadd(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
258
+ {
259
+ return svqadd(lhs, rhs);
260
+ }
261
+
262
+ // sub
263
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
264
+ XSIMD_INLINE batch<T, A> sub(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
265
+ {
266
+ return svsub_x(detail::sve_ptrue<T>(), lhs, rhs);
267
+ }
268
+
269
+ // ssub
270
+ template <class A, class T, detail::enable_integral_t<T> = 0>
271
+ XSIMD_INLINE batch<T, A> ssub(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
272
+ {
273
+ return svqsub(lhs, rhs);
274
+ }
275
+
276
+ // mul
277
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
278
+ XSIMD_INLINE batch<T, A> mul(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
279
+ {
280
+ return svmul_x(detail::sve_ptrue<T>(), lhs, rhs);
281
+ }
282
+
283
+ // div
284
+ template <class A, class T, typename std::enable_if<sizeof(T) >= 4, int>::type = 0>
285
+ XSIMD_INLINE batch<T, A> div(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
286
+ {
287
+ return svdiv_x(detail::sve_ptrue<T>(), lhs, rhs);
288
+ }
289
+
290
+ // max
291
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
292
+ XSIMD_INLINE batch<T, A> max(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
293
+ {
294
+ return svmax_x(detail::sve_ptrue<T>(), lhs, rhs);
295
+ }
296
+
297
+ // min
298
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
299
+ XSIMD_INLINE batch<T, A> min(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
300
+ {
301
+ return svmin_x(detail::sve_ptrue<T>(), lhs, rhs);
302
+ }
303
+
304
+ // neg
305
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 1> = 0>
306
+ XSIMD_INLINE batch<T, A> neg(batch<T, A> const& arg, requires_arch<sve>) noexcept
307
+ {
308
+ return svreinterpret_u8(svneg_x(detail::sve_ptrue<T>(), svreinterpret_s8(arg)));
309
+ }
310
+
311
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 2> = 0>
312
+ XSIMD_INLINE batch<T, A> neg(batch<T, A> const& arg, requires_arch<sve>) noexcept
313
+ {
314
+ return svreinterpret_u16(svneg_x(detail::sve_ptrue<T>(), svreinterpret_s16(arg)));
315
+ }
316
+
317
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 4> = 0>
318
+ XSIMD_INLINE batch<T, A> neg(batch<T, A> const& arg, requires_arch<sve>) noexcept
319
+ {
320
+ return svreinterpret_u32(svneg_x(detail::sve_ptrue<T>(), svreinterpret_s32(arg)));
321
+ }
322
+
323
+ template <class A, class T, detail::enable_sized_unsigned_t<T, 8> = 0>
324
+ XSIMD_INLINE batch<T, A> neg(batch<T, A> const& arg, requires_arch<sve>) noexcept
325
+ {
326
+ return svreinterpret_u64(svneg_x(detail::sve_ptrue<T>(), svreinterpret_s64(arg)));
327
+ }
328
+
329
+ template <class A, class T, detail::sve_enable_signed_int_or_floating_point_t<T> = 0>
330
+ XSIMD_INLINE batch<T, A> neg(batch<T, A> const& arg, requires_arch<sve>) noexcept
331
+ {
332
+ return svneg_x(detail::sve_ptrue<T>(), arg);
333
+ }
334
+
335
+ // abs
336
+ template <class A, class T, detail::sve_enable_unsigned_int_t<T> = 0>
337
+ XSIMD_INLINE batch<T, A> abs(batch<T, A> const& arg, requires_arch<sve>) noexcept
338
+ {
339
+ return arg;
340
+ }
341
+
342
+ template <class A, class T, detail::sve_enable_signed_int_or_floating_point_t<T> = 0>
343
+ XSIMD_INLINE batch<T, A> abs(batch<T, A> const& arg, requires_arch<sve>) noexcept
344
+ {
345
+ return svabs_x(detail::sve_ptrue<T>(), arg);
346
+ }
347
+
348
+ // fma: x * y + z
349
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
350
+ XSIMD_INLINE batch<T, A> fma(batch<T, A> const& x, batch<T, A> const& y, batch<T, A> const& z, requires_arch<sve>) noexcept
351
+ {
352
+ return svmad_x(detail::sve_ptrue<T>(), x, y, z);
353
+ }
354
+
355
+ // fnma: z - x * y
356
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
357
+ XSIMD_INLINE batch<T, A> fnma(batch<T, A> const& x, batch<T, A> const& y, batch<T, A> const& z, requires_arch<sve>) noexcept
358
+ {
359
+ return svmsb_x(detail::sve_ptrue<T>(), x, y, z);
360
+ }
361
+
362
+ // fms: x * y - z
363
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
364
+ XSIMD_INLINE batch<T, A> fms(batch<T, A> const& x, batch<T, A> const& y, batch<T, A> const& z, requires_arch<sve>) noexcept
365
+ {
366
+ return -fnma(x, y, z, sve {});
367
+ }
368
+
369
+ // fnms: - x * y - z
370
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
371
+ XSIMD_INLINE batch<T, A> fnms(batch<T, A> const& x, batch<T, A> const& y, batch<T, A> const& z, requires_arch<sve>) noexcept
372
+ {
373
+ return -fma(x, y, z, sve {});
374
+ }
375
+
376
+ /**********************
377
+ * Logical operations *
378
+ **********************/
379
+
380
+ // bitwise_and
381
+ template <class A, class T, detail::enable_integral_t<T> = 0>
382
+ XSIMD_INLINE batch<T, A> bitwise_and(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
383
+ {
384
+ return svand_x(detail::sve_ptrue<T>(), lhs, rhs);
385
+ }
386
+
387
+ template <class A>
388
+ XSIMD_INLINE batch<float, A> bitwise_and(batch<float, A> const& lhs, batch<float, A> const& rhs, requires_arch<sve>) noexcept
389
+ {
390
+ const auto lhs_bits = svreinterpret_u32(lhs);
391
+ const auto rhs_bits = svreinterpret_u32(rhs);
392
+ const auto result_bits = svand_x(detail::sve_ptrue<float>(), lhs_bits, rhs_bits);
393
+ return svreinterpret_f32(result_bits);
394
+ }
395
+
396
+ template <class A>
397
+ XSIMD_INLINE batch<double, A> bitwise_and(batch<double, A> const& lhs, batch<double, A> const& rhs, requires_arch<sve>) noexcept
398
+ {
399
+ const auto lhs_bits = svreinterpret_u64(lhs);
400
+ const auto rhs_bits = svreinterpret_u64(rhs);
401
+ const auto result_bits = svand_x(detail::sve_ptrue<double>(), lhs_bits, rhs_bits);
402
+ return svreinterpret_f64(result_bits);
403
+ }
404
+
405
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
406
+ XSIMD_INLINE batch_bool<T, A> bitwise_and(batch_bool<T, A> const& lhs, batch_bool<T, A> const& rhs, requires_arch<sve>) noexcept
407
+ {
408
+ return svand_z(detail::sve_ptrue<T>(), lhs, rhs);
409
+ }
410
+
411
+ // bitwise_andnot
412
+ template <class A, class T, detail::enable_integral_t<T> = 0>
413
+ XSIMD_INLINE batch<T, A> bitwise_andnot(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
414
+ {
415
+ return svbic_x(detail::sve_ptrue<T>(), lhs, rhs);
416
+ }
417
+
418
+ template <class A>
419
+ XSIMD_INLINE batch<float, A> bitwise_andnot(batch<float, A> const& lhs, batch<float, A> const& rhs, requires_arch<sve>) noexcept
420
+ {
421
+ const auto lhs_bits = svreinterpret_u32(lhs);
422
+ const auto rhs_bits = svreinterpret_u32(rhs);
423
+ const auto result_bits = svbic_x(detail::sve_ptrue<float>(), lhs_bits, rhs_bits);
424
+ return svreinterpret_f32(result_bits);
425
+ }
426
+
427
+ template <class A>
428
+ XSIMD_INLINE batch<double, A> bitwise_andnot(batch<double, A> const& lhs, batch<double, A> const& rhs, requires_arch<sve>) noexcept
429
+ {
430
+ const auto lhs_bits = svreinterpret_u64(lhs);
431
+ const auto rhs_bits = svreinterpret_u64(rhs);
432
+ const auto result_bits = svbic_x(detail::sve_ptrue<double>(), lhs_bits, rhs_bits);
433
+ return svreinterpret_f64(result_bits);
434
+ }
435
+
436
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
437
+ XSIMD_INLINE batch_bool<T, A> bitwise_andnot(batch_bool<T, A> const& lhs, batch_bool<T, A> const& rhs, requires_arch<sve>) noexcept
438
+ {
439
+ return svbic_z(detail::sve_ptrue<T>(), lhs, rhs);
440
+ }
441
+
442
+ // bitwise_or
443
+ template <class A, class T, detail::enable_integral_t<T> = 0>
444
+ XSIMD_INLINE batch<T, A> bitwise_or(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
445
+ {
446
+ return svorr_x(detail::sve_ptrue<T>(), lhs, rhs);
447
+ }
448
+
449
+ template <class A>
450
+ XSIMD_INLINE batch<float, A> bitwise_or(batch<float, A> const& lhs, batch<float, A> const& rhs, requires_arch<sve>) noexcept
451
+ {
452
+ const auto lhs_bits = svreinterpret_u32(lhs);
453
+ const auto rhs_bits = svreinterpret_u32(rhs);
454
+ const auto result_bits = svorr_x(detail::sve_ptrue<float>(), lhs_bits, rhs_bits);
455
+ return svreinterpret_f32(result_bits);
456
+ }
457
+
458
+ template <class A>
459
+ XSIMD_INLINE batch<double, A> bitwise_or(batch<double, A> const& lhs, batch<double, A> const& rhs, requires_arch<sve>) noexcept
460
+ {
461
+ const auto lhs_bits = svreinterpret_u64(lhs);
462
+ const auto rhs_bits = svreinterpret_u64(rhs);
463
+ const auto result_bits = svorr_x(detail::sve_ptrue<double>(), lhs_bits, rhs_bits);
464
+ return svreinterpret_f64(result_bits);
465
+ }
466
+
467
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
468
+ XSIMD_INLINE batch_bool<T, A> bitwise_or(batch_bool<T, A> const& lhs, batch_bool<T, A> const& rhs, requires_arch<sve>) noexcept
469
+ {
470
+ return svorr_z(detail::sve_ptrue<T>(), lhs, rhs);
471
+ }
472
+
473
+ // bitwise_xor
474
+ template <class A, class T, detail::enable_integral_t<T> = 0>
475
+ XSIMD_INLINE batch<T, A> bitwise_xor(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
476
+ {
477
+ return sveor_x(detail::sve_ptrue<T>(), lhs, rhs);
478
+ }
479
+
480
+ template <class A>
481
+ XSIMD_INLINE batch<float, A> bitwise_xor(batch<float, A> const& lhs, batch<float, A> const& rhs, requires_arch<sve>) noexcept
482
+ {
483
+ const auto lhs_bits = svreinterpret_u32(lhs);
484
+ const auto rhs_bits = svreinterpret_u32(rhs);
485
+ const auto result_bits = sveor_x(detail::sve_ptrue<float>(), lhs_bits, rhs_bits);
486
+ return svreinterpret_f32(result_bits);
487
+ }
488
+
489
+ template <class A>
490
+ XSIMD_INLINE batch<double, A> bitwise_xor(batch<double, A> const& lhs, batch<double, A> const& rhs, requires_arch<sve>) noexcept
491
+ {
492
+ const auto lhs_bits = svreinterpret_u64(lhs);
493
+ const auto rhs_bits = svreinterpret_u64(rhs);
494
+ const auto result_bits = sveor_x(detail::sve_ptrue<double>(), lhs_bits, rhs_bits);
495
+ return svreinterpret_f64(result_bits);
496
+ }
497
+
498
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
499
+ XSIMD_INLINE batch_bool<T, A> bitwise_xor(batch_bool<T, A> const& lhs, batch_bool<T, A> const& rhs, requires_arch<sve>) noexcept
500
+ {
501
+ return sveor_z(detail::sve_ptrue<T>(), lhs, rhs);
502
+ }
503
+
504
+ // bitwise_not
505
+ template <class A, class T, detail::enable_integral_t<T> = 0>
506
+ XSIMD_INLINE batch<T, A> bitwise_not(batch<T, A> const& arg, requires_arch<sve>) noexcept
507
+ {
508
+ return svnot_x(detail::sve_ptrue<T>(), arg);
509
+ }
510
+
511
+ template <class A>
512
+ XSIMD_INLINE batch<float, A> bitwise_not(batch<float, A> const& arg, requires_arch<sve>) noexcept
513
+ {
514
+ const auto arg_bits = svreinterpret_u32(arg);
515
+ const auto result_bits = svnot_x(detail::sve_ptrue<float>(), arg_bits);
516
+ return svreinterpret_f32(result_bits);
517
+ }
518
+
519
+ template <class A>
520
+ XSIMD_INLINE batch<double, A> bitwise_not(batch<double, A> const& arg, requires_arch<sve>) noexcept
521
+ {
522
+ const auto arg_bits = svreinterpret_u64(arg);
523
+ const auto result_bits = svnot_x(detail::sve_ptrue<double>(), arg_bits);
524
+ return svreinterpret_f64(result_bits);
525
+ }
526
+
527
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
528
+ XSIMD_INLINE batch_bool<T, A> bitwise_not(batch_bool<T, A> const& arg, requires_arch<sve>) noexcept
529
+ {
530
+ return svnot_z(detail::sve_ptrue<T>(), arg);
531
+ }
532
+
533
+ /**********
534
+ * Shifts *
535
+ **********/
536
+
537
+ namespace detail
538
+ {
539
+ template <class A, class T, class U>
540
+ XSIMD_INLINE batch<U, A> sve_to_unsigned_batch_impl(batch<T, A> const& arg, index<1>) noexcept
541
+ {
542
+ return svreinterpret_u8(arg);
543
+ }
544
+
545
+ template <class A, class T, class U>
546
+ XSIMD_INLINE batch<U, A> sve_to_unsigned_batch_impl(batch<T, A> const& arg, index<2>) noexcept
547
+ {
548
+ return svreinterpret_u16(arg);
549
+ }
550
+
551
+ template <class A, class T, class U>
552
+ XSIMD_INLINE batch<U, A> sve_to_unsigned_batch_impl(batch<T, A> const& arg, index<4>) noexcept
553
+ {
554
+ return svreinterpret_u32(arg);
555
+ }
556
+
557
+ template <class A, class T, class U>
558
+ XSIMD_INLINE batch<U, A> sve_to_unsigned_batch_impl(batch<T, A> const& arg, index<8>) noexcept
559
+ {
560
+ return svreinterpret_u64(arg);
561
+ }
562
+
563
+ template <class A, class T, class U = as_unsigned_integer_t<T>>
564
+ XSIMD_INLINE batch<U, A> sve_to_unsigned_batch(batch<T, A> const& arg) noexcept
565
+ {
566
+ return sve_to_unsigned_batch_impl<A, T, U>(arg, index<sizeof(T)> {});
567
+ }
568
+ } // namespace detail
569
+
570
+ // bitwise_lshift
571
+ template <class A, class T, detail::enable_integral_t<T> = 0>
572
+ XSIMD_INLINE batch<T, A> bitwise_lshift(batch<T, A> const& arg, int n, requires_arch<sve>) noexcept
573
+ {
574
+ constexpr std::size_t size = sizeof(typename batch<T, A>::value_type) * 8;
575
+ assert(0 <= n && static_cast<std::size_t>(n) < size && "index in bounds");
576
+ return svlsl_x(detail::sve_ptrue<T>(), arg, n);
577
+ }
578
+
579
+ template <class A, class T, detail::enable_integral_t<T> = 0>
580
+ XSIMD_INLINE batch<T, A> bitwise_lshift(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
581
+ {
582
+ return svlsl_x(detail::sve_ptrue<T>(), lhs, detail::sve_to_unsigned_batch<A, T>(rhs));
583
+ }
584
+
585
+ // bitwise_rshift
586
+ template <class A, class T, detail::sve_enable_unsigned_int_t<T> = 0>
587
+ XSIMD_INLINE batch<T, A> bitwise_rshift(batch<T, A> const& arg, int n, requires_arch<sve>) noexcept
588
+ {
589
+ constexpr std::size_t size = sizeof(typename batch<T, A>::value_type) * 8;
590
+ assert(0 <= n && static_cast<std::size_t>(n) < size && "index in bounds");
591
+ return svlsr_x(detail::sve_ptrue<T>(), arg, static_cast<T>(n));
592
+ }
593
+
594
+ template <class A, class T, detail::sve_enable_unsigned_int_t<T> = 0>
595
+ XSIMD_INLINE batch<T, A> bitwise_rshift(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
596
+ {
597
+ return svlsr_x(detail::sve_ptrue<T>(), lhs, rhs);
598
+ }
599
+
600
+ template <class A, class T, detail::sve_enable_signed_int_t<T> = 0>
601
+ XSIMD_INLINE batch<T, A> bitwise_rshift(batch<T, A> const& arg, int n, requires_arch<sve>) noexcept
602
+ {
603
+ constexpr std::size_t size = sizeof(typename batch<T, A>::value_type) * 8;
604
+ assert(0 <= n && static_cast<std::size_t>(n) < size && "index in bounds");
605
+ return svasr_x(detail::sve_ptrue<T>(), arg, static_cast<as_unsigned_integer_t<T>>(n));
606
+ }
607
+
608
+ template <class A, class T, detail::sve_enable_signed_int_t<T> = 0>
609
+ XSIMD_INLINE batch<T, A> bitwise_rshift(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
610
+ {
611
+ return svasr_x(detail::sve_ptrue<T>(), lhs, detail::sve_to_unsigned_batch<A, T>(rhs));
612
+ }
613
+
614
+ /**************
615
+ * Reductions *
616
+ **************/
617
+
618
+ // reduce_add
619
+ template <class A, class T, class V = typename batch<T, A>::value_type, detail::sve_enable_all_t<T> = 0>
620
+ XSIMD_INLINE V reduce_add(batch<T, A> const& arg, requires_arch<sve>) noexcept
621
+ {
622
+ // sve integer reduction results are promoted to 64 bits
623
+ return static_cast<V>(svaddv(detail::sve_ptrue<T>(), arg));
624
+ }
625
+
626
+ // reduce_max
627
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
628
+ XSIMD_INLINE T reduce_max(batch<T, A> const& arg, requires_arch<sve>) noexcept
629
+ {
630
+ return svmaxv(detail::sve_ptrue<T>(), arg);
631
+ }
632
+
633
+ // reduce_min
634
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
635
+ XSIMD_INLINE T reduce_min(batch<T, A> const& arg, requires_arch<sve>) noexcept
636
+ {
637
+ return svminv(detail::sve_ptrue<T>(), arg);
638
+ }
639
+
640
+ // haddp
641
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
642
+ XSIMD_INLINE batch<T, A> haddp(const batch<T, A>* row, requires_arch<sve>) noexcept
643
+ {
644
+ constexpr std::size_t size = batch<T, A>::size;
645
+ T sums[size];
646
+ for (std::size_t i = 0; i < size; ++i)
647
+ {
648
+ sums[i] = reduce_add(row[i], sve {});
649
+ }
650
+ return svld1(detail::sve_ptrue<T>(), sums);
651
+ }
652
+
653
+ /***************
654
+ * Comparisons *
655
+ ***************/
656
+
657
+ // eq
658
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
659
+ XSIMD_INLINE batch_bool<T, A> eq(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
660
+ {
661
+ return svcmpeq(detail::sve_ptrue<T>(), lhs, rhs);
662
+ }
663
+
664
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
665
+ XSIMD_INLINE batch_bool<T, A> eq(batch_bool<T, A> const& lhs, batch_bool<T, A> const& rhs, requires_arch<sve>) noexcept
666
+ {
667
+ const auto neq_result = sveor_z(detail::sve_ptrue<T>(), lhs, rhs);
668
+ return svnot_z(detail::sve_ptrue<T>(), neq_result);
669
+ }
670
+
671
+ // neq
672
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
673
+ XSIMD_INLINE batch_bool<T, A> neq(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
674
+ {
675
+ return svcmpne(detail::sve_ptrue<T>(), lhs, rhs);
676
+ }
677
+
678
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
679
+ XSIMD_INLINE batch_bool<T, A> neq(batch_bool<T, A> const& lhs, batch_bool<T, A> const& rhs, requires_arch<sve>) noexcept
680
+ {
681
+ return sveor_z(detail::sve_ptrue<T>(), lhs, rhs);
682
+ }
683
+
684
+ // lt
685
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
686
+ XSIMD_INLINE batch_bool<T, A> lt(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
687
+ {
688
+ return svcmplt(detail::sve_ptrue<T>(), lhs, rhs);
689
+ }
690
+
691
+ // le
692
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
693
+ XSIMD_INLINE batch_bool<T, A> le(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
694
+ {
695
+ return svcmple(detail::sve_ptrue<T>(), lhs, rhs);
696
+ }
697
+
698
+ // gt
699
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
700
+ XSIMD_INLINE batch_bool<T, A> gt(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
701
+ {
702
+ return svcmpgt(detail::sve_ptrue<T>(), lhs, rhs);
703
+ }
704
+
705
+ // ge
706
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
707
+ XSIMD_INLINE batch_bool<T, A> ge(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
708
+ {
709
+ return svcmpge(detail::sve_ptrue<T>(), lhs, rhs);
710
+ }
711
+
712
+ /***************
713
+ * Permutation *
714
+ ***************/
715
+
716
+ // rotate_left
717
+ template <size_t N, class A, class T, detail::sve_enable_all_t<T> = 0>
718
+ XSIMD_INLINE batch<T, A> rotate_left(batch<T, A> const& a, requires_arch<sve>) noexcept
719
+ {
720
+ return svext(a, a, N);
721
+ }
722
+
723
+ // swizzle (dynamic)
724
+ template <class A, class T, class I>
725
+ XSIMD_INLINE batch<T, A> swizzle(batch<T, A> const& arg, batch<I, A> indices, requires_arch<sve>) noexcept
726
+ {
727
+ return svtbl(arg, indices);
728
+ }
729
+
730
+ template <class A, class T, class I>
731
+ XSIMD_INLINE batch<std::complex<T>, A> swizzle(batch<std::complex<T>, A> const& self,
732
+ batch<I, A> indices,
733
+ requires_arch<sve>) noexcept
734
+ {
735
+ const auto real = swizzle(self.real(), indices, sve {});
736
+ const auto imag = swizzle(self.imag(), indices, sve {});
737
+ return batch<std::complex<T>>(real, imag);
738
+ }
739
+
740
+ // swizzle (static)
741
+ template <class A, class T, class I, I... idx>
742
+ XSIMD_INLINE batch<T, A> swizzle(batch<T, A> const& arg, batch_constant<I, A, idx...> indices, requires_arch<sve>) noexcept
743
+ {
744
+ static_assert(batch<T, A>::size == sizeof...(idx), "invalid swizzle indices");
745
+ return swizzle(arg, indices.as_batch(), sve {});
746
+ }
747
+
748
+ template <class A, class T, class I, I... idx>
749
+ XSIMD_INLINE batch<std::complex<T>, A> swizzle(batch<std::complex<T>, A> const& arg,
750
+ batch_constant<I, A, idx...> indices,
751
+ requires_arch<sve>) noexcept
752
+ {
753
+ static_assert(batch<std::complex<T>, A>::size == sizeof...(idx), "invalid swizzle indices");
754
+ return swizzle(arg, indices.as_batch(), sve {});
755
+ }
756
+
757
+ /*************
758
+ * Selection *
759
+ *************/
760
+
761
+ // extract_pair
762
+ namespace detail
763
+ {
764
+ template <class A, class T>
765
+ XSIMD_INLINE batch<T, A> sve_extract_pair(batch<T, A> const&, batch<T, A> const& /*rhs*/, std::size_t, ::xsimd::detail::index_sequence<>) noexcept
766
+ {
767
+ assert(false && "extract_pair out of bounds");
768
+ return batch<T, A> {};
769
+ }
770
+
771
+ template <class A, class T, size_t I, size_t... Is>
772
+ XSIMD_INLINE batch<T, A> sve_extract_pair(batch<T, A> const& lhs, batch<T, A> const& rhs, std::size_t n, ::xsimd::detail::index_sequence<I, Is...>) noexcept
773
+ {
774
+ if (n == I)
775
+ {
776
+ return svext(rhs, lhs, I);
777
+ }
778
+ else
779
+ {
780
+ return sve_extract_pair(lhs, rhs, n, ::xsimd::detail::index_sequence<Is...>());
781
+ }
782
+ }
783
+
784
+ template <class A, class T, size_t... Is>
785
+ XSIMD_INLINE batch<T, A> sve_extract_pair_impl(batch<T, A> const& lhs, batch<T, A> const& rhs, std::size_t n, ::xsimd::detail::index_sequence<0, Is...>) noexcept
786
+ {
787
+ if (n == 0)
788
+ {
789
+ return rhs;
790
+ }
791
+ else
792
+ {
793
+ return sve_extract_pair(lhs, rhs, n, ::xsimd::detail::index_sequence<Is...>());
794
+ }
795
+ }
796
+ }
797
+
798
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
799
+ XSIMD_INLINE batch<T, A> extract_pair(batch<T, A> const& lhs, batch<T, A> const& rhs, std::size_t n, requires_arch<sve>) noexcept
800
+ {
801
+ constexpr std::size_t size = batch<T, A>::size;
802
+ assert(n < size && "index in bounds");
803
+ return detail::sve_extract_pair_impl(lhs, rhs, n, ::xsimd::detail::make_index_sequence<size>());
804
+ }
805
+
806
+ // select
807
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
808
+ XSIMD_INLINE batch<T, A> select(batch_bool<T, A> const& cond, batch<T, A> const& a, batch<T, A> const& b, requires_arch<sve>) noexcept
809
+ {
810
+ return svsel(cond, a, b);
811
+ }
812
+
813
+ template <class A, class T, bool... b>
814
+ XSIMD_INLINE batch<T, A> select(batch_bool_constant<T, A, b...> const&, batch<T, A> const& true_br, batch<T, A> const& false_br, requires_arch<sve>) noexcept
815
+ {
816
+ return select(batch_bool<T, A> { b... }, true_br, false_br, sve {});
817
+ }
818
+
819
+ // zip_lo
820
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
821
+ XSIMD_INLINE batch<T, A> zip_lo(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
822
+ {
823
+ return svzip1(lhs, rhs);
824
+ }
825
+
826
+ // zip_hi
827
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
828
+ XSIMD_INLINE batch<T, A> zip_hi(batch<T, A> const& lhs, batch<T, A> const& rhs, requires_arch<sve>) noexcept
829
+ {
830
+ return svzip2(lhs, rhs);
831
+ }
832
+
833
+ /*****************************
834
+ * Floating-point arithmetic *
835
+ *****************************/
836
+
837
+ // rsqrt
838
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
839
+ XSIMD_INLINE batch<T, A> rsqrt(batch<T, A> const& arg, requires_arch<sve>) noexcept
840
+ {
841
+ return svrsqrte(arg);
842
+ }
843
+
844
+ // sqrt
845
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
846
+ XSIMD_INLINE batch<T, A> sqrt(batch<T, A> const& arg, requires_arch<sve>) noexcept
847
+ {
848
+ return svsqrt_x(detail::sve_ptrue<T>(), arg);
849
+ }
850
+
851
+ // reciprocal
852
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
853
+ XSIMD_INLINE batch<T, A> reciprocal(const batch<T, A>& arg, requires_arch<sve>) noexcept
854
+ {
855
+ return svrecpe(arg);
856
+ }
857
+
858
+ /******************************
859
+ * Floating-point conversions *
860
+ ******************************/
861
+
862
+ // fast_cast
863
+ namespace detail
864
+ {
865
+ template <class A, class T, detail::enable_sized_integral_t<T, 4> = 0>
866
+ XSIMD_INLINE batch<float, A> fast_cast(batch<T, A> const& arg, batch<float, A> const&, requires_arch<sve>) noexcept
867
+ {
868
+ return svcvt_f32_x(detail::sve_ptrue<T>(), arg);
869
+ }
870
+
871
+ template <class A, class T, detail::enable_sized_integral_t<T, 8> = 0>
872
+ XSIMD_INLINE batch<double, A> fast_cast(batch<T, A> const& arg, batch<double, A> const&, requires_arch<sve>) noexcept
873
+ {
874
+ return svcvt_f64_x(detail::sve_ptrue<T>(), arg);
875
+ }
876
+
877
+ template <class A>
878
+ XSIMD_INLINE batch<int32_t, A> fast_cast(batch<float, A> const& arg, batch<int32_t, A> const&, requires_arch<sve>) noexcept
879
+ {
880
+ return svcvt_s32_x(detail::sve_ptrue<float>(), arg);
881
+ }
882
+
883
+ template <class A>
884
+ XSIMD_INLINE batch<uint32_t, A> fast_cast(batch<float, A> const& arg, batch<uint32_t, A> const&, requires_arch<sve>) noexcept
885
+ {
886
+ return svcvt_u32_x(detail::sve_ptrue<float>(), arg);
887
+ }
888
+
889
+ template <class A>
890
+ XSIMD_INLINE batch<int64_t, A> fast_cast(batch<double, A> const& arg, batch<int64_t, A> const&, requires_arch<sve>) noexcept
891
+ {
892
+ return svcvt_s64_x(detail::sve_ptrue<double>(), arg);
893
+ }
894
+
895
+ template <class A>
896
+ XSIMD_INLINE batch<uint64_t, A> fast_cast(batch<double, A> const& arg, batch<uint64_t, A> const&, requires_arch<sve>) noexcept
897
+ {
898
+ return svcvt_u64_x(detail::sve_ptrue<double>(), arg);
899
+ }
900
+ }
901
+
902
+ /*********
903
+ * Miscs *
904
+ *********/
905
+
906
+ // set
907
+ template <class A, class T, class... Args>
908
+ XSIMD_INLINE batch<T, A> set(batch<T, A> const&, requires_arch<sve>, Args... args) noexcept
909
+ {
910
+ return detail::sve_vector_type<T> { args... };
911
+ }
912
+
913
+ template <class A, class T, class... Args>
914
+ XSIMD_INLINE batch<std::complex<T>, A> set(batch<std::complex<T>, A> const&, requires_arch<sve>,
915
+ Args... args_complex) noexcept
916
+ {
917
+ return batch<std::complex<T>>(detail::sve_vector_type<T> { args_complex.real()... },
918
+ detail::sve_vector_type<T> { args_complex.imag()... });
919
+ }
920
+
921
+ template <class A, class T, class... Args>
922
+ XSIMD_INLINE batch_bool<T, A> set(batch_bool<T, A> const&, requires_arch<sve>, Args... args) noexcept
923
+ {
924
+ using U = as_unsigned_integer_t<T>;
925
+ const auto values = detail::sve_vector_type<U> { static_cast<U>(args)... };
926
+ const auto zero = broadcast<A, U>(static_cast<U>(0), sve {});
927
+ return svcmpne(detail::sve_ptrue<T>(), values, zero);
928
+ }
929
+
930
+ // insert
931
+ namespace detail
932
+ {
933
+ // generate index sequence (iota)
934
+ XSIMD_INLINE svuint8_t sve_iota_impl(index<1>) noexcept { return svindex_u8(0, 1); }
935
+ XSIMD_INLINE svuint16_t sve_iota_impl(index<2>) noexcept { return svindex_u16(0, 1); }
936
+ XSIMD_INLINE svuint32_t sve_iota_impl(index<4>) noexcept { return svindex_u32(0, 1); }
937
+ XSIMD_INLINE svuint64_t sve_iota_impl(index<8>) noexcept { return svindex_u64(0, 1); }
938
+
939
+ template <class T, class V = sve_vector_type<as_unsigned_integer_t<T>>>
940
+ XSIMD_INLINE V sve_iota() noexcept { return sve_iota_impl(index<sizeof(T)> {}); }
941
+ } // namespace detail
942
+
943
+ template <class A, class T, size_t I, detail::sve_enable_all_t<T> = 0>
944
+ XSIMD_INLINE batch<T, A> insert(batch<T, A> const& arg, T val, index<I>, requires_arch<sve>) noexcept
945
+ {
946
+ // create a predicate with only the I-th lane activated
947
+ const auto iota = detail::sve_iota<T>();
948
+ const auto index_predicate = svcmpeq(detail::sve_ptrue<T>(), iota, static_cast<as_unsigned_integer_t<T>>(I));
949
+ return svsel(index_predicate, broadcast<A, T>(val, sve {}), arg);
950
+ }
951
+
952
+ // first
953
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
954
+ XSIMD_INLINE T first(batch<T, A> const& self, requires_arch<sve>) noexcept
955
+ {
956
+ return self.data[0];
957
+ }
958
+
959
+ // all
960
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
961
+ XSIMD_INLINE bool all(batch_bool<T, A> const& arg, requires_arch<sve>) noexcept
962
+ {
963
+ return detail::sve_pcount<T>(arg) == batch_bool<T, A>::size;
964
+ }
965
+
966
+ // any
967
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
968
+ XSIMD_INLINE bool any(batch_bool<T, A> const& arg, requires_arch<sve>) noexcept
969
+ {
970
+ return svptest_any(arg, arg);
971
+ }
972
+
973
+ // bitwise_cast
974
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_unsigned_t<R, 1> = 0>
975
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
976
+ {
977
+ return svreinterpret_u8(arg);
978
+ }
979
+
980
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_signed_t<R, 1> = 0>
981
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
982
+ {
983
+ return svreinterpret_s8(arg);
984
+ }
985
+
986
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_unsigned_t<R, 2> = 0>
987
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
988
+ {
989
+ return svreinterpret_u16(arg);
990
+ }
991
+
992
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_signed_t<R, 2> = 0>
993
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
994
+ {
995
+ return svreinterpret_s16(arg);
996
+ }
997
+
998
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_unsigned_t<R, 4> = 0>
999
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
1000
+ {
1001
+ return svreinterpret_u32(arg);
1002
+ }
1003
+
1004
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_signed_t<R, 4> = 0>
1005
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
1006
+ {
1007
+ return svreinterpret_s32(arg);
1008
+ }
1009
+
1010
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_unsigned_t<R, 8> = 0>
1011
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
1012
+ {
1013
+ return svreinterpret_u64(arg);
1014
+ }
1015
+
1016
+ template <class A, class T, class R, detail::sve_enable_all_t<T> = 0, detail::enable_sized_signed_t<R, 8> = 0>
1017
+ XSIMD_INLINE batch<R, A> bitwise_cast(batch<T, A> const& arg, batch<R, A> const&, requires_arch<sve>) noexcept
1018
+ {
1019
+ return svreinterpret_s64(arg);
1020
+ }
1021
+
1022
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
1023
+ XSIMD_INLINE batch<float, A> bitwise_cast(batch<T, A> const& arg, batch<float, A> const&, requires_arch<sve>) noexcept
1024
+ {
1025
+ return svreinterpret_f32(arg);
1026
+ }
1027
+
1028
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
1029
+ XSIMD_INLINE batch<double, A> bitwise_cast(batch<T, A> const& arg, batch<double, A> const&, requires_arch<sve>) noexcept
1030
+ {
1031
+ return svreinterpret_f64(arg);
1032
+ }
1033
+
1034
+ // batch_bool_cast
1035
+ template <class A, class T_out, class T_in, detail::sve_enable_all_t<T_in> = 0>
1036
+ XSIMD_INLINE batch_bool<T_out, A> batch_bool_cast(batch_bool<T_in, A> const& arg, batch_bool<T_out, A> const&, requires_arch<sve>) noexcept
1037
+ {
1038
+ return arg.data;
1039
+ }
1040
+
1041
+ // from_bool
1042
+ template <class A, class T, detail::sve_enable_all_t<T> = 0>
1043
+ XSIMD_INLINE batch<T, A> from_bool(batch_bool<T, A> const& arg, requires_arch<sve>) noexcept
1044
+ {
1045
+ return select(arg, batch<T, A>(1), batch<T, A>(0));
1046
+ }
1047
+
1048
+ // slide_left
1049
+ namespace detail
1050
+ {
1051
+ template <size_t N>
1052
+ struct sve_slider_left
1053
+ {
1054
+ template <class A, class T>
1055
+ XSIMD_INLINE batch<T, A> operator()(batch<T, A> const& arg) noexcept
1056
+ {
1057
+ using u8_vector = batch<uint8_t, A>;
1058
+ const auto left = svdup_n_u8(0);
1059
+ const auto right = bitwise_cast(arg, u8_vector {}, sve {}).data;
1060
+ const u8_vector result(svext(left, right, u8_vector::size - N));
1061
+ return bitwise_cast(result, batch<T, A> {}, sve {});
1062
+ }
1063
+ };
1064
+
1065
+ template <>
1066
+ struct sve_slider_left<0>
1067
+ {
1068
+ template <class A, class T>
1069
+ XSIMD_INLINE batch<T, A> operator()(batch<T, A> const& arg) noexcept
1070
+ {
1071
+ return arg;
1072
+ }
1073
+ };
1074
+ } // namespace detail
1075
+
1076
+ template <size_t N, class A, class T, detail::sve_enable_all_t<T> = 0>
1077
+ XSIMD_INLINE batch<T, A> slide_left(batch<T, A> const& arg, requires_arch<sve>) noexcept
1078
+ {
1079
+ return detail::sve_slider_left<N>()(arg);
1080
+ }
1081
+
1082
+ // slide_right
1083
+ namespace detail
1084
+ {
1085
+ template <size_t N>
1086
+ struct sve_slider_right
1087
+ {
1088
+ template <class A, class T>
1089
+ XSIMD_INLINE batch<T, A> operator()(batch<T, A> const& arg) noexcept
1090
+ {
1091
+ using u8_vector = batch<uint8_t, A>;
1092
+ const auto left = bitwise_cast(arg, u8_vector {}, sve {}).data;
1093
+ const auto right = svdup_n_u8(0);
1094
+ const u8_vector result(svext(left, right, N));
1095
+ return bitwise_cast(result, batch<T, A> {}, sve {});
1096
+ }
1097
+ };
1098
+
1099
+ template <>
1100
+ struct sve_slider_right<batch<uint8_t, sve>::size>
1101
+ {
1102
+ template <class A, class T>
1103
+ XSIMD_INLINE batch<T, A> operator()(batch<T, A> const&) noexcept
1104
+ {
1105
+ return batch<T, A> {};
1106
+ }
1107
+ };
1108
+ } // namespace detail
1109
+
1110
+ template <size_t N, class A, class T, detail::sve_enable_all_t<T> = 0>
1111
+ XSIMD_INLINE batch<T, A> slide_right(batch<T, A> const& arg, requires_arch<sve>) noexcept
1112
+ {
1113
+ return detail::sve_slider_right<N>()(arg);
1114
+ }
1115
+
1116
+ // isnan
1117
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
1118
+ XSIMD_INLINE batch_bool<T, A> isnan(batch<T, A> const& arg, requires_arch<sve>) noexcept
1119
+ {
1120
+ return !(arg == arg);
1121
+ }
1122
+
1123
+ // nearbyint
1124
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
1125
+ XSIMD_INLINE batch<T, A> nearbyint(batch<T, A> const& arg, requires_arch<sve>) noexcept
1126
+ {
1127
+ return svrintx_x(detail::sve_ptrue<T>(), arg);
1128
+ }
1129
+
1130
+ // nearbyint_as_int
1131
+ template <class A>
1132
+ XSIMD_INLINE batch<int32_t, A> nearbyint_as_int(batch<float, A> const& arg, requires_arch<sve>) noexcept
1133
+ {
1134
+ const auto nearest = svrintx_x(detail::sve_ptrue<float>(), arg);
1135
+ return svcvt_s32_x(detail::sve_ptrue<float>(), nearest);
1136
+ }
1137
+
1138
+ template <class A>
1139
+ XSIMD_INLINE batch<int64_t, A> nearbyint_as_int(batch<double, A> const& arg, requires_arch<sve>) noexcept
1140
+ {
1141
+ const auto nearest = svrintx_x(detail::sve_ptrue<double>(), arg);
1142
+ return svcvt_s64_x(detail::sve_ptrue<double>(), nearest);
1143
+ }
1144
+
1145
+ // ldexp
1146
+ template <class A, class T, detail::sve_enable_floating_point_t<T> = 0>
1147
+ XSIMD_INLINE batch<T, A> ldexp(const batch<T, A>& x, const batch<as_integer_t<T>, A>& exp, requires_arch<sve>) noexcept
1148
+ {
1149
+ return svscale_x(detail::sve_ptrue<T>(), x, exp);
1150
+ }
1151
+
1152
+ } // namespace kernel
1153
+ } // namespace xsimd
1154
+
1155
+ #endif