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,92 @@
|
|
|
1
|
+
/***************************************************************************
|
|
2
|
+
* Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
|
|
3
|
+
* Martin Renou *
|
|
4
|
+
* Copyright (c) QuantStack *
|
|
5
|
+
* Copyright (c) Serge Guelton *
|
|
6
|
+
* *
|
|
7
|
+
* Distributed under the terms of the BSD 3-Clause License. *
|
|
8
|
+
* *
|
|
9
|
+
* The full license is in the file LICENSE, distributed with this software. *
|
|
10
|
+
****************************************************************************/
|
|
11
|
+
|
|
12
|
+
#include "xsimd/xsimd.hpp"
|
|
13
|
+
#ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
|
|
14
|
+
|
|
15
|
+
#include "test_utils.hpp"
|
|
16
|
+
|
|
17
|
+
namespace xsimd
|
|
18
|
+
{
|
|
19
|
+
template <typename T, std::size_t N>
|
|
20
|
+
struct init_extract_pair_base
|
|
21
|
+
{
|
|
22
|
+
using extract_vector_type = std::array<T, N>;
|
|
23
|
+
extract_vector_type lhs_in, rhs_in, exped;
|
|
24
|
+
|
|
25
|
+
std::vector<extract_vector_type> create_extract_vectors(const int index)
|
|
26
|
+
{
|
|
27
|
+
std::vector<extract_vector_type> vects;
|
|
28
|
+
vects.reserve(3);
|
|
29
|
+
|
|
30
|
+
int num = static_cast<int>(N);
|
|
31
|
+
/* Generate input data: lhs, rhs */
|
|
32
|
+
for (int i = 0; i < num; ++i)
|
|
33
|
+
{
|
|
34
|
+
lhs_in[i] = 2 * i + 1;
|
|
35
|
+
rhs_in[i] = 2 * i + 2;
|
|
36
|
+
}
|
|
37
|
+
vects.push_back(std::move(lhs_in));
|
|
38
|
+
vects.push_back(std::move(rhs_in));
|
|
39
|
+
|
|
40
|
+
/* Expected shuffle data */
|
|
41
|
+
for (int i = 0; i < (num - index); ++i)
|
|
42
|
+
{
|
|
43
|
+
exped[i] = rhs_in[i + index];
|
|
44
|
+
if (i < index)
|
|
45
|
+
{
|
|
46
|
+
exped[num - 1 - i] = lhs_in[index - 1 - i];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
vects.push_back(std::move(exped));
|
|
50
|
+
|
|
51
|
+
return vects;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
template <class B>
|
|
57
|
+
struct extract_pair_test
|
|
58
|
+
{
|
|
59
|
+
using batch_type = B;
|
|
60
|
+
using value_type = typename B::value_type;
|
|
61
|
+
static constexpr size_t size = B::size;
|
|
62
|
+
|
|
63
|
+
void extract_pair_128()
|
|
64
|
+
{
|
|
65
|
+
xsimd::init_extract_pair_base<value_type, size> extract_pair_base;
|
|
66
|
+
auto extract_pair_vecs = extract_pair_base.create_extract_vectors(1);
|
|
67
|
+
auto v_lhs = extract_pair_vecs[0];
|
|
68
|
+
auto v_rhs = extract_pair_vecs[1];
|
|
69
|
+
auto v_exped = extract_pair_vecs[2];
|
|
70
|
+
|
|
71
|
+
B b_lhs = B::load_unaligned(v_lhs.data());
|
|
72
|
+
B b_rhs = B::load_unaligned(v_rhs.data());
|
|
73
|
+
B b_exped = B::load_unaligned(v_exped.data());
|
|
74
|
+
|
|
75
|
+
/* Only Test 128bit */
|
|
76
|
+
if ((sizeof(value_type) * size) == 16)
|
|
77
|
+
{
|
|
78
|
+
B b_res = xsimd::extract_pair(b_lhs, b_rhs, 1);
|
|
79
|
+
CHECK_BATCH_EQ(b_res, b_exped);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
TEST_CASE_TEMPLATE("[extract pair]", B, BATCH_TYPES)
|
|
85
|
+
{
|
|
86
|
+
extract_pair_test<B> Test;
|
|
87
|
+
SUBCASE("extract_pair_128")
|
|
88
|
+
{
|
|
89
|
+
Test.extract_pair_128();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
#endif
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/***************************************************************************
|
|
2
|
+
* Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
|
|
3
|
+
* Martin Renou *
|
|
4
|
+
* Copyright (c) QuantStack *
|
|
5
|
+
* Copyright (c) Serge Guelton *
|
|
6
|
+
* *
|
|
7
|
+
* Distributed under the terms of the BSD 3-Clause License. *
|
|
8
|
+
* *
|
|
9
|
+
* The full license is in the file LICENSE, distributed with this software. *
|
|
10
|
+
****************************************************************************/
|
|
11
|
+
|
|
12
|
+
#include "xsimd/xsimd.hpp"
|
|
13
|
+
#ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
|
|
14
|
+
|
|
15
|
+
#include "test_utils.hpp"
|
|
16
|
+
|
|
17
|
+
template <class B>
|
|
18
|
+
struct fp_manipulation_test
|
|
19
|
+
{
|
|
20
|
+
using batch_type = B;
|
|
21
|
+
using arch_type = typename B::arch_type;
|
|
22
|
+
using value_type = typename B::value_type;
|
|
23
|
+
static constexpr size_t size = B::size;
|
|
24
|
+
using array_type = std::array<value_type, size>;
|
|
25
|
+
using int_value_type = xsimd::as_integer_t<value_type>;
|
|
26
|
+
using int_batch_type = xsimd::batch<int_value_type, arch_type>;
|
|
27
|
+
|
|
28
|
+
array_type input;
|
|
29
|
+
int_value_type exponent;
|
|
30
|
+
|
|
31
|
+
fp_manipulation_test()
|
|
32
|
+
{
|
|
33
|
+
exponent = 5;
|
|
34
|
+
for (size_t i = 0; i < size; ++i)
|
|
35
|
+
{
|
|
36
|
+
input[i] = value_type(i) / 4 + value_type(1.2) * std::sqrt(value_type(i + 0.25));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
void test_fp_manipulations() const
|
|
41
|
+
{
|
|
42
|
+
int_batch_type bexp(exponent);
|
|
43
|
+
// ldexp
|
|
44
|
+
{
|
|
45
|
+
array_type expected;
|
|
46
|
+
std::transform(input.cbegin(), input.cend(), expected.begin(),
|
|
47
|
+
[this](const value_type& v)
|
|
48
|
+
{ return std::ldexp(v, static_cast<int>(exponent)); });
|
|
49
|
+
batch_type res = xsimd::ldexp(batch_input(), bexp);
|
|
50
|
+
INFO("ldexp");
|
|
51
|
+
CHECK_BATCH_EQ(res, expected);
|
|
52
|
+
}
|
|
53
|
+
// frexp
|
|
54
|
+
{
|
|
55
|
+
array_type expected;
|
|
56
|
+
std::transform(input.cbegin(), input.cend(), expected.begin(),
|
|
57
|
+
[](const value_type& v)
|
|
58
|
+
{ int tmp; return std::frexp(v, &tmp); });
|
|
59
|
+
batch_type res = xsimd::frexp(batch_input(), bexp);
|
|
60
|
+
INFO("frexp");
|
|
61
|
+
CHECK_BATCH_EQ(res, expected);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private:
|
|
66
|
+
batch_type batch_input() const
|
|
67
|
+
{
|
|
68
|
+
return batch_type::load_unaligned(input.data());
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
TEST_CASE_TEMPLATE("[fp manipulation]", B, BATCH_FLOAT_TYPES)
|
|
73
|
+
{
|
|
74
|
+
fp_manipulation_test<B> Test;
|
|
75
|
+
Test.test_fp_manipulations();
|
|
76
|
+
}
|
|
77
|
+
#endif
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
/*
|
|
13
|
+
* Make sure the inclusion works correctly without _GNU_SOURCE
|
|
14
|
+
*/
|
|
15
|
+
#ifndef _GNU_SOURCE
|
|
16
|
+
#define _GNU_SOURCE
|
|
17
|
+
#endif
|
|
18
|
+
#include "xsimd/xsimd.hpp"
|
|
19
|
+
|
|
20
|
+
#include "doctest/doctest.h"
|
|
21
|
+
|
|
22
|
+
TEST_CASE("[GNU_SOURCE support]")
|
|
23
|
+
{
|
|
24
|
+
|
|
25
|
+
SUBCASE("exp10")
|
|
26
|
+
{
|
|
27
|
+
CHECK_EQ(xsimd::exp10(0.), 1.);
|
|
28
|
+
CHECK_EQ(xsimd::exp10(0.f), 1.f);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/***************************************************************************
|
|
2
|
+
* Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
|
|
3
|
+
* Martin Renou *
|
|
4
|
+
* Copyright (c) QuantStack *
|
|
5
|
+
* Copyright (c) Serge Guelton *
|
|
6
|
+
* *
|
|
7
|
+
* Distributed under the terms of the BSD 3-Clause License. *
|
|
8
|
+
* *
|
|
9
|
+
* The full license is in the file LICENSE, distributed with this software. *
|
|
10
|
+
****************************************************************************/
|
|
11
|
+
|
|
12
|
+
#include "xsimd/xsimd.hpp"
|
|
13
|
+
#ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
|
|
14
|
+
|
|
15
|
+
#include "test_utils.hpp"
|
|
16
|
+
|
|
17
|
+
template <class B>
|
|
18
|
+
struct hyperbolic_test
|
|
19
|
+
{
|
|
20
|
+
using batch_type = B;
|
|
21
|
+
using value_type = typename B::value_type;
|
|
22
|
+
static constexpr size_t size = B::size;
|
|
23
|
+
using vector_type = std::vector<value_type>;
|
|
24
|
+
|
|
25
|
+
size_t nb_input;
|
|
26
|
+
vector_type input;
|
|
27
|
+
vector_type acosh_input;
|
|
28
|
+
vector_type atanh_input;
|
|
29
|
+
vector_type expected;
|
|
30
|
+
vector_type res;
|
|
31
|
+
|
|
32
|
+
hyperbolic_test()
|
|
33
|
+
{
|
|
34
|
+
nb_input = size * 10000;
|
|
35
|
+
input.resize(nb_input);
|
|
36
|
+
acosh_input.resize(nb_input);
|
|
37
|
+
atanh_input.resize(nb_input);
|
|
38
|
+
for (size_t i = 0; i < nb_input; ++i)
|
|
39
|
+
{
|
|
40
|
+
input[i] = value_type(-1.5) + i * value_type(3) / nb_input;
|
|
41
|
+
acosh_input[i] = value_type(1.) + i * value_type(3) / nb_input;
|
|
42
|
+
atanh_input[i] = value_type(-0.95) + i * value_type(1.9) / nb_input;
|
|
43
|
+
}
|
|
44
|
+
expected.resize(nb_input);
|
|
45
|
+
res.resize(nb_input);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void test_hyperbolic_functions()
|
|
49
|
+
{
|
|
50
|
+
// sinh
|
|
51
|
+
{
|
|
52
|
+
std::transform(input.cbegin(), input.cend(), expected.begin(),
|
|
53
|
+
[](const value_type& v)
|
|
54
|
+
{ return std::sinh(v); });
|
|
55
|
+
batch_type in, out;
|
|
56
|
+
for (size_t i = 0; i < nb_input; i += size)
|
|
57
|
+
{
|
|
58
|
+
detail::load_batch(in, input, i);
|
|
59
|
+
out = sinh(in);
|
|
60
|
+
detail::store_batch(out, res, i);
|
|
61
|
+
}
|
|
62
|
+
size_t diff = detail::get_nb_diff(res, expected);
|
|
63
|
+
INFO("sinh");
|
|
64
|
+
CHECK_EQ(diff, 0);
|
|
65
|
+
}
|
|
66
|
+
// cosh
|
|
67
|
+
{
|
|
68
|
+
std::transform(input.cbegin(), input.cend(), expected.begin(),
|
|
69
|
+
[](const value_type& v)
|
|
70
|
+
{ return std::cosh(v); });
|
|
71
|
+
batch_type in, out;
|
|
72
|
+
for (size_t i = 0; i < nb_input; i += size)
|
|
73
|
+
{
|
|
74
|
+
detail::load_batch(in, input, i);
|
|
75
|
+
out = cosh(in);
|
|
76
|
+
detail::store_batch(out, res, i);
|
|
77
|
+
}
|
|
78
|
+
size_t diff = detail::get_nb_diff(res, expected);
|
|
79
|
+
INFO("cosh");
|
|
80
|
+
CHECK_EQ(diff, 0);
|
|
81
|
+
}
|
|
82
|
+
// tanh
|
|
83
|
+
{
|
|
84
|
+
std::transform(input.cbegin(), input.cend(), expected.begin(),
|
|
85
|
+
[](const value_type& v)
|
|
86
|
+
{ return std::tanh(v); });
|
|
87
|
+
batch_type in, out;
|
|
88
|
+
for (size_t i = 0; i < nb_input; i += size)
|
|
89
|
+
{
|
|
90
|
+
detail::load_batch(in, input, i);
|
|
91
|
+
out = tanh(in);
|
|
92
|
+
detail::store_batch(out, res, i);
|
|
93
|
+
}
|
|
94
|
+
size_t diff = detail::get_nb_diff(res, expected);
|
|
95
|
+
INFO("tanh");
|
|
96
|
+
CHECK_EQ(diff, 0);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void test_reciprocal_functions()
|
|
101
|
+
{
|
|
102
|
+
// asinh
|
|
103
|
+
{
|
|
104
|
+
std::transform(input.cbegin(), input.cend(), expected.begin(),
|
|
105
|
+
[](const value_type& v)
|
|
106
|
+
{ return std::asinh(v); });
|
|
107
|
+
batch_type in, out;
|
|
108
|
+
for (size_t i = 0; i < nb_input; i += size)
|
|
109
|
+
{
|
|
110
|
+
detail::load_batch(in, input, i);
|
|
111
|
+
out = asinh(in);
|
|
112
|
+
detail::store_batch(out, res, i);
|
|
113
|
+
}
|
|
114
|
+
size_t diff = detail::get_nb_diff(res, expected);
|
|
115
|
+
INFO("asinh");
|
|
116
|
+
CHECK_EQ(diff, 0);
|
|
117
|
+
}
|
|
118
|
+
// acosh
|
|
119
|
+
{
|
|
120
|
+
std::transform(acosh_input.cbegin(), acosh_input.cend(), expected.begin(),
|
|
121
|
+
[](const value_type& v)
|
|
122
|
+
{ return std::acosh(v); });
|
|
123
|
+
batch_type in, out;
|
|
124
|
+
for (size_t i = 0; i < nb_input; i += size)
|
|
125
|
+
{
|
|
126
|
+
detail::load_batch(in, acosh_input, i);
|
|
127
|
+
out = acosh(in);
|
|
128
|
+
detail::store_batch(out, res, i);
|
|
129
|
+
}
|
|
130
|
+
size_t diff = detail::get_nb_diff(res, expected);
|
|
131
|
+
INFO("acosh");
|
|
132
|
+
CHECK_EQ(diff, 0);
|
|
133
|
+
}
|
|
134
|
+
// atanh
|
|
135
|
+
{
|
|
136
|
+
std::transform(atanh_input.cbegin(), atanh_input.cend(), expected.begin(),
|
|
137
|
+
[](const value_type& v)
|
|
138
|
+
{ return std::atanh(v); });
|
|
139
|
+
batch_type in, out;
|
|
140
|
+
for (size_t i = 0; i < nb_input; i += size)
|
|
141
|
+
{
|
|
142
|
+
detail::load_batch(in, atanh_input, i);
|
|
143
|
+
out = atanh(in);
|
|
144
|
+
detail::store_batch(out, res, i);
|
|
145
|
+
}
|
|
146
|
+
size_t diff = detail::get_nb_diff(res, expected);
|
|
147
|
+
INFO("atanh");
|
|
148
|
+
CHECK_EQ(diff, 0);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
TEST_CASE_TEMPLATE("[hyperbolic]", B, BATCH_FLOAT_TYPES)
|
|
154
|
+
{
|
|
155
|
+
hyperbolic_test<B> Test;
|
|
156
|
+
|
|
157
|
+
SUBCASE("hyperbolic")
|
|
158
|
+
{
|
|
159
|
+
Test.test_hyperbolic_functions();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
SUBCASE("reciprocal")
|
|
163
|
+
{
|
|
164
|
+
Test.test_reciprocal_functions();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
#endif
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/***************************************************************************
|
|
2
|
+
* Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
|
|
3
|
+
* Martin Renou *
|
|
4
|
+
* Copyright (c) QuantStack *
|
|
5
|
+
* Copyright (c) Serge Guelton *
|
|
6
|
+
* *
|
|
7
|
+
* Distributed under the terms of the BSD 3-Clause License. *
|
|
8
|
+
* *
|
|
9
|
+
* The full license is in the file LICENSE, distributed with this software. *
|
|
10
|
+
****************************************************************************/
|
|
11
|
+
|
|
12
|
+
#include "xsimd/xsimd.hpp"
|
|
13
|
+
#ifndef XSIMD_NO_SUPPORTED_ARCHITECTURE
|
|
14
|
+
|
|
15
|
+
#include <random>
|
|
16
|
+
|
|
17
|
+
#include "test_utils.hpp"
|
|
18
|
+
|
|
19
|
+
template <class B>
|
|
20
|
+
struct load_store_test
|
|
21
|
+
{
|
|
22
|
+
using batch_type = B;
|
|
23
|
+
using value_type = typename B::value_type;
|
|
24
|
+
using index_type = typename xsimd::as_integer_t<batch_type>;
|
|
25
|
+
template <class T>
|
|
26
|
+
using allocator = xsimd::default_allocator<T, typename B::arch_type>;
|
|
27
|
+
static constexpr size_t size = B::size;
|
|
28
|
+
using array_type = std::array<value_type, size>;
|
|
29
|
+
using int8_vector_type = std::vector<int8_t, allocator<int8_t>>;
|
|
30
|
+
using uint8_vector_type = std::vector<uint8_t, allocator<uint8_t>>;
|
|
31
|
+
using int16_vector_type = std::vector<int16_t, allocator<int16_t>>;
|
|
32
|
+
using uint16_vector_type = std::vector<uint16_t, allocator<uint16_t>>;
|
|
33
|
+
using int32_vector_type = std::vector<int32_t, allocator<int32_t>>;
|
|
34
|
+
using uint32_vector_type = std::vector<uint32_t, allocator<uint32_t>>;
|
|
35
|
+
using int64_vector_type = std::vector<int64_t, allocator<int64_t>>;
|
|
36
|
+
using uint64_vector_type = std::vector<uint64_t, allocator<uint64_t>>;
|
|
37
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
38
|
+
using long_vector_type = std::vector<long, allocator<long>>;
|
|
39
|
+
using ulong_vector_type = std::vector<unsigned long, allocator<unsigned long>>;
|
|
40
|
+
#endif
|
|
41
|
+
using float_vector_type = std::vector<float, allocator<float>>;
|
|
42
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
43
|
+
using double_vector_type = std::vector<double, allocator<double>>;
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
int8_vector_type i8_vec;
|
|
47
|
+
uint8_vector_type ui8_vec;
|
|
48
|
+
int16_vector_type i16_vec;
|
|
49
|
+
uint16_vector_type ui16_vec;
|
|
50
|
+
int32_vector_type i32_vec;
|
|
51
|
+
uint32_vector_type ui32_vec;
|
|
52
|
+
int64_vector_type i64_vec;
|
|
53
|
+
uint64_vector_type ui64_vec;
|
|
54
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
55
|
+
long_vector_type l_vec;
|
|
56
|
+
ulong_vector_type ul_vec;
|
|
57
|
+
#endif
|
|
58
|
+
float_vector_type f_vec;
|
|
59
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
60
|
+
double_vector_type d_vec;
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
array_type expected;
|
|
64
|
+
|
|
65
|
+
load_store_test()
|
|
66
|
+
{
|
|
67
|
+
init_test_vector(i8_vec);
|
|
68
|
+
init_test_vector(ui8_vec);
|
|
69
|
+
init_test_vector(i16_vec);
|
|
70
|
+
init_test_vector(ui16_vec);
|
|
71
|
+
init_test_vector(i32_vec);
|
|
72
|
+
init_test_vector(ui32_vec);
|
|
73
|
+
init_test_vector(i64_vec);
|
|
74
|
+
init_test_vector(ui64_vec);
|
|
75
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
76
|
+
init_test_vector(l_vec);
|
|
77
|
+
init_test_vector(ul_vec);
|
|
78
|
+
#endif
|
|
79
|
+
init_test_vector(f_vec);
|
|
80
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
81
|
+
init_test_vector(d_vec);
|
|
82
|
+
#endif
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
void test_load()
|
|
86
|
+
{
|
|
87
|
+
test_load_impl(i8_vec, "load int8_t");
|
|
88
|
+
test_load_impl(ui8_vec, "load uint8_t");
|
|
89
|
+
test_load_impl(i16_vec, "load int16_t");
|
|
90
|
+
test_load_impl(ui16_vec, "load uint16_t");
|
|
91
|
+
test_load_impl(i32_vec, "load int32_t");
|
|
92
|
+
test_load_impl(ui32_vec, "load uint32_t");
|
|
93
|
+
test_load_impl(i64_vec, "load int64_t");
|
|
94
|
+
test_load_impl(ui64_vec, "load uint64_t");
|
|
95
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
96
|
+
test_load_impl(l_vec, "load long");
|
|
97
|
+
test_load_impl(ul_vec, "load unsigned long");
|
|
98
|
+
#endif
|
|
99
|
+
test_load_impl(f_vec, "load float");
|
|
100
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
101
|
+
test_load_impl(d_vec, "load double");
|
|
102
|
+
#endif
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
void test_store()
|
|
106
|
+
{
|
|
107
|
+
test_store_impl(i8_vec, "load int8_t");
|
|
108
|
+
test_store_impl(ui8_vec, "load uint8_t");
|
|
109
|
+
test_store_impl(i16_vec, "load int16_t");
|
|
110
|
+
test_store_impl(ui16_vec, "load uint16_t");
|
|
111
|
+
test_store_impl(i32_vec, "load int32_t");
|
|
112
|
+
test_store_impl(ui32_vec, "load uint32_t");
|
|
113
|
+
test_store_impl(i64_vec, "load int64_t");
|
|
114
|
+
test_store_impl(ui64_vec, "load uint64_t");
|
|
115
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
116
|
+
test_store_impl(l_vec, "load long");
|
|
117
|
+
test_store_impl(ul_vec, "load unsigned long");
|
|
118
|
+
#endif
|
|
119
|
+
test_store_impl(f_vec, "load float");
|
|
120
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
121
|
+
test_store_impl(d_vec, "load double");
|
|
122
|
+
#endif
|
|
123
|
+
}
|
|
124
|
+
void test_gather()
|
|
125
|
+
{
|
|
126
|
+
test_gather_impl(i8_vec, "gather int8_t");
|
|
127
|
+
test_gather_impl(ui8_vec, "gather uint8_t");
|
|
128
|
+
test_gather_impl(i16_vec, "gather int16_t");
|
|
129
|
+
test_gather_impl(ui16_vec, "gather uint16_t");
|
|
130
|
+
test_gather_impl(i32_vec, "gather int32_t");
|
|
131
|
+
test_gather_impl(ui32_vec, "gather uint32_t");
|
|
132
|
+
test_gather_impl(i64_vec, "gather int64_t");
|
|
133
|
+
test_gather_impl(ui64_vec, "gather uint64_t");
|
|
134
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
135
|
+
test_gather_impl(l_vec, "gather long");
|
|
136
|
+
test_gather_impl(ul_vec, "gather unsigned long");
|
|
137
|
+
#endif
|
|
138
|
+
test_gather_impl(f_vec, "gather float");
|
|
139
|
+
test_gather_impl(f_vec, "gather float");
|
|
140
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
141
|
+
test_gather_impl(d_vec, "gather double");
|
|
142
|
+
#endif
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
void test_scatter()
|
|
146
|
+
{
|
|
147
|
+
test_scatter_impl(i8_vec, "scatter int8_t");
|
|
148
|
+
test_scatter_impl(ui8_vec, "scatter uint8_t");
|
|
149
|
+
test_scatter_impl(i16_vec, "scatter int16_t");
|
|
150
|
+
test_scatter_impl(ui16_vec, "scatter uint16_t");
|
|
151
|
+
test_scatter_impl(i32_vec, "scatter int32_t");
|
|
152
|
+
test_scatter_impl(ui32_vec, "scatter uint32_t");
|
|
153
|
+
test_scatter_impl(i64_vec, "scatter int64_t");
|
|
154
|
+
test_scatter_impl(ui64_vec, "scatter uint64_t");
|
|
155
|
+
#ifdef XSIMD_32_BIT_ABI
|
|
156
|
+
test_scatter_impl(l_vec, "scatter long");
|
|
157
|
+
test_scatter_impl(ul_vec, "scatter unsigned long");
|
|
158
|
+
#endif
|
|
159
|
+
test_scatter_impl(f_vec, "scatter float");
|
|
160
|
+
#if !XSIMD_WITH_NEON || XSIMD_WITH_NEON64
|
|
161
|
+
test_scatter_impl(d_vec, "scatter double");
|
|
162
|
+
#endif
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private:
|
|
166
|
+
#ifdef XSIMD_WITH_SSE2
|
|
167
|
+
struct test_load_as_return_type
|
|
168
|
+
{
|
|
169
|
+
using lower_arch = xsimd::sse2;
|
|
170
|
+
using expected_batch_type = xsimd::batch<float, lower_arch>;
|
|
171
|
+
using load_as_return_type = decltype(xsimd::load_as<float, lower_arch>(std::declval<float*>(), xsimd::aligned_mode()));
|
|
172
|
+
static_assert(std::is_same<load_as_return_type, expected_batch_type>::value, "honoring arch parameter");
|
|
173
|
+
};
|
|
174
|
+
#endif
|
|
175
|
+
|
|
176
|
+
template <class V>
|
|
177
|
+
void test_load_impl(const V& v, const std::string& name)
|
|
178
|
+
{
|
|
179
|
+
std::copy(v.cbegin(), v.cend(), expected.begin());
|
|
180
|
+
|
|
181
|
+
batch_type b = batch_type::load_unaligned(v.data());
|
|
182
|
+
INFO(name, " unaligned");
|
|
183
|
+
CHECK_BATCH_EQ(b, expected);
|
|
184
|
+
|
|
185
|
+
b = batch_type::load_aligned(v.data());
|
|
186
|
+
INFO(name, " aligned");
|
|
187
|
+
CHECK_BATCH_EQ(b, expected);
|
|
188
|
+
|
|
189
|
+
b = xsimd::load_as<value_type>(v.data(), xsimd::unaligned_mode());
|
|
190
|
+
INFO(name, " unaligned (load_as)");
|
|
191
|
+
CHECK_BATCH_EQ(b, expected);
|
|
192
|
+
|
|
193
|
+
b = xsimd::load_as<value_type>(v.data(), xsimd::aligned_mode());
|
|
194
|
+
INFO(name, " aligned (load_as)");
|
|
195
|
+
CHECK_BATCH_EQ(b, expected);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
struct test_load_char
|
|
199
|
+
{
|
|
200
|
+
/* Make sure xsimd doesn't try to be smart with char types */
|
|
201
|
+
static_assert(std::is_same<xsimd::batch<char>, decltype(xsimd::load_as<char>(std::declval<char*>(), xsimd::aligned_mode()))>::value,
|
|
202
|
+
"honor explicit type request");
|
|
203
|
+
static_assert(std::is_same<xsimd::batch<unsigned char>, decltype(xsimd::load_as<unsigned char>(std::declval<unsigned char*>(), xsimd::aligned_mode()))>::value,
|
|
204
|
+
"honor explicit type request");
|
|
205
|
+
static_assert(std::is_same<xsimd::batch<signed char>, decltype(xsimd::load_as<signed char>(std::declval<signed char*>(), xsimd::aligned_mode()))>::value,
|
|
206
|
+
"honor explicit type request");
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
template <class V>
|
|
210
|
+
void test_store_impl(const V& v, const std::string& name)
|
|
211
|
+
{
|
|
212
|
+
batch_type b = batch_type::load_aligned(v.data());
|
|
213
|
+
V res(size);
|
|
214
|
+
|
|
215
|
+
b.store_unaligned(res.data());
|
|
216
|
+
INFO(name, " unaligned");
|
|
217
|
+
CHECK_VECTOR_EQ(res, v);
|
|
218
|
+
|
|
219
|
+
b.store_aligned(res.data());
|
|
220
|
+
INFO(name, " aligned");
|
|
221
|
+
CHECK_VECTOR_EQ(res, v);
|
|
222
|
+
|
|
223
|
+
xsimd::store_as(res.data(), b, xsimd::unaligned_mode());
|
|
224
|
+
INFO(name, " unaligned (store_as)");
|
|
225
|
+
CHECK_VECTOR_EQ(res, v);
|
|
226
|
+
|
|
227
|
+
xsimd::store_as(res.data(), b, xsimd::aligned_mode());
|
|
228
|
+
INFO(name, " aligned (store_as)");
|
|
229
|
+
CHECK_VECTOR_EQ(res, v);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
template <class V>
|
|
233
|
+
void test_gather_impl(const V& v, const std::string& name)
|
|
234
|
+
{
|
|
235
|
+
std::copy(v.cbegin(), v.cend(), expected.begin());
|
|
236
|
+
index_type index = xsimd::detail::make_sequence_as_batch<index_type>();
|
|
237
|
+
batch_type b = batch_type::gather(v.data(), index);
|
|
238
|
+
INFO(name, " (in order)");
|
|
239
|
+
CHECK_BATCH_EQ(b, expected);
|
|
240
|
+
|
|
241
|
+
std::reverse_copy(v.cbegin(), v.cend(), expected.begin());
|
|
242
|
+
std::array<typename index_type::value_type, index_type::size> index_reverse;
|
|
243
|
+
index.store_unaligned(index_reverse.data());
|
|
244
|
+
std::reverse(index_reverse.begin(), index_reverse.end());
|
|
245
|
+
index = index_type::load_unaligned(index_reverse.data());
|
|
246
|
+
b = batch_type::gather(v.data(), index);
|
|
247
|
+
INFO(name, " (in reverse order)");
|
|
248
|
+
CHECK_BATCH_EQ(b, expected);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
template <class V>
|
|
252
|
+
void test_scatter_impl(const V& v, const std::string& name)
|
|
253
|
+
{
|
|
254
|
+
batch_type b = batch_type::load_aligned(v.data());
|
|
255
|
+
index_type index = xsimd::detail::make_sequence_as_batch<index_type>();
|
|
256
|
+
V res(size);
|
|
257
|
+
|
|
258
|
+
b.scatter(res.data(), index);
|
|
259
|
+
INFO(name, " (in order)");
|
|
260
|
+
CHECK_VECTOR_EQ(res, v);
|
|
261
|
+
|
|
262
|
+
V reverse_v(size);
|
|
263
|
+
std::reverse_copy(v.cbegin(), v.cend(), reverse_v.begin());
|
|
264
|
+
std::array<typename index_type::value_type, index_type::size> reverse_index;
|
|
265
|
+
index.store_unaligned(reverse_index.data());
|
|
266
|
+
std::reverse(reverse_index.begin(), reverse_index.end());
|
|
267
|
+
index = index_type::load_unaligned(reverse_index.data());
|
|
268
|
+
b.scatter(res.data(), index);
|
|
269
|
+
INFO(name, " (in reverse order)");
|
|
270
|
+
CHECK_VECTOR_EQ(res, reverse_v);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
template <class V>
|
|
274
|
+
void init_test_vector(V& vec)
|
|
275
|
+
{
|
|
276
|
+
vec.resize(size);
|
|
277
|
+
|
|
278
|
+
int min = 0;
|
|
279
|
+
int max = 100;
|
|
280
|
+
|
|
281
|
+
std::default_random_engine generator;
|
|
282
|
+
std::uniform_int_distribution<int> distribution(min, max);
|
|
283
|
+
|
|
284
|
+
auto gen = [&distribution, &generator]()
|
|
285
|
+
{
|
|
286
|
+
return static_cast<value_type>(distribution(generator));
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
std::generate(vec.begin(), vec.end(), gen);
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
TEST_CASE_TEMPLATE("[load store]", B, BATCH_TYPES)
|
|
294
|
+
{
|
|
295
|
+
load_store_test<B> Test;
|
|
296
|
+
SUBCASE("load") { Test.test_load(); }
|
|
297
|
+
|
|
298
|
+
SUBCASE("store") { Test.test_store(); }
|
|
299
|
+
|
|
300
|
+
SUBCASE("gather") { Test.test_gather(); }
|
|
301
|
+
|
|
302
|
+
SUBCASE("scatter") { Test.test_scatter(); }
|
|
303
|
+
}
|
|
304
|
+
#endif
|