sequenzo 0.1.21__cp311-cp311-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of sequenzo might be problematic. Click here for more details.
- sequenzo/__init__.py +240 -0
- sequenzo/big_data/__init__.py +12 -0
- sequenzo/big_data/clara/__init__.py +26 -0
- sequenzo/big_data/clara/clara.py +467 -0
- sequenzo/big_data/clara/utils/__init__.py +27 -0
- sequenzo/big_data/clara/utils/aggregatecases.py +92 -0
- sequenzo/big_data/clara/utils/davies_bouldin.py +91 -0
- sequenzo/big_data/clara/utils/get_weighted_diss.cpython-311-darwin.so +0 -0
- sequenzo/big_data/clara/utils/wfcmdd.py +205 -0
- sequenzo/big_data/clara/visualization.py +88 -0
- sequenzo/clustering/KMedoids.py +196 -0
- sequenzo/clustering/__init__.py +30 -0
- sequenzo/clustering/clustering_c_code.cpython-311-darwin.so +0 -0
- sequenzo/clustering/hierarchical_clustering.py +1380 -0
- sequenzo/clustering/src/KMedoid.cpp +262 -0
- sequenzo/clustering/src/PAM.cpp +236 -0
- sequenzo/clustering/src/PAMonce.cpp +234 -0
- sequenzo/clustering/src/cluster_quality.cpp +496 -0
- sequenzo/clustering/src/cluster_quality.h +128 -0
- sequenzo/clustering/src/cluster_quality_backup.cpp +570 -0
- sequenzo/clustering/src/module.cpp +228 -0
- sequenzo/clustering/src/weightedinertia.cpp +111 -0
- sequenzo/clustering/utils/__init__.py +27 -0
- sequenzo/clustering/utils/disscenter.py +122 -0
- sequenzo/data_preprocessing/__init__.py +20 -0
- sequenzo/data_preprocessing/helpers.py +256 -0
- sequenzo/datasets/__init__.py +41 -0
- sequenzo/datasets/biofam.csv +2001 -0
- sequenzo/datasets/biofam_child_domain.csv +2001 -0
- sequenzo/datasets/biofam_left_domain.csv +2001 -0
- sequenzo/datasets/biofam_married_domain.csv +2001 -0
- sequenzo/datasets/chinese_colonial_territories.csv +12 -0
- sequenzo/datasets/country_co2_emissions.csv +194 -0
- sequenzo/datasets/country_co2_emissions_global_deciles.csv +195 -0
- sequenzo/datasets/country_co2_emissions_global_quintiles.csv +195 -0
- sequenzo/datasets/country_co2_emissions_local_deciles.csv +195 -0
- sequenzo/datasets/country_co2_emissions_local_quintiles.csv +195 -0
- sequenzo/datasets/country_gdp_per_capita.csv +194 -0
- sequenzo/datasets/mvad.csv +713 -0
- sequenzo/datasets/pairfam_family.csv +1867 -0
- sequenzo/datasets/polyadic_samplec1.csv +61 -0
- sequenzo/datasets/polyadic_samplep1.csv +61 -0
- sequenzo/datasets/polyadic_seqc1.csv +61 -0
- sequenzo/datasets/polyadic_seqp1.csv +61 -0
- sequenzo/define_sequence_data.py +609 -0
- sequenzo/dissimilarity_measures/__init__.py +31 -0
- sequenzo/dissimilarity_measures/c_code.cpython-311-darwin.so +0 -0
- sequenzo/dissimilarity_measures/get_distance_matrix.py +702 -0
- sequenzo/dissimilarity_measures/get_substitution_cost_matrix.py +241 -0
- sequenzo/dissimilarity_measures/src/DHDdistance.cpp +148 -0
- sequenzo/dissimilarity_measures/src/LCPdistance.cpp +114 -0
- sequenzo/dissimilarity_measures/src/OMdistance.cpp +247 -0
- sequenzo/dissimilarity_measures/src/OMspellDistance.cpp +281 -0
- sequenzo/dissimilarity_measures/src/__init__.py +0 -0
- sequenzo/dissimilarity_measures/src/dist2matrix.cpp +63 -0
- sequenzo/dissimilarity_measures/src/dp_utils.h +160 -0
- sequenzo/dissimilarity_measures/src/module.cpp +34 -0
- sequenzo/dissimilarity_measures/src/setup.py +30 -0
- sequenzo/dissimilarity_measures/src/utils.h +25 -0
- sequenzo/dissimilarity_measures/src/xsimd/.github/cmake-test/main.cpp +6 -0
- sequenzo/dissimilarity_measures/src/xsimd/benchmark/main.cpp +159 -0
- sequenzo/dissimilarity_measures/src/xsimd/benchmark/xsimd_benchmark.hpp +565 -0
- sequenzo/dissimilarity_measures/src/xsimd/docs/source/conf.py +37 -0
- sequenzo/dissimilarity_measures/src/xsimd/examples/mandelbrot.cpp +330 -0
- sequenzo/dissimilarity_measures/src/xsimd/examples/pico_bench.hpp +246 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_arithmetic.hpp +266 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_complex.hpp +112 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_details.hpp +323 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_logical.hpp +218 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_math.hpp +2583 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_memory.hpp +880 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_rounding.hpp +72 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_swizzle.hpp +174 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/common/xsimd_common_trigo.hpp +978 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx.hpp +1924 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx2.hpp +1144 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512bw.hpp +656 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512cd.hpp +28 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512dq.hpp +244 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512er.hpp +20 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512f.hpp +2650 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512ifma.hpp +20 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512pf.hpp +20 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi.hpp +77 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vbmi2.hpp +131 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512bw.hpp +20 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avx512vnni_avx512vbmi2.hpp +20 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_avxvnni.hpp +20 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common.hpp +24 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_common_fwd.hpp +77 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_constants.hpp +393 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_emulated.hpp +788 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx.hpp +93 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_avx2.hpp +46 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma3_sse.hpp +97 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_fma4.hpp +92 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_i8mm_neon64.hpp +17 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_isa.hpp +142 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon.hpp +3142 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_neon64.hpp +1543 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_rvv.hpp +1513 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_scalar.hpp +1260 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse2.hpp +2024 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse3.hpp +67 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_1.hpp +339 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sse4_2.hpp +44 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_ssse3.hpp +186 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_sve.hpp +1155 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_vsx.hpp +892 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/arch/xsimd_wasm.hpp +1780 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_arch.hpp +240 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_config.hpp +484 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_cpuid.hpp +269 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/config/xsimd_inline.hpp +27 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/math/xsimd_rem_pio2.hpp +719 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp +349 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/memory/xsimd_alignment.hpp +91 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_all_registers.hpp +55 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_api.hpp +2765 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx2_register.hpp +44 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512bw_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512cd_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512dq_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512er_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512f_register.hpp +77 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512ifma_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512pf_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi2_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vbmi_register.hpp +51 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512bw_register.hpp +54 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx512vnni_avx512vbmi2_register.hpp +53 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avx_register.hpp +64 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_avxvnni_register.hpp +44 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch.hpp +1524 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_batch_constant.hpp +300 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_common_arch.hpp +47 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_emulated_register.hpp +80 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx2_register.hpp +50 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_avx_register.hpp +50 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma3_sse_register.hpp +50 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_fma4_register.hpp +50 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_i8mm_neon64_register.hpp +55 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon64_register.hpp +55 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_neon_register.hpp +154 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_register.hpp +94 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_rvv_register.hpp +506 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse2_register.hpp +59 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse3_register.hpp +49 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_1_register.hpp +48 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sse4_2_register.hpp +48 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_ssse3_register.hpp +48 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_sve_register.hpp +156 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_traits.hpp +337 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_utils.hpp +536 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_vsx_register.hpp +77 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/types/xsimd_wasm_register.hpp +59 -0
- sequenzo/dissimilarity_measures/src/xsimd/include/xsimd/xsimd.hpp +75 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/architectures/dummy.cpp +7 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set.cpp +13 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean.cpp +24 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_aligned.cpp +25 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_arch_independent.cpp +28 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_tag_dispatch.cpp +25 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_abstract_batches.cpp +7 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/manipulating_parametric_batches.cpp +8 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum.hpp +31 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_avx2.cpp +3 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/sum_sse2.cpp +3 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/doc/writing_vectorized_code.cpp +11 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/main.cpp +31 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_api.cpp +230 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_arch.cpp +217 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_basic_math.cpp +183 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch.cpp +1049 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_bool.cpp +508 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_cast.cpp +409 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_complex.cpp +712 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_constant.cpp +286 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_float.cpp +141 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_int.cpp +365 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_batch_manip.cpp +308 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_bitwise_cast.cpp +222 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_exponential.cpp +226 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_hyperbolic.cpp +183 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_power.cpp +265 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_complex_trigonometric.cpp +236 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_conversion.cpp +248 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_custom_default_arch.cpp +28 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_error_gamma.cpp +170 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_explicit_batch_instantiation.cpp +32 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_exponential.cpp +202 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_extract_pair.cpp +92 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_fp_manipulation.cpp +77 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_gnu_source.cpp +30 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_hyperbolic.cpp +167 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_load_store.cpp +304 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_memory.cpp +61 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_poly_evaluation.cpp +64 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_power.cpp +184 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_rounding.cpp +199 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_select.cpp +101 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_shuffle.cpp +760 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.cpp +4 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_sum.hpp +34 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_traits.cpp +172 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_trigonometric.cpp +208 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_utils.hpp +611 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_wasm/test_wasm_playwright.py +123 -0
- sequenzo/dissimilarity_measures/src/xsimd/test/test_xsimd_api.cpp +1460 -0
- sequenzo/dissimilarity_measures/utils/__init__.py +16 -0
- sequenzo/dissimilarity_measures/utils/get_LCP_length_for_2_seq.py +44 -0
- sequenzo/dissimilarity_measures/utils/get_sm_trate_substitution_cost_matrix.cpython-311-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqconc.cpython-311-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqdss.cpython-311-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqdur.cpython-311-darwin.so +0 -0
- sequenzo/dissimilarity_measures/utils/seqlength.cpython-311-darwin.so +0 -0
- sequenzo/multidomain/__init__.py +23 -0
- sequenzo/multidomain/association_between_domains.py +311 -0
- sequenzo/multidomain/cat.py +431 -0
- sequenzo/multidomain/combt.py +519 -0
- sequenzo/multidomain/dat.py +89 -0
- sequenzo/multidomain/idcd.py +139 -0
- sequenzo/multidomain/linked_polyad.py +292 -0
- sequenzo/openmp_setup.py +233 -0
- sequenzo/prefix_tree/__init__.py +43 -0
- sequenzo/prefix_tree/individual_level_indicators.py +1274 -0
- sequenzo/prefix_tree/system_level_indicators.py +465 -0
- sequenzo/prefix_tree/utils.py +54 -0
- sequenzo/sequence_characteristics/__init__.py +40 -0
- sequenzo/sequence_characteristics/complexity_index.py +49 -0
- sequenzo/sequence_characteristics/overall_cross_sectional_entropy.py +220 -0
- sequenzo/sequence_characteristics/plot_characteristics.py +593 -0
- sequenzo/sequence_characteristics/simple_characteristics.py +311 -0
- sequenzo/sequence_characteristics/state_frequencies_and_entropy_per_sequence.py +39 -0
- sequenzo/sequence_characteristics/turbulence.py +155 -0
- sequenzo/sequence_characteristics/variance_of_spell_durations.py +86 -0
- sequenzo/sequence_characteristics/within_sequence_entropy.py +43 -0
- sequenzo/suffix_tree/__init__.py +48 -0
- sequenzo/suffix_tree/individual_level_indicators.py +1638 -0
- sequenzo/suffix_tree/system_level_indicators.py +456 -0
- sequenzo/suffix_tree/utils.py +56 -0
- sequenzo/visualization/__init__.py +29 -0
- sequenzo/visualization/plot_mean_time.py +194 -0
- sequenzo/visualization/plot_modal_state.py +276 -0
- sequenzo/visualization/plot_most_frequent_sequences.py +147 -0
- sequenzo/visualization/plot_relative_frequency.py +404 -0
- sequenzo/visualization/plot_sequence_index.py +937 -0
- sequenzo/visualization/plot_single_medoid.py +153 -0
- sequenzo/visualization/plot_state_distribution.py +613 -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.21.dist-info/METADATA +308 -0
- sequenzo-0.1.21.dist-info/RECORD +254 -0
- sequenzo-0.1.21.dist-info/WHEEL +5 -0
- sequenzo-0.1.21.dist-info/licenses/LICENSE +28 -0
- sequenzo-0.1.21.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@Author : Yuqi Liang, Xinyi Li
|
|
3
|
+
@File : overall_cross_sectional_entropy.py
|
|
4
|
+
@Time : 2025/9/15 21:52
|
|
5
|
+
@Desc : States frequency by time unit
|
|
6
|
+
|
|
7
|
+
The corresponding function name in TraMineR is seqstatd.R,
|
|
8
|
+
with the source code available at: https://github.com/cran/TraMineR/blob/master/R/seqstatd.R
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import numpy as np
|
|
12
|
+
import pandas as pd
|
|
13
|
+
from scipy.stats import entropy
|
|
14
|
+
from sequenzo.define_sequence_data import SequenceData
|
|
15
|
+
|
|
16
|
+
def get_cross_sectional_entropy(
|
|
17
|
+
seqdata: SequenceData,
|
|
18
|
+
weighted: bool = True,
|
|
19
|
+
norm: bool = True,
|
|
20
|
+
return_format: str = "tidy", # "tidy" | "wide" | "dict"
|
|
21
|
+
include_effective_states: bool = True,
|
|
22
|
+
add_topk: int = 1, # Mark top K dominant states at each time point
|
|
23
|
+
round_decimals: int = 6
|
|
24
|
+
):
|
|
25
|
+
"""
|
|
26
|
+
Cross-sectional state distribution by time with entropy and readable outputs.
|
|
27
|
+
|
|
28
|
+
What you get in a tidy format:
|
|
29
|
+
time state freq entropy per_time_entropy_norm N_valid rank is_top
|
|
30
|
+
1 A 0.645 0.380 0.380 2346.27 1 True
|
|
31
|
+
...
|
|
32
|
+
|
|
33
|
+
Additional metrics:
|
|
34
|
+
- per_time_entropy_norm: If norm=True, normalized by maximum entropy (|S|), range 0-1
|
|
35
|
+
- effective_states (H_effective): exp(H), equivalent "effective number of states"
|
|
36
|
+
- summary: Key interpretation points (entropy peaks/valleys, dominant state intervals, average entropy, etc.)
|
|
37
|
+
|
|
38
|
+
Parameters maintain your semantics, with new return_format, add_topk etc. for better interpretability.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
seqdata : SequenceData
|
|
43
|
+
A sequence object created by the SequenceData function.
|
|
44
|
+
weighted : bool, default True
|
|
45
|
+
If True, the frequencies are weighted by the number of non-missing values at each time unit.
|
|
46
|
+
norm : bool, default True
|
|
47
|
+
If True, the entropy is normalized by maximum possible entropy.
|
|
48
|
+
return_format : str, default "tidy"
|
|
49
|
+
Return format: "tidy" for long-form table, "wide" for matrices, "dict" for original dict format.
|
|
50
|
+
include_effective_states : bool, default True
|
|
51
|
+
If True, calculate effective number of states (exp(entropy)).
|
|
52
|
+
add_topk : int, default 1
|
|
53
|
+
Mark top K dominant states at each time point.
|
|
54
|
+
round_decimals : int, default 6
|
|
55
|
+
Number of decimal places for rounding.
|
|
56
|
+
|
|
57
|
+
Returns
|
|
58
|
+
-------
|
|
59
|
+
pd.DataFrame or dict
|
|
60
|
+
Depending on return_format:
|
|
61
|
+
- "tidy": Long-form DataFrame with interpretable columns
|
|
62
|
+
- "wide": Dict with frequency matrix, entropy series, etc.
|
|
63
|
+
- "dict": Original dict format (backward compatible)
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
if not isinstance(seqdata, SequenceData):
|
|
67
|
+
raise ValueError("[!] data is NOT a sequence object, see SequenceData.")
|
|
68
|
+
|
|
69
|
+
# Basic metadata
|
|
70
|
+
states_labels = list(seqdata.states) # Human-readable state labels
|
|
71
|
+
S = len(states_labels)
|
|
72
|
+
T = seqdata.seqdata.shape[1] # Number of time points
|
|
73
|
+
times = list(seqdata.seqdata.columns)
|
|
74
|
+
|
|
75
|
+
# Color attributes
|
|
76
|
+
cpal = seqdata.custom_colors
|
|
77
|
+
|
|
78
|
+
# Weights
|
|
79
|
+
# Also takes into account that in unweighted sequence objects created with
|
|
80
|
+
# older TraMineR versions the weights attribute is a vector of 1
|
|
81
|
+
# instead of NULL
|
|
82
|
+
w = seqdata.weights if seqdata.weights is not None else np.ones(seqdata.seqdata.shape[0])
|
|
83
|
+
if np.all(w == 1):
|
|
84
|
+
weighted = False
|
|
85
|
+
|
|
86
|
+
# Your data is usually encoded with 1..S; if internally already labels, we can map here
|
|
87
|
+
# For compatibility: build a "value -> row index" lookup table
|
|
88
|
+
# Try to support both numeric encoding (1..S) and labels themselves
|
|
89
|
+
value_to_row = {v: i for i, v in enumerate(range(1, S+1))}
|
|
90
|
+
label_to_row = {lab: i for i, lab in enumerate(states_labels)}
|
|
91
|
+
|
|
92
|
+
# Frequency matrix (S x T)
|
|
93
|
+
freq_counts = np.zeros((S, T), dtype=float)
|
|
94
|
+
|
|
95
|
+
for j in range(T):
|
|
96
|
+
col = seqdata.seqdata.iloc[:, j]
|
|
97
|
+
for i in range(S):
|
|
98
|
+
# Try both encoding and label matching
|
|
99
|
+
mask_num = (col == (i+1))
|
|
100
|
+
mask_lab = (col == states_labels[i])
|
|
101
|
+
mask = mask_num | mask_lab
|
|
102
|
+
if weighted:
|
|
103
|
+
freq_counts[i, j] = w[mask].sum()
|
|
104
|
+
else:
|
|
105
|
+
freq_counts[i, j] = mask.sum()
|
|
106
|
+
|
|
107
|
+
N_valid = freq_counts.sum(axis=0) # Valid weight/sample size per time point
|
|
108
|
+
with np.errstate(divide='ignore', invalid='ignore'):
|
|
109
|
+
P = np.divide(freq_counts, N_valid, where=(N_valid>0)) # Frequencies
|
|
110
|
+
|
|
111
|
+
# Entropy
|
|
112
|
+
H = np.array([entropy(P[:, j][P[:, j] > 0]) if N_valid[j] > 0 else 0.0 for j in range(T)])
|
|
113
|
+
|
|
114
|
+
if norm:
|
|
115
|
+
Hmax = entropy(np.ones(S) / S) if S > 0 else 1.0
|
|
116
|
+
H_norm = H / Hmax if Hmax > 0 else H
|
|
117
|
+
else:
|
|
118
|
+
H_norm = H
|
|
119
|
+
|
|
120
|
+
# Effective number of states (highly interpretable: equivalent "how many equiprobable states")
|
|
121
|
+
H_eff = np.exp(H) if include_effective_states else None
|
|
122
|
+
|
|
123
|
+
# Organize output: wide format
|
|
124
|
+
freq_df_wide = pd.DataFrame(P, index=states_labels, columns=times).round(round_decimals)
|
|
125
|
+
entropy_s = pd.Series(H_norm if norm else H, index=times, name=("per_time_entropy_norm" if norm else "Entropy")).round(round_decimals)
|
|
126
|
+
valid_s = pd.Series(N_valid, index=times, name="N_valid").round(round_decimals)
|
|
127
|
+
eff_s = (pd.Series(H_eff, index=times, name="Effective States").round(round_decimals)
|
|
128
|
+
if include_effective_states else None)
|
|
129
|
+
|
|
130
|
+
# Generate tidy table (interpretation-friendly)
|
|
131
|
+
tidy = (
|
|
132
|
+
freq_df_wide
|
|
133
|
+
.reset_index()
|
|
134
|
+
.melt(id_vars="index", var_name="time", value_name="freq")
|
|
135
|
+
.rename(columns={"index": "state"})
|
|
136
|
+
.sort_values(["time", "freq"], ascending=[True, False])
|
|
137
|
+
)
|
|
138
|
+
# Ranking + topK annotation
|
|
139
|
+
tidy["rank"] = tidy.groupby("time")["freq"].rank(method="first", ascending=False).astype(int)
|
|
140
|
+
if add_topk and add_topk > 0:
|
|
141
|
+
tidy["is_top"] = tidy["rank"] <= add_topk
|
|
142
|
+
else:
|
|
143
|
+
tidy["is_top"] = False
|
|
144
|
+
|
|
145
|
+
# Merge entropy/sample size/effective states
|
|
146
|
+
tidy = tidy.merge(entropy_s.reset_index().rename(columns={"index": "time"}), on="time", how="left")
|
|
147
|
+
tidy = tidy.merge(valid_s.reset_index().rename(columns={"index": "time"}), on="time", how="left")
|
|
148
|
+
if eff_s is not None:
|
|
149
|
+
tidy = tidy.merge(eff_s.reset_index().rename(columns={"index": "time"}), on="time", how="left")
|
|
150
|
+
|
|
151
|
+
# Friendly column order
|
|
152
|
+
cols = ["time", "state", "freq"]
|
|
153
|
+
if norm:
|
|
154
|
+
cols += ["per_time_entropy_norm"]
|
|
155
|
+
else:
|
|
156
|
+
cols += ["Entropy"]
|
|
157
|
+
cols += ["N_valid"]
|
|
158
|
+
if include_effective_states:
|
|
159
|
+
cols += ["Effective States"]
|
|
160
|
+
cols += ["rank", "is_top"]
|
|
161
|
+
tidy = tidy[cols]
|
|
162
|
+
|
|
163
|
+
# Summary: key statistics that can be explained in one sentence
|
|
164
|
+
summary = {
|
|
165
|
+
"states": states_labels,
|
|
166
|
+
"n_states": S,
|
|
167
|
+
"n_timepoints": T,
|
|
168
|
+
"avg_entropy_norm": float(tidy["per_time_entropy_norm"].mean()) if norm else None,
|
|
169
|
+
"avg_entropy": float((entropy_s if not norm else entropy_s * entropy(np.ones(S)/S)).mean()) if not norm else None,
|
|
170
|
+
"peak_entropy_time": tidy.loc[tidy["per_time_entropy_norm" if norm else "Entropy"].idxmax(), "time"] if T > 0 else None,
|
|
171
|
+
"lowest_entropy_time": tidy.loc[tidy["per_time_entropy_norm" if norm else "Entropy"].idxmin(), "time"] if T > 0 else None,
|
|
172
|
+
"dominant_stability_ratio": float(tidy.query("rank==1")["freq"].mean()), # Average proportion of dominant state
|
|
173
|
+
"cpal": cpal
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
# Print descriptive statistics
|
|
177
|
+
print("\n" + "="*70)
|
|
178
|
+
print("Cross-Sectional Entropy Summary")
|
|
179
|
+
print("="*70)
|
|
180
|
+
print(f"[>] Number of states: {summary['n_states']}")
|
|
181
|
+
print(f"[>] Number of time points: {summary['n_timepoints']}")
|
|
182
|
+
print(f"[>] On average, the most common state accounts for {summary['dominant_stability_ratio']:.1%} of cases")
|
|
183
|
+
print(f"[>] Entropy is highest at time point {summary['peak_entropy_time']}")
|
|
184
|
+
print(f"[>] Entropy is lowest at time point {summary['lowest_entropy_time']}")
|
|
185
|
+
if norm:
|
|
186
|
+
print(f"[>] Average normalized entropy: {summary['avg_entropy_norm']:.3f} (range: 0 = fully concentrated, 1 = evenly distributed)")
|
|
187
|
+
print("="*70 + "\n")
|
|
188
|
+
|
|
189
|
+
# Compatible with different return formats
|
|
190
|
+
if return_format == "tidy":
|
|
191
|
+
tidy.attrs = {"summary": summary}
|
|
192
|
+
return tidy
|
|
193
|
+
elif return_format == "wide":
|
|
194
|
+
out = {
|
|
195
|
+
"Frequencies": freq_df_wide,
|
|
196
|
+
"N_valid": valid_s,
|
|
197
|
+
("per_time_entropy_norm" if norm else "Entropy"): entropy_s
|
|
198
|
+
}
|
|
199
|
+
if eff_s is not None:
|
|
200
|
+
out["Effective States"] = eff_s
|
|
201
|
+
return out
|
|
202
|
+
else: # "dict" -- try to be more readable too
|
|
203
|
+
res = {
|
|
204
|
+
"Frequencies": freq_df_wide,
|
|
205
|
+
"ValidStates": valid_s,
|
|
206
|
+
"Entropy": entropy_s if not norm else None,
|
|
207
|
+
"per_time_entropy_norm": entropy_s if norm else None,
|
|
208
|
+
"Effective States": eff_s,
|
|
209
|
+
"__attrs__": {
|
|
210
|
+
"nbseq": float(valid_s.iloc[0]) if len(valid_s)>0 else None,
|
|
211
|
+
"cpal": cpal,
|
|
212
|
+
"xtlab": times,
|
|
213
|
+
"xtstep": getattr(seqdata, "xtstep", None),
|
|
214
|
+
"tick_last": getattr(seqdata, "tick_last", None),
|
|
215
|
+
"weighted": weighted,
|
|
216
|
+
"norm": norm,
|
|
217
|
+
"summary": summary
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return res
|