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