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,506 @@
|
|
|
1
|
+
/***************************************************************************
|
|
2
|
+
* Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and *
|
|
3
|
+
* Martin Renou *
|
|
4
|
+
* Copyright (c) QuantStack *
|
|
5
|
+
* Copyright (c) Serge Guelton *
|
|
6
|
+
* Copyright (c) Yibo Cai *
|
|
7
|
+
* *
|
|
8
|
+
* Distributed under the terms of the BSD 3-Clause License. *
|
|
9
|
+
* *
|
|
10
|
+
* The full license is in the file LICENSE, distributed with this software. *
|
|
11
|
+
****************************************************************************/
|
|
12
|
+
|
|
13
|
+
#ifndef XSIMD_RVV_REGISTER_HPP
|
|
14
|
+
#define XSIMD_RVV_REGISTER_HPP
|
|
15
|
+
|
|
16
|
+
#include "xsimd_common_arch.hpp"
|
|
17
|
+
#include "xsimd_register.hpp"
|
|
18
|
+
|
|
19
|
+
#if XSIMD_WITH_RVV
|
|
20
|
+
#include <riscv_vector.h>
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
namespace xsimd
|
|
24
|
+
{
|
|
25
|
+
namespace detail
|
|
26
|
+
{
|
|
27
|
+
/**
|
|
28
|
+
* @ingroup architectures
|
|
29
|
+
*
|
|
30
|
+
* RVV instructions (fixed vector size) for riscv
|
|
31
|
+
*/
|
|
32
|
+
template <size_t Width>
|
|
33
|
+
struct rvv : xsimd::common
|
|
34
|
+
{
|
|
35
|
+
static constexpr size_t width = Width;
|
|
36
|
+
static constexpr bool supported() noexcept { return Width == XSIMD_RVV_BITS; }
|
|
37
|
+
static constexpr bool available() noexcept { return true; }
|
|
38
|
+
static constexpr bool requires_alignment() noexcept { return true; }
|
|
39
|
+
static constexpr std::size_t alignment() noexcept { return 16; }
|
|
40
|
+
static constexpr char const* name() noexcept { return "riscv+rvv"; }
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#if XSIMD_WITH_RVV
|
|
45
|
+
|
|
46
|
+
using rvv = detail::rvv<__riscv_v_fixed_vlen>;
|
|
47
|
+
|
|
48
|
+
#define XSIMD_RVV_JOINT_(a, b, c) a##b##c
|
|
49
|
+
#define XSIMD_RVV_JOINT(a, b, c) XSIMD_RVV_JOINT_(a, b, c)
|
|
50
|
+
#define XSIMD_RVV_JOINT5(a, b, c, d, e) XSIMD_RVV_JOINT(XSIMD_RVV_JOINT(a, b, c), d, e)
|
|
51
|
+
|
|
52
|
+
#define XSIMD_RVV_TYPE_i(S, V) XSIMD_RVV_JOINT5(vint, S, m, V, _t)
|
|
53
|
+
#define XSIMD_RVV_TYPE_u(S, V) XSIMD_RVV_JOINT5(vuint, S, m, V, _t)
|
|
54
|
+
#define XSIMD_RVV_TYPE_f(S, V) XSIMD_RVV_JOINT5(vfloat, S, m, V, _t)
|
|
55
|
+
#define XSIMD_RVV_TYPE(T, S, V) XSIMD_RVV_JOINT(XSIMD_RVV_TYPE, _, T)(S, V)
|
|
56
|
+
|
|
57
|
+
namespace types
|
|
58
|
+
{
|
|
59
|
+
namespace detail
|
|
60
|
+
{
|
|
61
|
+
static constexpr size_t rvv_width_mf8 = XSIMD_RVV_BITS / 8;
|
|
62
|
+
static constexpr size_t rvv_width_mf4 = XSIMD_RVV_BITS / 4;
|
|
63
|
+
static constexpr size_t rvv_width_mf2 = XSIMD_RVV_BITS / 2;
|
|
64
|
+
static constexpr size_t rvv_width_m1 = XSIMD_RVV_BITS;
|
|
65
|
+
|
|
66
|
+
// Cope with gcc limitation, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116484
|
|
67
|
+
#define XSIMD_RVV_WIDTH_MF8 (XSIMD_RVV_BITS / 8)
|
|
68
|
+
#define XSIMD_RVV_WIDTH_MF4 (XSIMD_RVV_BITS / 4)
|
|
69
|
+
#define XSIMD_RVV_WIDTH_MF2 (XSIMD_RVV_BITS / 2)
|
|
70
|
+
#define XSIMD_RVV_WIDTH_M1 XSIMD_RVV_BITS
|
|
71
|
+
|
|
72
|
+
// rvv_type_info is a utility class to convert scalar type and
|
|
73
|
+
// bitwidth into rvv register types.
|
|
74
|
+
//
|
|
75
|
+
// * `type` is the unadorned vector type.
|
|
76
|
+
// * `fixed_type` is the same type, but with the storage attribute
|
|
77
|
+
// applied.
|
|
78
|
+
// * `byte_type` is the type which is the same size in unsigned
|
|
79
|
+
// bytes, used as an intermediate step for bit-cast operations,
|
|
80
|
+
// because only a subset of __riscv_vreinterpret() intrinsics
|
|
81
|
+
// exist -- but always enough to get us to bytes and back.
|
|
82
|
+
//
|
|
83
|
+
template <class T, size_t Width>
|
|
84
|
+
struct rvv_type_info;
|
|
85
|
+
#define XSIMD_RVV_MAKE_TYPE(scalar, t, s, vmul) \
|
|
86
|
+
template <> \
|
|
87
|
+
struct rvv_type_info<scalar, rvv_width_m1 * vmul> \
|
|
88
|
+
{ \
|
|
89
|
+
static constexpr size_t width = rvv_width_m1 * vmul; \
|
|
90
|
+
using type = XSIMD_RVV_TYPE(t, s, vmul); \
|
|
91
|
+
using byte_type = XSIMD_RVV_TYPE(u, 8, vmul); \
|
|
92
|
+
using fixed_type = type __attribute__((riscv_rvv_vector_bits(/*width=*/XSIMD_RVV_WIDTH_M1 * vmul))); \
|
|
93
|
+
template <class U> \
|
|
94
|
+
static XSIMD_INLINE type bitcast(U x) noexcept \
|
|
95
|
+
{ \
|
|
96
|
+
const auto words = XSIMD_RVV_JOINT5(__riscv_vreinterpret_, u, s, m, vmul)(x); \
|
|
97
|
+
return XSIMD_RVV_JOINT5(__riscv_vreinterpret_, t, s, m, vmul)(words); \
|
|
98
|
+
} \
|
|
99
|
+
template <class U> \
|
|
100
|
+
static XSIMD_INLINE byte_type as_bytes(U x) noexcept \
|
|
101
|
+
{ \
|
|
102
|
+
static_assert(std::is_same<U, type>::value, "inconsistent conversion types"); \
|
|
103
|
+
const auto words = XSIMD_RVV_JOINT5(__riscv_vreinterpret_, u, s, m, vmul)(x); \
|
|
104
|
+
return XSIMD_RVV_JOINT5(__riscv_vreinterpret_, u, 8, m, vmul)(words); \
|
|
105
|
+
} \
|
|
106
|
+
}; \
|
|
107
|
+
template <> \
|
|
108
|
+
XSIMD_INLINE XSIMD_RVV_TYPE(t, s, vmul) rvv_type_info<scalar, rvv_width_m1 * vmul>::bitcast<XSIMD_RVV_TYPE(t, s, vmul)>(XSIMD_RVV_TYPE(t, s, vmul) x) noexcept { return x; }
|
|
109
|
+
|
|
110
|
+
#define XSIMD_RVV_MAKE_TYPES(vmul) \
|
|
111
|
+
XSIMD_RVV_MAKE_TYPE(int8_t, i, 8, vmul) \
|
|
112
|
+
XSIMD_RVV_MAKE_TYPE(uint8_t, u, 8, vmul) \
|
|
113
|
+
XSIMD_RVV_MAKE_TYPE(int16_t, i, 16, vmul) \
|
|
114
|
+
XSIMD_RVV_MAKE_TYPE(uint16_t, u, 16, vmul) \
|
|
115
|
+
XSIMD_RVV_MAKE_TYPE(int32_t, i, 32, vmul) \
|
|
116
|
+
XSIMD_RVV_MAKE_TYPE(uint32_t, u, 32, vmul) \
|
|
117
|
+
XSIMD_RVV_MAKE_TYPE(int64_t, i, 64, vmul) \
|
|
118
|
+
XSIMD_RVV_MAKE_TYPE(uint64_t, u, 64, vmul) \
|
|
119
|
+
XSIMD_RVV_MAKE_TYPE(float, f, 32, vmul) \
|
|
120
|
+
XSIMD_RVV_MAKE_TYPE(double, f, 64, vmul)
|
|
121
|
+
|
|
122
|
+
XSIMD_RVV_MAKE_TYPES(8)
|
|
123
|
+
XSIMD_RVV_MAKE_TYPES(4)
|
|
124
|
+
XSIMD_RVV_MAKE_TYPES(2)
|
|
125
|
+
XSIMD_RVV_MAKE_TYPES(1)
|
|
126
|
+
#undef XSIMD_RVV_TYPE
|
|
127
|
+
#undef XSIMD_RVV_TYPE_f
|
|
128
|
+
#undef XSIMD_RVV_TYPE_u
|
|
129
|
+
#undef XSIMD_RVV_TYPE_i
|
|
130
|
+
#undef XSIMD_RVV_MAKE_TYPES
|
|
131
|
+
#undef XSIMD_RVV_MAKE_TYPE
|
|
132
|
+
|
|
133
|
+
// Specialization needed for #1058
|
|
134
|
+
template <>
|
|
135
|
+
XSIMD_INLINE rvv_type_info<int8_t, rvv_width_m1 * 8>::type
|
|
136
|
+
rvv_type_info<int8_t, rvv_width_m1 * 8>::bitcast<__rvv_uint8m8_t>(
|
|
137
|
+
__rvv_uint8m8_t x) noexcept
|
|
138
|
+
{
|
|
139
|
+
return __riscv_vreinterpret_i8m8(x);
|
|
140
|
+
}
|
|
141
|
+
template <>
|
|
142
|
+
XSIMD_INLINE rvv_type_info<int8_t, rvv_width_m1 * 1>::type
|
|
143
|
+
rvv_type_info<int8_t, rvv_width_m1 * 1>::bitcast<__rvv_uint8m1_t>(
|
|
144
|
+
__rvv_uint8m1_t x) noexcept
|
|
145
|
+
{
|
|
146
|
+
return __riscv_vreinterpret_i8m1(x);
|
|
147
|
+
}
|
|
148
|
+
template <>
|
|
149
|
+
XSIMD_INLINE rvv_type_info<uint16_t, rvv_width_m1 * 1>::type
|
|
150
|
+
rvv_type_info<uint16_t, rvv_width_m1 * 1>::bitcast<__rvv_uint8m1_t>(
|
|
151
|
+
__rvv_uint8m1_t x) noexcept
|
|
152
|
+
{
|
|
153
|
+
return __riscv_vreinterpret_u16m1(x);
|
|
154
|
+
}
|
|
155
|
+
template <>
|
|
156
|
+
XSIMD_INLINE rvv_type_info<uint32_t, rvv_width_m1 * 1>::type
|
|
157
|
+
rvv_type_info<uint32_t, rvv_width_m1 * 1>::bitcast<__rvv_uint8m1_t>(
|
|
158
|
+
__rvv_uint8m1_t x) noexcept
|
|
159
|
+
{
|
|
160
|
+
return __riscv_vreinterpret_u32m1(x);
|
|
161
|
+
}
|
|
162
|
+
template <>
|
|
163
|
+
XSIMD_INLINE rvv_type_info<uint64_t, rvv_width_m1 * 1>::type
|
|
164
|
+
rvv_type_info<uint64_t, rvv_width_m1 * 1>::bitcast<__rvv_uint8m1_t>(
|
|
165
|
+
__rvv_uint8m1_t x) noexcept
|
|
166
|
+
{
|
|
167
|
+
return __riscv_vreinterpret_u64m1(x);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
//
|
|
171
|
+
|
|
172
|
+
template <>
|
|
173
|
+
XSIMD_INLINE rvv_type_info<int8_t, rvv_width_m1 * 8>::byte_type
|
|
174
|
+
rvv_type_info<int8_t, rvv_width_m1 * 8>::as_bytes<__rvv_int8m8_t>(__rvv_int8m8_t x) noexcept
|
|
175
|
+
{
|
|
176
|
+
return __riscv_vreinterpret_u8m8(x);
|
|
177
|
+
}
|
|
178
|
+
template <>
|
|
179
|
+
XSIMD_INLINE rvv_type_info<int8_t, rvv_width_m1 * 1>::byte_type
|
|
180
|
+
rvv_type_info<int8_t, rvv_width_m1 * 1>::as_bytes<__rvv_int8m1_t>(__rvv_int8m1_t x) noexcept
|
|
181
|
+
{
|
|
182
|
+
return __riscv_vreinterpret_u8m1(x);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
template <>
|
|
186
|
+
XSIMD_INLINE rvv_type_info<uint8_t, rvv_width_m1 * 1>::byte_type
|
|
187
|
+
rvv_type_info<uint8_t, rvv_width_m1 * 1>::as_bytes<__rvv_uint8m1_t>(__rvv_uint8m1_t x) noexcept
|
|
188
|
+
{
|
|
189
|
+
return x;
|
|
190
|
+
}
|
|
191
|
+
template <>
|
|
192
|
+
XSIMD_INLINE rvv_type_info<uint16_t, rvv_width_m1 * 1>::byte_type
|
|
193
|
+
rvv_type_info<uint16_t, rvv_width_m1 * 1>::as_bytes<__rvv_uint16m1_t>(__rvv_uint16m1_t x) noexcept
|
|
194
|
+
{
|
|
195
|
+
return __riscv_vreinterpret_u8m1(x);
|
|
196
|
+
}
|
|
197
|
+
template <>
|
|
198
|
+
XSIMD_INLINE rvv_type_info<uint32_t, rvv_width_m1 * 1>::byte_type
|
|
199
|
+
rvv_type_info<uint32_t, rvv_width_m1 * 1>::as_bytes<__rvv_uint32m1_t>(__rvv_uint32m1_t x) noexcept
|
|
200
|
+
{
|
|
201
|
+
return __riscv_vreinterpret_u8m1(x);
|
|
202
|
+
}
|
|
203
|
+
template <>
|
|
204
|
+
XSIMD_INLINE rvv_type_info<uint64_t, rvv_width_m1 * 1>::byte_type
|
|
205
|
+
rvv_type_info<uint64_t, rvv_width_m1 * 1>::as_bytes<__rvv_uint64m1_t>(__rvv_uint64m1_t x) noexcept
|
|
206
|
+
{
|
|
207
|
+
return __riscv_vreinterpret_u8m1(x);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// rvv_blob is storage-type abstraction for a vector register.
|
|
211
|
+
template <class T, size_t Width>
|
|
212
|
+
struct rvv_blob : public rvv_type_info<T, Width>
|
|
213
|
+
{
|
|
214
|
+
using super = rvv_type_info<T, Width>;
|
|
215
|
+
using typename super::fixed_type;
|
|
216
|
+
using typename super::type;
|
|
217
|
+
|
|
218
|
+
fixed_type value;
|
|
219
|
+
type get() const { return value; }
|
|
220
|
+
void set(type v) { value = v; }
|
|
221
|
+
};
|
|
222
|
+
//
|
|
223
|
+
// But sometimes we want our storage type to be less than a whole
|
|
224
|
+
// register, while presenting as a whole register to the outside
|
|
225
|
+
// world. This is because some partial-register types are not
|
|
226
|
+
// defined, but they can (mostly) be emulated using shorter vl on a
|
|
227
|
+
// full-width register for arithmetic, and cast back to a partial
|
|
228
|
+
// byte register for storage.
|
|
229
|
+
//
|
|
230
|
+
template <class T, size_t divisor>
|
|
231
|
+
struct rvv_semiblob : public rvv_type_info<T, rvv_width_m1>
|
|
232
|
+
{
|
|
233
|
+
using super = rvv_type_info<T, rvv_width_m1>;
|
|
234
|
+
static constexpr size_t width = rvv_width_m1 / divisor;
|
|
235
|
+
using typename super::type;
|
|
236
|
+
template <size_t div>
|
|
237
|
+
struct semitype;
|
|
238
|
+
template <>
|
|
239
|
+
struct semitype<2>
|
|
240
|
+
{
|
|
241
|
+
using type = vuint8mf2_t __attribute__((riscv_rvv_vector_bits(XSIMD_RVV_WIDTH_MF2)));
|
|
242
|
+
};
|
|
243
|
+
template <>
|
|
244
|
+
struct semitype<4>
|
|
245
|
+
{
|
|
246
|
+
using type = vuint8mf4_t __attribute__((riscv_rvv_vector_bits(XSIMD_RVV_WIDTH_MF4)));
|
|
247
|
+
};
|
|
248
|
+
template <>
|
|
249
|
+
struct semitype<8>
|
|
250
|
+
{
|
|
251
|
+
using type = vuint8mf8_t __attribute__((riscv_rvv_vector_bits(XSIMD_RVV_WIDTH_MF8)));
|
|
252
|
+
};
|
|
253
|
+
using fixed_type = typename semitype<divisor>::type;
|
|
254
|
+
using super::as_bytes;
|
|
255
|
+
using super::bitcast;
|
|
256
|
+
|
|
257
|
+
fixed_type value;
|
|
258
|
+
template <size_t div>
|
|
259
|
+
vuint8m1_t get_bytes() const;
|
|
260
|
+
template <>
|
|
261
|
+
vuint8m1_t get_bytes<2>() const { return __riscv_vlmul_ext_v_u8mf2_u8m1(value); }
|
|
262
|
+
template <>
|
|
263
|
+
vuint8m1_t get_bytes<4>() const { return __riscv_vlmul_ext_v_u8mf4_u8m1(value); }
|
|
264
|
+
template <>
|
|
265
|
+
vuint8m1_t get_bytes<8>() const { return __riscv_vlmul_ext_v_u8mf8_u8m1(value); }
|
|
266
|
+
type get() const noexcept
|
|
267
|
+
{
|
|
268
|
+
vuint8m1_t bytes = get_bytes<divisor>();
|
|
269
|
+
return bitcast(bytes);
|
|
270
|
+
}
|
|
271
|
+
template <size_t div>
|
|
272
|
+
void set_bytes(vuint8m1_t);
|
|
273
|
+
template <>
|
|
274
|
+
void set_bytes<2>(vuint8m1_t v) { value = __riscv_vlmul_trunc_v_u8m1_u8mf2(v); }
|
|
275
|
+
template <>
|
|
276
|
+
void set_bytes<4>(vuint8m1_t v) { value = __riscv_vlmul_trunc_v_u8m1_u8mf4(v); }
|
|
277
|
+
template <>
|
|
278
|
+
void set_bytes<8>(vuint8m1_t v) { value = __riscv_vlmul_trunc_v_u8m1_u8mf8(v); }
|
|
279
|
+
void set(type v)
|
|
280
|
+
{
|
|
281
|
+
vuint8m1_t bytes = as_bytes(v);
|
|
282
|
+
set_bytes<divisor>(bytes);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
template <class T>
|
|
286
|
+
struct rvv_blob<T, rvv_width_mf2> : rvv_semiblob<T, 2>
|
|
287
|
+
{
|
|
288
|
+
};
|
|
289
|
+
template <class T>
|
|
290
|
+
struct rvv_blob<T, rvv_width_mf4> : rvv_semiblob<T, 4>
|
|
291
|
+
{
|
|
292
|
+
};
|
|
293
|
+
template <class T>
|
|
294
|
+
struct rvv_blob<T, rvv_width_mf8> : rvv_semiblob<T, 8>
|
|
295
|
+
{
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
// It's difficult dealing with both char and whichever *int8_t type
|
|
299
|
+
// is compatible with char, so just avoid it altogether.
|
|
300
|
+
//
|
|
301
|
+
using rvv_char_t = typename std::conditional<std::is_signed<char>::value, int8_t, uint8_t>::type;
|
|
302
|
+
template <class T>
|
|
303
|
+
using rvv_fix_char_t = typename std::conditional<
|
|
304
|
+
std::is_same<char, typename std::decay<T>::type>::value,
|
|
305
|
+
rvv_char_t, T>::type;
|
|
306
|
+
|
|
307
|
+
// An explicit constructor isn't really explicit enough to allow
|
|
308
|
+
// implicit bit-casting operations between incompatible types, so
|
|
309
|
+
// we add this vacuous flag argument when we're serious:
|
|
310
|
+
//
|
|
311
|
+
enum rvv_bitcast_flag
|
|
312
|
+
{
|
|
313
|
+
XSIMD_RVV_BITCAST
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
// the general-purpose vector register type, usable within
|
|
317
|
+
// templates, and supporting arithmetic on partial registers for
|
|
318
|
+
// which there is no intrinsic type (by casting via a full register
|
|
319
|
+
// type).
|
|
320
|
+
//
|
|
321
|
+
template <class T, size_t Width>
|
|
322
|
+
struct rvv_reg
|
|
323
|
+
{
|
|
324
|
+
static constexpr size_t width = Width;
|
|
325
|
+
static constexpr size_t vl = Width / (sizeof(T) * 8);
|
|
326
|
+
using blob_type = rvv_blob<T, Width>;
|
|
327
|
+
using register_type = typename blob_type::type;
|
|
328
|
+
using byte_type = typename blob_type::byte_type;
|
|
329
|
+
blob_type value;
|
|
330
|
+
rvv_reg() noexcept = default;
|
|
331
|
+
rvv_reg(register_type x) noexcept { value.set(x); }
|
|
332
|
+
explicit rvv_reg(byte_type v, rvv_bitcast_flag) { value.set(value.bitcast(v)); }
|
|
333
|
+
template <class U>
|
|
334
|
+
explicit rvv_reg(rvv_reg<U, Width> v, rvv_bitcast_flag)
|
|
335
|
+
: rvv_reg(v.get_bytes(), XSIMD_RVV_BITCAST)
|
|
336
|
+
{
|
|
337
|
+
}
|
|
338
|
+
byte_type get_bytes() const noexcept
|
|
339
|
+
{
|
|
340
|
+
return blob_type::as_bytes(value.get());
|
|
341
|
+
}
|
|
342
|
+
operator register_type() const noexcept { return value.get(); }
|
|
343
|
+
};
|
|
344
|
+
template <class T, size_t Width = XSIMD_RVV_BITS>
|
|
345
|
+
using rvv_reg_t = typename std::conditional<!std::is_void<T>::value, rvv_reg<rvv_fix_char_t<T>, Width>, void>::type;
|
|
346
|
+
|
|
347
|
+
// And some more of the same stuff for bool types, which have
|
|
348
|
+
// similar problems and similar workarounds.
|
|
349
|
+
//
|
|
350
|
+
template <size_t>
|
|
351
|
+
struct rvv_bool_info;
|
|
352
|
+
#define XSIMD_RVV_MAKE_BOOL_TYPE(i) \
|
|
353
|
+
template <> \
|
|
354
|
+
struct rvv_bool_info<i> \
|
|
355
|
+
{ \
|
|
356
|
+
using type = XSIMD_RVV_JOINT(vbool, i, _t); \
|
|
357
|
+
template <class T> \
|
|
358
|
+
static XSIMD_INLINE type bitcast(T value) noexcept \
|
|
359
|
+
{ \
|
|
360
|
+
return XSIMD_RVV_JOINT(__riscv_vreinterpret_b, i, )(value); \
|
|
361
|
+
} \
|
|
362
|
+
/*template <> static XSIMD_INLINE type bitcast(type value) noexcept { return value; }*/ \
|
|
363
|
+
};
|
|
364
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(1);
|
|
365
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(2);
|
|
366
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(4);
|
|
367
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(8);
|
|
368
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(16);
|
|
369
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(32);
|
|
370
|
+
XSIMD_RVV_MAKE_BOOL_TYPE(64);
|
|
371
|
+
#undef XSIMD_RVV_MAKE_BOOL_TYPE
|
|
372
|
+
#undef XSIMD_RVV_JOINT5
|
|
373
|
+
#undef XSIMD_RVV_JOINT
|
|
374
|
+
#undef XSIMD_RVV_JOINT_
|
|
375
|
+
|
|
376
|
+
template <class T, size_t Width>
|
|
377
|
+
struct rvv_bool
|
|
378
|
+
{
|
|
379
|
+
using bool_info = rvv_bool_info<rvv_width_m1 * sizeof(T) * 8 / Width>;
|
|
380
|
+
using storage_type = vuint8m1_t __attribute__((riscv_rvv_vector_bits(XSIMD_RVV_WIDTH_M1)));
|
|
381
|
+
using type = typename bool_info::type;
|
|
382
|
+
storage_type value;
|
|
383
|
+
rvv_bool() = default;
|
|
384
|
+
rvv_bool(type v) noexcept
|
|
385
|
+
: value(__riscv_vreinterpret_u8m1(v))
|
|
386
|
+
{
|
|
387
|
+
}
|
|
388
|
+
template <class U, typename std::enable_if<sizeof(T) == sizeof(U), int>::type = 0>
|
|
389
|
+
rvv_bool(rvv_bool<U, Width> v)
|
|
390
|
+
: value(v.value)
|
|
391
|
+
{
|
|
392
|
+
}
|
|
393
|
+
explicit rvv_bool(uint8_t mask) noexcept
|
|
394
|
+
: value(__riscv_vmv_v_x_u8m1(mask, rvv_width_m1 / 8))
|
|
395
|
+
{
|
|
396
|
+
}
|
|
397
|
+
explicit rvv_bool(uint64_t mask) noexcept
|
|
398
|
+
: value(__riscv_vreinterpret_v_u64m1_u8m1(__riscv_vmv_v_x_u64m1(mask, rvv_width_m1 / 64)))
|
|
399
|
+
{
|
|
400
|
+
}
|
|
401
|
+
operator type() const noexcept { return bool_info::bitcast(value); }
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
template <class T, size_t Width = XSIMD_RVV_BITS>
|
|
405
|
+
using rvv_bool_t = typename std::enable_if < !std::is_void<T>::value,
|
|
406
|
+
rvv_bool<rvv_fix_char_t<T>, Width<rvv_width_m1 ? rvv_width_m1 : Width>>::type;
|
|
407
|
+
|
|
408
|
+
template <size_t S>
|
|
409
|
+
struct rvv_vector_type_impl;
|
|
410
|
+
|
|
411
|
+
template <>
|
|
412
|
+
struct rvv_vector_type_impl<8>
|
|
413
|
+
{
|
|
414
|
+
using signed_type = rvv_reg_t<int8_t>;
|
|
415
|
+
using unsigned_type = rvv_reg_t<uint8_t>;
|
|
416
|
+
using floating_point_type = void;
|
|
417
|
+
};
|
|
418
|
+
|
|
419
|
+
template <>
|
|
420
|
+
struct rvv_vector_type_impl<16>
|
|
421
|
+
{
|
|
422
|
+
using signed_type = rvv_reg_t<int16_t>;
|
|
423
|
+
using unsigned_type = rvv_reg_t<uint16_t>;
|
|
424
|
+
using floating_point_type = rvv_reg_t<_Float16>;
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
template <>
|
|
428
|
+
struct rvv_vector_type_impl<32>
|
|
429
|
+
{
|
|
430
|
+
using signed_type = rvv_reg_t<int32_t>;
|
|
431
|
+
using unsigned_type = rvv_reg_t<uint32_t>;
|
|
432
|
+
using floating_point_type = rvv_reg_t<float>;
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
template <>
|
|
436
|
+
struct rvv_vector_type_impl<64>
|
|
437
|
+
{
|
|
438
|
+
using signed_type = rvv_reg_t<int64_t>;
|
|
439
|
+
using unsigned_type = rvv_reg_t<uint64_t>;
|
|
440
|
+
using floating_point_type = rvv_reg_t<double>;
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
template <class T>
|
|
444
|
+
using signed_int_rvv_vector_type = typename rvv_vector_type_impl<8 * sizeof(T)>::signed_type;
|
|
445
|
+
|
|
446
|
+
template <class T>
|
|
447
|
+
using unsigned_int_rvv_vector_type = typename rvv_vector_type_impl<8 * sizeof(T)>::unsigned_type;
|
|
448
|
+
|
|
449
|
+
template <class T>
|
|
450
|
+
using floating_point_rvv_vector_type = typename rvv_vector_type_impl<8 * sizeof(T)>::floating_point_type;
|
|
451
|
+
|
|
452
|
+
template <class T>
|
|
453
|
+
using signed_int_or_floating_point_rvv_vector_type = typename std::conditional<std::is_floating_point<T>::value,
|
|
454
|
+
floating_point_rvv_vector_type<T>,
|
|
455
|
+
signed_int_rvv_vector_type<T>>::type;
|
|
456
|
+
|
|
457
|
+
template <class T>
|
|
458
|
+
using rvv_vector_type = typename std::conditional<std::is_signed<T>::value,
|
|
459
|
+
signed_int_or_floating_point_rvv_vector_type<T>,
|
|
460
|
+
unsigned_int_rvv_vector_type<T>>::type;
|
|
461
|
+
} // namespace detail
|
|
462
|
+
|
|
463
|
+
XSIMD_DECLARE_SIMD_REGISTER(bool, rvv, detail::rvv_vector_type<unsigned char>);
|
|
464
|
+
XSIMD_DECLARE_SIMD_REGISTER(signed char, rvv, detail::rvv_vector_type<signed char>);
|
|
465
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned char, rvv, detail::rvv_vector_type<unsigned char>);
|
|
466
|
+
XSIMD_DECLARE_SIMD_REGISTER(char, rvv, detail::rvv_vector_type<char>);
|
|
467
|
+
XSIMD_DECLARE_SIMD_REGISTER(short, rvv, detail::rvv_vector_type<short>);
|
|
468
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned short, rvv, detail::rvv_vector_type<unsigned short>);
|
|
469
|
+
XSIMD_DECLARE_SIMD_REGISTER(int, rvv, detail::rvv_vector_type<int>);
|
|
470
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned int, rvv, detail::rvv_vector_type<unsigned int>);
|
|
471
|
+
XSIMD_DECLARE_SIMD_REGISTER(long int, rvv, detail::rvv_vector_type<long int>);
|
|
472
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned long int, rvv, detail::rvv_vector_type<unsigned long int>);
|
|
473
|
+
XSIMD_DECLARE_SIMD_REGISTER(long long int, rvv, detail::rvv_vector_type<long long int>);
|
|
474
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned long long int, rvv, detail::rvv_vector_type<unsigned long long int>);
|
|
475
|
+
XSIMD_DECLARE_SIMD_REGISTER(float, rvv, detail::rvv_vector_type<float>);
|
|
476
|
+
XSIMD_DECLARE_SIMD_REGISTER(double, rvv, detail::rvv_vector_type<double>);
|
|
477
|
+
|
|
478
|
+
namespace detail
|
|
479
|
+
{
|
|
480
|
+
template <class T>
|
|
481
|
+
struct rvv_bool_simd_register
|
|
482
|
+
{
|
|
483
|
+
using register_type = rvv_bool_t<T>;
|
|
484
|
+
register_type data;
|
|
485
|
+
operator register_type() const noexcept { return data; }
|
|
486
|
+
};
|
|
487
|
+
} // namespace detail
|
|
488
|
+
|
|
489
|
+
template <class T>
|
|
490
|
+
struct get_bool_simd_register<T, rvv>
|
|
491
|
+
{
|
|
492
|
+
using type = detail::rvv_bool_simd_register<T>;
|
|
493
|
+
};
|
|
494
|
+
} // namespace types
|
|
495
|
+
|
|
496
|
+
#undef XSIMD_RVV_WIDTH_MF8
|
|
497
|
+
#undef XSIMD_RVV_WIDTH_MF4
|
|
498
|
+
#undef XSIMD_RVV_WIDTH_MF2
|
|
499
|
+
#undef XSIMD_RVV_WIDTH_M1
|
|
500
|
+
|
|
501
|
+
#else
|
|
502
|
+
using rvv = detail::rvv<0xFFFFFFFF>;
|
|
503
|
+
#endif
|
|
504
|
+
} // namespace xsimd
|
|
505
|
+
|
|
506
|
+
#endif
|
|
@@ -0,0 +1,59 @@
|
|
|
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
|
+
#ifndef XSIMD_SSE2_REGISTER_HPP
|
|
13
|
+
#define XSIMD_SSE2_REGISTER_HPP
|
|
14
|
+
|
|
15
|
+
#include "./xsimd_common_arch.hpp"
|
|
16
|
+
#include "./xsimd_register.hpp"
|
|
17
|
+
|
|
18
|
+
#if XSIMD_WITH_SSE2
|
|
19
|
+
#include <emmintrin.h>
|
|
20
|
+
#include <xmmintrin.h>
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
namespace xsimd
|
|
24
|
+
{
|
|
25
|
+
/**
|
|
26
|
+
* @ingroup architectures
|
|
27
|
+
*
|
|
28
|
+
* SSE2 instructions
|
|
29
|
+
*/
|
|
30
|
+
struct sse2 : common
|
|
31
|
+
{
|
|
32
|
+
static constexpr bool supported() noexcept { return XSIMD_WITH_SSE2; }
|
|
33
|
+
static constexpr bool available() noexcept { return true; }
|
|
34
|
+
static constexpr bool requires_alignment() noexcept { return true; }
|
|
35
|
+
static constexpr std::size_t alignment() noexcept { return 16; }
|
|
36
|
+
static constexpr char const* name() noexcept { return "sse2"; }
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
#if XSIMD_WITH_SSE2
|
|
40
|
+
namespace types
|
|
41
|
+
{
|
|
42
|
+
XSIMD_DECLARE_SIMD_REGISTER(signed char, sse2, __m128i);
|
|
43
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned char, sse2, __m128i);
|
|
44
|
+
XSIMD_DECLARE_SIMD_REGISTER(char, sse2, __m128i);
|
|
45
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned short, sse2, __m128i);
|
|
46
|
+
XSIMD_DECLARE_SIMD_REGISTER(short, sse2, __m128i);
|
|
47
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned int, sse2, __m128i);
|
|
48
|
+
XSIMD_DECLARE_SIMD_REGISTER(int, sse2, __m128i);
|
|
49
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned long int, sse2, __m128i);
|
|
50
|
+
XSIMD_DECLARE_SIMD_REGISTER(long int, sse2, __m128i);
|
|
51
|
+
XSIMD_DECLARE_SIMD_REGISTER(unsigned long long int, sse2, __m128i);
|
|
52
|
+
XSIMD_DECLARE_SIMD_REGISTER(long long int, sse2, __m128i);
|
|
53
|
+
XSIMD_DECLARE_SIMD_REGISTER(float, sse2, __m128);
|
|
54
|
+
XSIMD_DECLARE_SIMD_REGISTER(double, sse2, __m128d);
|
|
55
|
+
}
|
|
56
|
+
#endif
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#endif
|
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
#ifndef XSIMD_SSE3_REGISTER_HPP
|
|
13
|
+
#define XSIMD_SSE3_REGISTER_HPP
|
|
14
|
+
|
|
15
|
+
#include "./xsimd_sse2_register.hpp"
|
|
16
|
+
|
|
17
|
+
#if XSIMD_WITH_SSE3
|
|
18
|
+
#include <pmmintrin.h>
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
namespace xsimd
|
|
22
|
+
{
|
|
23
|
+
/**
|
|
24
|
+
* @ingroup architectures
|
|
25
|
+
*
|
|
26
|
+
* SSE3 instructions
|
|
27
|
+
*/
|
|
28
|
+
struct sse3 : sse2
|
|
29
|
+
{
|
|
30
|
+
static constexpr bool supported() noexcept { return XSIMD_WITH_SSE3; }
|
|
31
|
+
static constexpr bool available() noexcept { return true; }
|
|
32
|
+
static constexpr char const* name() noexcept { return "sse3"; }
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
#if XSIMD_WITH_SSE3
|
|
36
|
+
|
|
37
|
+
#if !XSIMD_WITH_SSE2
|
|
38
|
+
#error "architecture inconsistency: sse3 requires sse2"
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
namespace types
|
|
42
|
+
{
|
|
43
|
+
|
|
44
|
+
XSIMD_DECLARE_SIMD_REGISTER_ALIAS(sse3, sse2);
|
|
45
|
+
}
|
|
46
|
+
#endif
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#endif
|
|
@@ -0,0 +1,48 @@
|
|
|
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
|
+
#ifndef XSIMD_SSE4_1_REGISTER_HPP
|
|
13
|
+
#define XSIMD_SSE4_1_REGISTER_HPP
|
|
14
|
+
|
|
15
|
+
#include "./xsimd_ssse3_register.hpp"
|
|
16
|
+
|
|
17
|
+
#if XSIMD_WITH_SSE4_1
|
|
18
|
+
#include <smmintrin.h>
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
namespace xsimd
|
|
22
|
+
{
|
|
23
|
+
/**
|
|
24
|
+
* @ingroup architectures
|
|
25
|
+
*
|
|
26
|
+
* SSE4.1 instructions
|
|
27
|
+
*/
|
|
28
|
+
struct sse4_1 : ssse3
|
|
29
|
+
{
|
|
30
|
+
static constexpr bool supported() noexcept { return XSIMD_WITH_SSE4_1; }
|
|
31
|
+
static constexpr bool available() noexcept { return true; }
|
|
32
|
+
static constexpr char const* name() noexcept { return "sse4.1"; }
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
#if XSIMD_WITH_SSE4_1
|
|
36
|
+
|
|
37
|
+
#if !XSIMD_WITH_SSSE3
|
|
38
|
+
#error "architecture inconsistency: sse4.1 requires ssse3"
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
namespace types
|
|
42
|
+
{
|
|
43
|
+
XSIMD_DECLARE_SIMD_REGISTER_ALIAS(sse4_1, ssse3);
|
|
44
|
+
}
|
|
45
|
+
#endif
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#endif
|