sequenzo 0.1.31__cp310-cp310-macosx_10_9_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- _sequenzo_fastcluster.cpython-310-darwin.so +0 -0
- sequenzo/__init__.py +349 -0
- sequenzo/big_data/__init__.py +12 -0
- sequenzo/big_data/clara/__init__.py +26 -0
- sequenzo/big_data/clara/clara.py +476 -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-310-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-310-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 +22 -0
- sequenzo/data_preprocessing/helpers.py +303 -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/dyadic_children.csv +61 -0
- sequenzo/datasets/dyadic_parents.csv +61 -0
- sequenzo/datasets/mvad.csv +713 -0
- sequenzo/datasets/pairfam_activity_by_month.csv +1028 -0
- sequenzo/datasets/pairfam_activity_by_year.csv +1028 -0
- sequenzo/datasets/pairfam_family_by_month.csv +1028 -0
- sequenzo/datasets/pairfam_family_by_year.csv +1028 -0
- sequenzo/datasets/political_science_aid_shock.csv +166 -0
- sequenzo/datasets/political_science_donor_fragmentation.csv +157 -0
- sequenzo/define_sequence_data.py +1400 -0
- sequenzo/dissimilarity_measures/__init__.py +31 -0
- sequenzo/dissimilarity_measures/c_code.cpython-310-darwin.so +0 -0
- sequenzo/dissimilarity_measures/get_distance_matrix.py +762 -0
- sequenzo/dissimilarity_measures/get_substitution_cost_matrix.py +246 -0
- sequenzo/dissimilarity_measures/src/DHDdistance.cpp +148 -0
- sequenzo/dissimilarity_measures/src/LCPdistance.cpp +114 -0
- sequenzo/dissimilarity_measures/src/LCPspellDistance.cpp +215 -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 +40 -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-310-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqconc.cpython-310-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqdss.cpython-310-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqdur.cpython-310-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqlength.cpython-310-darwin.so +0 -0
- sequenzo/multidomain/__init__.py +23 -0
- sequenzo/multidomain/association_between_domains.py +311 -0
- sequenzo/multidomain/cat.py +597 -0
- sequenzo/multidomain/combt.py +519 -0
- sequenzo/multidomain/dat.py +81 -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 +62 -0
- sequenzo/prefix_tree/hub.py +114 -0
- sequenzo/prefix_tree/individual_level_indicators.py +1321 -0
- sequenzo/prefix_tree/spell_individual_level_indicators.py +580 -0
- sequenzo/prefix_tree/spell_level_indicators.py +297 -0
- sequenzo/prefix_tree/system_level_indicators.py +544 -0
- sequenzo/prefix_tree/utils.py +54 -0
- sequenzo/seqhmm/__init__.py +95 -0
- sequenzo/seqhmm/advanced_optimization.py +305 -0
- sequenzo/seqhmm/bootstrap.py +411 -0
- sequenzo/seqhmm/build_hmm.py +142 -0
- sequenzo/seqhmm/build_mhmm.py +136 -0
- sequenzo/seqhmm/build_nhmm.py +121 -0
- sequenzo/seqhmm/fit_mhmm.py +62 -0
- sequenzo/seqhmm/fit_model.py +61 -0
- sequenzo/seqhmm/fit_nhmm.py +76 -0
- sequenzo/seqhmm/formulas.py +289 -0
- sequenzo/seqhmm/forward_backward_nhmm.py +276 -0
- sequenzo/seqhmm/gradients_nhmm.py +306 -0
- sequenzo/seqhmm/hmm.py +291 -0
- sequenzo/seqhmm/mhmm.py +314 -0
- sequenzo/seqhmm/model_comparison.py +238 -0
- sequenzo/seqhmm/multichannel_em.py +282 -0
- sequenzo/seqhmm/multichannel_utils.py +138 -0
- sequenzo/seqhmm/nhmm.py +270 -0
- sequenzo/seqhmm/nhmm_utils.py +191 -0
- sequenzo/seqhmm/predict.py +137 -0
- sequenzo/seqhmm/predict_mhmm.py +142 -0
- sequenzo/seqhmm/simulate.py +878 -0
- sequenzo/seqhmm/utils.py +218 -0
- sequenzo/seqhmm/visualization.py +910 -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 +66 -0
- sequenzo/suffix_tree/hub.py +114 -0
- sequenzo/suffix_tree/individual_level_indicators.py +1679 -0
- sequenzo/suffix_tree/spell_individual_level_indicators.py +493 -0
- sequenzo/suffix_tree/spell_level_indicators.py +248 -0
- sequenzo/suffix_tree/system_level_indicators.py +535 -0
- sequenzo/suffix_tree/utils.py +56 -0
- sequenzo/version_check.py +283 -0
- sequenzo/visualization/__init__.py +29 -0
- sequenzo/visualization/plot_mean_time.py +222 -0
- sequenzo/visualization/plot_modal_state.py +276 -0
- sequenzo/visualization/plot_most_frequent_sequences.py +147 -0
- sequenzo/visualization/plot_relative_frequency.py +405 -0
- sequenzo/visualization/plot_sequence_index.py +1175 -0
- sequenzo/visualization/plot_single_medoid.py +153 -0
- sequenzo/visualization/plot_state_distribution.py +651 -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.31.dist-info/METADATA +286 -0
- sequenzo-0.1.31.dist-info/RECORD +299 -0
- sequenzo-0.1.31.dist-info/WHEEL +5 -0
- sequenzo-0.1.31.dist-info/licenses/LICENSE +28 -0
- sequenzo-0.1.31.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,611 @@
|
|
|
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
|
+
|
|
14
|
+
#include <array>
|
|
15
|
+
#include <climits>
|
|
16
|
+
#include <cmath>
|
|
17
|
+
#include <complex>
|
|
18
|
+
#include <limits>
|
|
19
|
+
#include <type_traits>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
#include "doctest/doctest.h"
|
|
23
|
+
|
|
24
|
+
#ifndef XSIMD_TEST_UTILS_HPP
|
|
25
|
+
#define XSIMD_TEST_UTILS_HPP
|
|
26
|
+
|
|
27
|
+
/**************************
|
|
28
|
+
* AppleClang workarounds *
|
|
29
|
+
*************************/
|
|
30
|
+
|
|
31
|
+
// AppleClang is known for having precision issues
|
|
32
|
+
// in the gamma function codegen. It's known to happen
|
|
33
|
+
// between AVX and AVX2, but it also happens on SSE4.1
|
|
34
|
+
// in GitHub Actions.
|
|
35
|
+
// This also seems to happen in M1.
|
|
36
|
+
struct precision_t
|
|
37
|
+
{
|
|
38
|
+
#if defined(__apple_build_version__) && (XSIMD_WITH_SSE4_1 || XSIMD_WITH_NEON64)
|
|
39
|
+
static constexpr size_t max = 8192;
|
|
40
|
+
#else
|
|
41
|
+
static constexpr size_t max = 2048;
|
|
42
|
+
#endif
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/*******************
|
|
46
|
+
* Pretty printers *
|
|
47
|
+
*******************/
|
|
48
|
+
|
|
49
|
+
class simd_test_names
|
|
50
|
+
{
|
|
51
|
+
public:
|
|
52
|
+
template <class T>
|
|
53
|
+
static std::string GetName(int)
|
|
54
|
+
{
|
|
55
|
+
using value_type = typename T::value_type;
|
|
56
|
+
std::string prefix;
|
|
57
|
+
#if XSIMD_WITH_SSE
|
|
58
|
+
size_t register_size = T::size * sizeof(value_type) * CHAR_BIT;
|
|
59
|
+
if (register_size == size_t(128))
|
|
60
|
+
{
|
|
61
|
+
prefix = "sse_";
|
|
62
|
+
}
|
|
63
|
+
else if (register_size == size_t(256))
|
|
64
|
+
{
|
|
65
|
+
prefix = "avx_";
|
|
66
|
+
}
|
|
67
|
+
else if (register_size == size_t(512))
|
|
68
|
+
{
|
|
69
|
+
prefix = "avx512_";
|
|
70
|
+
}
|
|
71
|
+
#elif XSIMD_WITH_NEON
|
|
72
|
+
size_t register_size = T::size * sizeof(value_type) * CHAR_BIT;
|
|
73
|
+
if (register_size == size_t(128))
|
|
74
|
+
{
|
|
75
|
+
prefix = "arm_";
|
|
76
|
+
}
|
|
77
|
+
#endif
|
|
78
|
+
if (std::is_same<value_type, uint8_t>::value)
|
|
79
|
+
{
|
|
80
|
+
return prefix + "uint8_t";
|
|
81
|
+
}
|
|
82
|
+
if (std::is_same<value_type, int8_t>::value)
|
|
83
|
+
{
|
|
84
|
+
return prefix + "int8_t";
|
|
85
|
+
}
|
|
86
|
+
if (std::is_same<value_type, uint16_t>::value)
|
|
87
|
+
{
|
|
88
|
+
return prefix + "uint16_t";
|
|
89
|
+
}
|
|
90
|
+
if (std::is_same<value_type, int16_t>::value)
|
|
91
|
+
{
|
|
92
|
+
return prefix + "int16_t";
|
|
93
|
+
}
|
|
94
|
+
if (std::is_same<value_type, uint32_t>::value)
|
|
95
|
+
{
|
|
96
|
+
return prefix + "uint32_t";
|
|
97
|
+
}
|
|
98
|
+
if (std::is_same<value_type, int32_t>::value)
|
|
99
|
+
{
|
|
100
|
+
return prefix + "int32_t";
|
|
101
|
+
}
|
|
102
|
+
if (std::is_same<value_type, uint64_t>::value)
|
|
103
|
+
{
|
|
104
|
+
return prefix + "uint64_t";
|
|
105
|
+
}
|
|
106
|
+
if (std::is_same<value_type, int64_t>::value)
|
|
107
|
+
{
|
|
108
|
+
return prefix + "int64_t";
|
|
109
|
+
}
|
|
110
|
+
if (std::is_same<value_type, float>::value)
|
|
111
|
+
{
|
|
112
|
+
return prefix + "float";
|
|
113
|
+
}
|
|
114
|
+
if (std::is_same<value_type, double>::value)
|
|
115
|
+
{
|
|
116
|
+
return prefix + "double";
|
|
117
|
+
}
|
|
118
|
+
if (std::is_same<value_type, std::complex<float>>::value)
|
|
119
|
+
{
|
|
120
|
+
return prefix + "complex<float>";
|
|
121
|
+
}
|
|
122
|
+
if (std::is_same<value_type, std::complex<double>>::value)
|
|
123
|
+
{
|
|
124
|
+
return prefix + "complex<double>";
|
|
125
|
+
}
|
|
126
|
+
#ifdef XSIMD_ENABLE_XTL_COMPLEX
|
|
127
|
+
if (std::is_same<value_type, xtl::xcomplex<float>>::value)
|
|
128
|
+
{
|
|
129
|
+
return prefix + "xcomplex<float>";
|
|
130
|
+
}
|
|
131
|
+
if (std::is_same<value_type, xtl::xcomplex<double>>::value)
|
|
132
|
+
{
|
|
133
|
+
return prefix + "xcomplex<double>";
|
|
134
|
+
}
|
|
135
|
+
#endif
|
|
136
|
+
|
|
137
|
+
return prefix + "unknow_type";
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
inline std::string print_function_name(const std::string& func)
|
|
142
|
+
{
|
|
143
|
+
return std::string(" while testing ") + func;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/************************
|
|
147
|
+
* Comparison functions *
|
|
148
|
+
************************/
|
|
149
|
+
|
|
150
|
+
namespace xsimd
|
|
151
|
+
{
|
|
152
|
+
template <class T, class A, size_t N>
|
|
153
|
+
inline bool operator==(const batch<T, A>& lhs, const std::array<T, N>& rhs)
|
|
154
|
+
{
|
|
155
|
+
alignas(A::alignment()) std::array<T, N> tmp;
|
|
156
|
+
lhs.store_aligned(tmp.data());
|
|
157
|
+
return tmp == rhs;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
template <class T, class A, size_t N>
|
|
161
|
+
inline bool operator==(const std::array<T, N>& lhs, const batch<T, A>& rhs)
|
|
162
|
+
{
|
|
163
|
+
return rhs == lhs;
|
|
164
|
+
}
|
|
165
|
+
#ifdef XSIMD_ENABLE_XTL_COMPLEX
|
|
166
|
+
template <class T, class A, size_t N, bool i3ec>
|
|
167
|
+
inline bool operator==(const batch<std::complex<T>, A>& lhs, const std::array<xtl::xcomplex<T, T, i3ec>, N>& rhs)
|
|
168
|
+
{
|
|
169
|
+
alignas(A::alignment()) std::array<xtl::xcomplex<T, T, i3ec>, N> tmp;
|
|
170
|
+
lhs.store_aligned(tmp.data());
|
|
171
|
+
return tmp == rhs;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
template <class T, class A, size_t N, bool i3ec>
|
|
175
|
+
inline bool operator==(const std::array<xtl::xcomplex<T, T, i3ec>, N>& lhs, const batch<std::complex<T>, A>& rhs)
|
|
176
|
+
{
|
|
177
|
+
return rhs == lhs;
|
|
178
|
+
}
|
|
179
|
+
#endif
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
namespace detail
|
|
183
|
+
{
|
|
184
|
+
#ifndef __FAST_MATH__
|
|
185
|
+
namespace utils
|
|
186
|
+
{
|
|
187
|
+
// define some overloads here as integer versions do not exist for msvc
|
|
188
|
+
template <class T>
|
|
189
|
+
inline typename std::enable_if<!std::is_integral<T>::value, bool>::type isinf(const T& c)
|
|
190
|
+
{
|
|
191
|
+
return std::isinf(c);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
template <class T>
|
|
195
|
+
inline typename std::enable_if<std::is_integral<T>::value, bool>::type isinf(const T&)
|
|
196
|
+
{
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
template <class T>
|
|
201
|
+
inline typename std::enable_if<!std::is_integral<T>::value, bool>::type isnan(const T& c)
|
|
202
|
+
{
|
|
203
|
+
return std::isnan(c);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
template <class T>
|
|
207
|
+
inline typename std::enable_if<std::is_integral<T>::value, bool>::type isnan(const T&)
|
|
208
|
+
{
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
#endif
|
|
213
|
+
|
|
214
|
+
inline unsigned char uabs(unsigned char val)
|
|
215
|
+
{
|
|
216
|
+
return val;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
inline unsigned short uabs(unsigned short val)
|
|
220
|
+
{
|
|
221
|
+
return val;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
inline unsigned int uabs(unsigned int val)
|
|
225
|
+
{
|
|
226
|
+
return val;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
inline unsigned long uabs(unsigned long val)
|
|
230
|
+
{
|
|
231
|
+
return val;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
inline unsigned long long uabs(unsigned long long val)
|
|
235
|
+
{
|
|
236
|
+
return val;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
template <class T>
|
|
240
|
+
inline T uabs(T val)
|
|
241
|
+
{
|
|
242
|
+
return std::abs(val);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
template <class T>
|
|
246
|
+
bool check_is_small(const T& value, const T& tolerance)
|
|
247
|
+
{
|
|
248
|
+
using std::abs;
|
|
249
|
+
return uabs(value) < uabs(tolerance);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
template <class T>
|
|
253
|
+
T safe_division(const T& lhs, const T& rhs)
|
|
254
|
+
{
|
|
255
|
+
if (rhs == T(0))
|
|
256
|
+
{
|
|
257
|
+
return (std::numeric_limits<T>::max)();
|
|
258
|
+
}
|
|
259
|
+
if (rhs < static_cast<T>(1) && lhs > rhs * (std::numeric_limits<T>::max)())
|
|
260
|
+
{
|
|
261
|
+
return (std::numeric_limits<T>::max)();
|
|
262
|
+
}
|
|
263
|
+
if ((lhs == static_cast<T>(0)) || (rhs > static_cast<T>(1) && lhs < rhs * (std::numeric_limits<T>::min)()))
|
|
264
|
+
{
|
|
265
|
+
return static_cast<T>(0);
|
|
266
|
+
}
|
|
267
|
+
return lhs / rhs;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
template <class T>
|
|
271
|
+
bool check_is_close(const T& lhs, const T& rhs, const T& relative_precision)
|
|
272
|
+
{
|
|
273
|
+
using std::abs;
|
|
274
|
+
T diff = uabs(lhs - rhs);
|
|
275
|
+
T d1 = safe_division(diff, T(uabs(rhs)));
|
|
276
|
+
T d2 = safe_division(diff, T(uabs(lhs)));
|
|
277
|
+
|
|
278
|
+
return d1 <= relative_precision && d2 <= relative_precision;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
template <class T>
|
|
282
|
+
struct scalar_comparison_near
|
|
283
|
+
{
|
|
284
|
+
static bool run(const T& lhs, const T& rhs)
|
|
285
|
+
{
|
|
286
|
+
using std::abs;
|
|
287
|
+
using std::max;
|
|
288
|
+
|
|
289
|
+
// direct compare integers -- but need tolerance for inexact double conversion
|
|
290
|
+
if (std::is_integral<T>::value && lhs < 10e6 && rhs < 10e6)
|
|
291
|
+
{
|
|
292
|
+
return lhs == rhs;
|
|
293
|
+
}
|
|
294
|
+
#ifndef __FAST_MATH__
|
|
295
|
+
if (utils::isnan(lhs))
|
|
296
|
+
{
|
|
297
|
+
return utils::isnan(rhs);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (utils::isinf(lhs))
|
|
301
|
+
{
|
|
302
|
+
return utils::isinf(rhs) && (lhs * rhs > 0) /* same sign */;
|
|
303
|
+
}
|
|
304
|
+
#endif
|
|
305
|
+
|
|
306
|
+
T relative_precision = precision_t::max * std::numeric_limits<T>::epsilon();
|
|
307
|
+
T absolute_zero_prox = precision_t::max * std::numeric_limits<T>::epsilon();
|
|
308
|
+
|
|
309
|
+
if (max(uabs(lhs), uabs(rhs)) < T(1e-3))
|
|
310
|
+
{
|
|
311
|
+
using res_type = decltype(lhs - rhs);
|
|
312
|
+
return detail::check_is_small(lhs - rhs, res_type(absolute_zero_prox));
|
|
313
|
+
}
|
|
314
|
+
else
|
|
315
|
+
{
|
|
316
|
+
return detail::check_is_close(lhs, rhs, relative_precision);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
template <class T>
|
|
322
|
+
struct scalar_comparison
|
|
323
|
+
{
|
|
324
|
+
static bool run(const T& lhs, const T& rhs)
|
|
325
|
+
{
|
|
326
|
+
return lhs == rhs;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
template <>
|
|
331
|
+
struct scalar_comparison<float> : scalar_comparison_near<float>
|
|
332
|
+
{
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
template <>
|
|
336
|
+
struct scalar_comparison<double> : scalar_comparison_near<double>
|
|
337
|
+
{
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
template <class T>
|
|
341
|
+
struct scalar_comparison<std::complex<T>>
|
|
342
|
+
{
|
|
343
|
+
static bool run(const std::complex<T>& lhs, const std::complex<T>& rhs)
|
|
344
|
+
{
|
|
345
|
+
using real_comparison = scalar_comparison<T>;
|
|
346
|
+
return real_comparison::run(lhs.real(), rhs.real()) && real_comparison::run(lhs.imag(), rhs.imag());
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
#ifdef XSIMD_ENABLE_XTL_COMPLEX
|
|
351
|
+
template <class T, bool i3ec>
|
|
352
|
+
struct scalar_comparison<xtl::xcomplex<T, T, i3ec>>
|
|
353
|
+
{
|
|
354
|
+
static bool run(const xtl::xcomplex<T, T, i3ec>& lhs, const xtl::xcomplex<T, T, i3ec>& rhs)
|
|
355
|
+
{
|
|
356
|
+
using real_comparison = scalar_comparison<T>;
|
|
357
|
+
return real_comparison::run(lhs.real(), rhs.real()) && real_comparison::run(lhs.imag(), rhs.imag());
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
#endif
|
|
361
|
+
|
|
362
|
+
template <class V>
|
|
363
|
+
struct vector_comparison
|
|
364
|
+
{
|
|
365
|
+
static bool run(const V& lhs, const V& rhs)
|
|
366
|
+
{
|
|
367
|
+
using value_type = typename V::value_type;
|
|
368
|
+
for (size_t i = 0; i < lhs.size(); ++i)
|
|
369
|
+
{
|
|
370
|
+
if (!scalar_comparison<value_type>::run(lhs[i], rhs[i]))
|
|
371
|
+
return false;
|
|
372
|
+
}
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
template <class T>
|
|
378
|
+
bool expect_scalar_near(const T& lhs, const T& rhs)
|
|
379
|
+
{
|
|
380
|
+
return scalar_comparison<T>::run(lhs, rhs);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
template <class V>
|
|
384
|
+
bool expect_container_near(const V& lhs, const V& rhs)
|
|
385
|
+
{
|
|
386
|
+
return vector_comparison<V>::run(lhs, rhs);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
template <class T, size_t N>
|
|
390
|
+
bool expect_array_near(const std::array<T, N>& lhs, const std::array<T, N>& rhs)
|
|
391
|
+
{
|
|
392
|
+
return expect_container_near(lhs, rhs);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
template <class T, class A>
|
|
396
|
+
bool expect_vector_near(const std::vector<T, A>& lhs, const std::vector<T, A>& rhs)
|
|
397
|
+
{
|
|
398
|
+
return expect_container_near(lhs, rhs);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
template <class T, size_t N, class A>
|
|
402
|
+
bool expect_batch_near(const ::xsimd::batch<T, A>& lhs, const std::array<T, N>& rhs)
|
|
403
|
+
{
|
|
404
|
+
alignas(A::alignment()) std::array<T, N> tmp;
|
|
405
|
+
lhs.store_aligned(tmp.data());
|
|
406
|
+
return expect_array_near(tmp, rhs);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
template <class T, size_t N, class A>
|
|
410
|
+
bool expect_batch_near(const std::array<T, N>& lhs, const ::xsimd::batch<T, A>& rhs)
|
|
411
|
+
{
|
|
412
|
+
alignas(A::alignment()) std::array<T, N> tmp;
|
|
413
|
+
rhs.store_aligned(tmp.data());
|
|
414
|
+
return expect_array_near(lhs, tmp);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
template <class T, class A>
|
|
418
|
+
bool expect_batch_near(const ::xsimd::batch<T, A>& lhs, const ::xsimd::batch<T, A>& rhs)
|
|
419
|
+
{
|
|
420
|
+
constexpr auto N = xsimd::batch<T, A>::size;
|
|
421
|
+
alignas(A::alignment()) std::array<T, N> tmp;
|
|
422
|
+
lhs.store_aligned(tmp.data());
|
|
423
|
+
return expect_batch_near(tmp, rhs);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
template <class T, size_t N, class A>
|
|
427
|
+
bool expect_batch_near(const ::xsimd::batch_bool<T, A>& lhs, const std::array<bool, N>& rhs)
|
|
428
|
+
{
|
|
429
|
+
alignas(A::alignment()) std::array<bool, N> tmp;
|
|
430
|
+
lhs.store_aligned(tmp.data());
|
|
431
|
+
return expect_array_near(tmp, rhs);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
template <class T, size_t N, class A>
|
|
435
|
+
bool expect_batch_near(const std::array<bool, N>& lhs, const ::xsimd::batch_bool<T, A>& rhs)
|
|
436
|
+
{
|
|
437
|
+
alignas(A::alignment()) std::array<bool, N> tmp;
|
|
438
|
+
rhs.store_aligned(tmp.data());
|
|
439
|
+
return expect_array_near(lhs, tmp);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
template <class T, class A>
|
|
443
|
+
bool expect_batch_near(const ::xsimd::batch_bool<T, A>& lhs, const ::xsimd::batch_bool<T, A>& rhs)
|
|
444
|
+
{
|
|
445
|
+
constexpr auto N = xsimd::batch<T, A>::size;
|
|
446
|
+
alignas(A::alignment()) std::array<bool, N> tmp;
|
|
447
|
+
lhs.store_aligned(tmp.data());
|
|
448
|
+
return expect_batch_near(tmp, rhs);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
template <class It>
|
|
452
|
+
size_t get_nb_diff(It lhs_begin, It lhs_end, It rhs_begin)
|
|
453
|
+
{
|
|
454
|
+
size_t res = 0;
|
|
455
|
+
using value_type = typename std::iterator_traits<It>::value_type;
|
|
456
|
+
while (lhs_begin != lhs_end)
|
|
457
|
+
{
|
|
458
|
+
if (!scalar_comparison<value_type>::run(*lhs_begin++, *rhs_begin++))
|
|
459
|
+
{
|
|
460
|
+
++res;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return res;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
template <class T, class A>
|
|
467
|
+
size_t get_nb_diff(const std::vector<T, A>& lhs, const std::vector<T, A>& rhs)
|
|
468
|
+
{
|
|
469
|
+
return get_nb_diff(lhs.begin(), lhs.end(), rhs.begin());
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
template <class T, size_t N>
|
|
473
|
+
size_t get_nb_diff(const std::array<T, N>& lhs, const std::array<T, N>& rhs)
|
|
474
|
+
{
|
|
475
|
+
return get_nb_diff(lhs.begin(), lhs.end(), rhs.begin());
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
template <class T, class A>
|
|
479
|
+
size_t get_nb_diff_near(const std::vector<T, A>& lhs, const std::vector<T, A>& rhs, float precision)
|
|
480
|
+
{
|
|
481
|
+
size_t i = 0;
|
|
482
|
+
for (size_t i = 0; i < lhs.size(); i++)
|
|
483
|
+
{
|
|
484
|
+
if (std::abs(lhs[i] - rhs[i]) > precision)
|
|
485
|
+
{
|
|
486
|
+
i++;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
return i;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
template <class T, size_t N>
|
|
493
|
+
size_t get_nb_diff_near(const std::array<T, N>& lhs, const std::array<T, N>& rhs, float precision)
|
|
494
|
+
{
|
|
495
|
+
size_t i = 0;
|
|
496
|
+
for (size_t i = 0; i < lhs.size(); i++)
|
|
497
|
+
{
|
|
498
|
+
if (std::abs(lhs[i] - rhs[i]) > precision)
|
|
499
|
+
{
|
|
500
|
+
i++;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
return i;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
template <class B, class S>
|
|
507
|
+
void load_batch(B& b, const S& src, size_t i = 0)
|
|
508
|
+
{
|
|
509
|
+
b = B::load_unaligned(src.data() + i);
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
template <class B, class D>
|
|
513
|
+
void store_batch(const B& b, D& dst, size_t i = 0)
|
|
514
|
+
{
|
|
515
|
+
b.store_unaligned(dst.data() + i);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
#define CHECK_BATCH_EQ(b1, b2) \
|
|
521
|
+
do \
|
|
522
|
+
{ \
|
|
523
|
+
INFO(#b1 ":", b1); \
|
|
524
|
+
INFO(#b2 ":", b2); \
|
|
525
|
+
CHECK_UNARY(::detail::expect_batch_near(b1, b2)); \
|
|
526
|
+
} while (0)
|
|
527
|
+
#define CHECK_SCALAR_EQ(s1, s2) \
|
|
528
|
+
do \
|
|
529
|
+
{ \
|
|
530
|
+
INFO(#s1 ":", s1); \
|
|
531
|
+
INFO(#s2 ":", s2); \
|
|
532
|
+
CHECK_UNARY(::detail::expect_scalar_near(s1, s2)); \
|
|
533
|
+
} while (0)
|
|
534
|
+
#define CHECK_VECTOR_EQ(v1, v2) \
|
|
535
|
+
do \
|
|
536
|
+
{ \
|
|
537
|
+
INFO(#v1 ":", v1); \
|
|
538
|
+
INFO(#v2 ":", v2); \
|
|
539
|
+
CHECK_UNARY(::detail::expect_vector_near(v1, v2)); \
|
|
540
|
+
} while (0)
|
|
541
|
+
|
|
542
|
+
namespace xsimd
|
|
543
|
+
{
|
|
544
|
+
/************************
|
|
545
|
+
* Enable metafunctions *
|
|
546
|
+
************************/
|
|
547
|
+
|
|
548
|
+
// Backport of C++14 std::enable_if
|
|
549
|
+
template <bool B, class T = void>
|
|
550
|
+
using enable_if_t = typename std::enable_if<B, T>::type;
|
|
551
|
+
|
|
552
|
+
template <class T, class R>
|
|
553
|
+
using enable_integral_t = enable_if_t<std::is_integral<T>::value, R>;
|
|
554
|
+
|
|
555
|
+
template <class T, class R>
|
|
556
|
+
using enable_floating_point_t = enable_if_t<std::is_floating_point<T>::value, R>;
|
|
557
|
+
|
|
558
|
+
namespace mpl
|
|
559
|
+
{
|
|
560
|
+
/**************
|
|
561
|
+
* types_list *
|
|
562
|
+
**************/
|
|
563
|
+
template <class... T>
|
|
564
|
+
struct type_list
|
|
565
|
+
{
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/***********************
|
|
571
|
+
* Testing types lists *
|
|
572
|
+
***********************/
|
|
573
|
+
|
|
574
|
+
#define BATCH_INT_TYPES xsimd::batch<uint8_t>, \
|
|
575
|
+
xsimd::batch<int8_t>, \
|
|
576
|
+
xsimd::batch<uint16_t>, \
|
|
577
|
+
xsimd::batch<int16_t>, \
|
|
578
|
+
xsimd::batch<uint32_t>, \
|
|
579
|
+
xsimd::batch<int32_t>, \
|
|
580
|
+
xsimd::batch<uint64_t>, \
|
|
581
|
+
xsimd::batch<int64_t>
|
|
582
|
+
|
|
583
|
+
#if XSIMD_WITH_NEON64 || !XSIMD_WITH_NEON
|
|
584
|
+
#define BATCH_FLOAT_TYPES xsimd::batch<float>, xsimd::batch<double>
|
|
585
|
+
#else
|
|
586
|
+
#define BATCH_FLOAT_TYPES xsimd::batch<float>
|
|
587
|
+
#endif
|
|
588
|
+
#if XSIMD_WITH_NEON64 || !XSIMD_WITH_NEON
|
|
589
|
+
#define BATCH_COMPLEX_TYPES xsimd::batch<std::complex<float>>, xsimd::batch<std::complex<double>>
|
|
590
|
+
#else
|
|
591
|
+
#define BATCH_COMPLEX_TYPES xsimd::batch<std::complex<float>>
|
|
592
|
+
#endif
|
|
593
|
+
|
|
594
|
+
#define BATCH_TYPES BATCH_INT_TYPES, BATCH_FLOAT_TYPES
|
|
595
|
+
#define BATCH_MATH_TYPES xsimd::batch<int32_t>, BATCH_FLOAT_TYPES
|
|
596
|
+
|
|
597
|
+
#define BATCH_SWIZZLE_TYPES BATCH_FLOAT_TYPES, BATCH_COMPLEX_TYPES, BATCH_INT_TYPES
|
|
598
|
+
|
|
599
|
+
/********************
|
|
600
|
+
* conversion utils *
|
|
601
|
+
********************/
|
|
602
|
+
template <size_t N, size_t A>
|
|
603
|
+
struct conversion_param
|
|
604
|
+
{
|
|
605
|
+
static constexpr size_t size = N;
|
|
606
|
+
static constexpr size_t alignment = A;
|
|
607
|
+
};
|
|
608
|
+
|
|
609
|
+
#define CONVERSION_TYPES conversion_param<sizeof(xsimd::types::simd_register<int, xsimd::default_arch>) / sizeof(double), xsimd::default_arch::alignment()>
|
|
610
|
+
|
|
611
|
+
#endif // XXSIMD_TEST_UTILS_HPP
|