v15.7.0
What's Changed
- Update doc switcher & readme doc by @leehart in #844
- Stabilize CI matrix and pin NumPy baseline to 1.26.4 by @adilraza99 in #855
- Document error bars behavior in ag3.plot_frequencies_time_series by @adilraza99 in #851
- Fix broken documentation URL for Anopheles gambiae surveillance project by @adilraza99 in #862
- Poetry locked by @jonbrenas in #865
- Move tests using non-simulated data on merge to master by @ahernank in #866
- Fix DOI citation link formatting in README by @adilraza99 in #858
- fix: replace mutable default arguments with None in CNV plot functions by @PaulaYaniz in #884
- Add comprehensive CONTRIBUTING.md guide for new contributors by @adilraza99 in #860
- replacing old '%' with newer f-string by @blankirigaya in #891
- fix: use _gff_gene_name_attribute in _transcript_to_parent_name (#883) by @31puneet in #887
- Fix hardcoded gene type and name attribute in test_plot_genes_with_ge… by @31puneet in #875
- Fix g123 test failures on Adir1/Amin1 by falling back to segregating sites when no phasing analysis is available by @blankirigaya in #870
- Ag3.plot frequencies time series by @blankirigaya in #906
- Add AI-use policy by @jonbrenas in #872
- Fix lstrip column corruption in plot_frequencies_heatmap() by @31puneet in #898
- Update contact details in
pyproject.tomlby @jonbrenas in #871 - Fix deprecated Plotly API calls in anoph (Mapbox and Trace methods) by @NgangaKamau3 in #889
- Fix path joining for Windows compatibility in PlasmodiumDataResource by @muien5080 in #909
- fix(tests): handle missing sex_call in diplotype clustering tests for Amin1/Adir1 by @adilraza99 in #888
- Add describe_api() method for API introspection (#903) by @mandeepsingh2007 in #904
- Pin pandas to 2.3.2 by @jwgarber in #943
- fix: use min_clip parameter for y-axis lower bound in plot_fst_gwss_track by @Tanisha127 in #910
- ci: upgrade latest_docs.yml to use Node.js 20 by @Tanisha127 in #931
- Improve transparency by warning when max_cohort_size triggers downsampling by @adilraza99 in #930
- fix: validate aims param early in plot_aim_heatmap for clearer error message by @Tanisha127 in #961
- feat: add consistent aim_species colors in plot_pca_coords by @Tanisha127 in #962
- Fix Fst Z-score calculation when standard error is zero by @adilraza99 in #948
- Fix duplicate intermediate node generation in _mjn_graph by @31puneet in #924
- fix: dedent empty-data check in cnv_discordant_read_calls (#777) by @AswaniSahoo in #895
- Normalize site_mask in g123_gwss cache parameters and bump cache version by @adilraza99 in #966
- Fix unbounded _cache_locate_site_class growth and instance retention via class-level lru_cache by @suhr25 in #967
- Add github action for installing python and poetry consistently by @jwgarber in #958
- Guard against invalid jackknife block sizing when n_jack exceeds site count by @adilraza99 in #911
- feat: add "lower triangle" annotation option to plot_pairwise_average_fst (#820) by @AswaniSahoo in #969
- Add SYNONYMOUS_STOP and SYNONYMOUS_START effect classifications (fixes #953) by @ZiadXI in #954
- Fix CI warnings and restore test coverage for PR #817 by @adilraza99 in #942
- add advanced haplotype clustering by @sanjaynagi in #817
- Return NaN for empty windows in G123 and H12 statistics by @adilraza99 in #977
- fix: guard against free basemap providers going out of service (#446) by @blankirigaya in #952
- refactor: replace manual cache pattern with cached_property for _snp_effect_annotator (#469) by @Tanisha127 in #972
- Add filter_unassigned parameter to _prep_samples_for_cohort_grouping by @shauryam2807 in #983
- Fix: remove stray
fin ValueError messages by @suhr25 in #980 - Fix wrong type annotation for sample_query_options in average_fst by @rehanxt5 in #988
- Fix: Replace TODO Strings With Proper Variant Effect Values in veff.py by @blankirigaya in #917
- fix: add guard for empty array in g123 when window_size exceeds avail by @31puneet in #937
- Fix: Implement Abstract Cache Name Properties in All Subclasses by @blankirigaya in #901
- refactor: standardise biallelic diplotypes and handling of missing calls by @Tanisha127 in #975
- Fix simplecache storage location being ignored for chained GCS URLs by @blankirigaya in #935
- Fix raw string in cohort_diversity_stats error message by @suhr25 in #1007
- Fix wrong denominator in max_missing_an fraction filter (closes #998) by @rehanxt5 in #1000
- Fix contig variable shadowing in H12 overlay plot by @adilraza99 in #994
- Make random anoph testing data reproducible by @jwgarber in #1008
- Fix handling of missing terms-of-use metadata in sample set manifest (#766) by @adilraza99 in #990
- ci: configure codecov patch coverage threshold by @Sharon-codes in #1013
- Fix/h12 multi panel param forwarding by @shauryam2807 in #1001
- Fix TypeError for single-exon transcripts in veff.Annotator.get_children by @Vedag812 in #873
- Fix stray f in error message f-strings (closes #985) by @rehanxt5 in #986
- ci: verify tests against locked and latest supported NumPy versions by @Sharon-codes in #1023
- Forward sample_query_options in pairwise_average_fst (closes #995) by @rehanxt5 in #996
- Add Grantham and Sneath amino acid distance metrics to SNP effects (closes #115) by @ZiadXI in #922
- Adding limited support for Adar by @jonbrenas in #1032
- build: allow bokeh >=3.7 and restore mypy compatibility by @Sharon-codes in #1012
- CNV: rename cnv_discordant_read_calls parameter from contig to contigs by @Sharon-codes in #1021
- fix: return NaN confidence intervals when cohort size is zero by @adilraza99 in #1011
- fix: use per-sample denominator for CNV frequencies when nobs_mode="fixed" by @adilraza99 in #1006
- fix: replace bare asserts in veff.py with explicit ValueError exceptions by @suhaan-24 in #1034
- refactor: extract AnophelesHetAnalysis into anoph/heterozygosity.py by @31puneet in #944
- feat: add results caching to cohort_diversity_stats by @Sharon-codes in #1014
- Issue 435 cohort group metadata by @Sharon-codes in #1016
- Revert "Issue 435 cohort group metadata" by @jonbrenas in #1048
- docs: add macOS developer setup guide by @PaulaYaniz in #885
- fix: prevent logging handler accumulation in LoggingHelper by @suhr25 in #949
- Fix plot_frequencies_time_series reading wrong cohort after filtering by @blankirigaya in #879
- fix: guard CI variable access in plot_frequencies_time_series and plo… by @adilraza99 in #1037
- Fix broken DOI link and docstring typos by @Vedag812 in #874
- docs: fix spelling typo in index.rst by @GitGautamHub in #892
- Fix incorrect cache key in ihs_gwss to prevent cache collisions by @blankirigaya in #896
- fix: handle None variant in plot_frequencies_map_markers widget callback by @blankirigaya in #908
- Fix #778: descriptive errors in njt/plot_njt for insufficient data by @bleedblack1 in #921
- test: fix CNV variant_query interpolation by @Flamki in #928
- Improvements to contributing guide by @jwgarber in #927
- Set lower default wheel zoom sensitivity for haplotype networks by @blankirigaya in #934
- GH770: support list of regions in average_fst and pairwise_average_fst by @ritoban23 in #973
- test(cnv): stabilise simulated high-variance sampling by @Sharon-codes in #1027
- Fix: use af1 instead of ag3 in Af1 notebook section by @star-lord1234 in #1116
- Add cohort_geometries() to access cohort GeoJSON metadata by @adilraza99 in #1053
- Improve robustness of cohorts() metadata access by @adilraza99 in #1052
- Fix LoggingHelper.set_level() not updating logger level by @suhr25 in #1047
- fix: validate area_by column in _prep_samples_for_cohort_grouping by @suhr25 in #1140
- fix: warn when sample_query returns 0 results due to case mismatch by @khushthecoder in #1103
- docs: document year=-1/month=-1 sentinel values for lab cross samples by @khushthecoder in #1104
- fix: migrate dev/test/docs tooling from Poetry extras to dependency groups by @khushthecoder in #1136
- fix: validate taxon_by column to raise ValueError instead of KeyError by @suhr25 in #1143
- fix: improve error handling for invalid pandas queries in _locate_cohorts() by @suhr25 in #1144
- fix: correct pipx link in CONTRIBUTING.md (#1120) by @khushthecoder in #1145
- Fix #1064: Return empty DataFrame instead of raising ValueError in aa… by @khushthecoder in #1147
- Clarify comment: NON_SYNONYMOUS_START/STOP already covered by existing effects by @ZiadXI in #1046
- fix: replace
print()statements withwarnings.warn()in production code by @suhaan-24 in #1050 - feat: add arc and chord diagrams for haplotype sharing (#457, #458) by @31puneet in #989
- Optimization: Replace slow DataFrame apply() iterations with vectorized operations for metadata loading by @khushthecoder in #1155
- Fix #1056: Decode URL-escaped paths for local filesystems by @khushthecoder in #1146
- Fix Google Colab dependency conflicts for malariagen_data by @joshitha1808 in #1009
- feat: add public sample_count_het() and cohort_heterozygosity() methods (#775) by @Tanisha127 in #1077
- Fix: add sample_indices parameter to count_samples, plot_samples_interactive_map, plot_samples_bar, plot_sample_location_geo by @noir4201 in #1127
- Fix #1160: Replace broad except Exception with specific exception typ… by @khushthecoder in #1161
- Update test_ag3.py by @jonbrenas in #1166
- Fix #1162: Always return figure objects from plot_* methods by @khushthecoder in #1163
- Fix #1113: Hash content-affecting selection params into PLINK export … by @khushthecoder in #1158
- Fix #1108: Replace truthiness checks with explicit None checks in gen… by @khushthecoder in #1150
- Fix #940: Replace truthiness checks with explicit None checks for reg… by @khushthecoder in #1149
- fix: raise clear error when all cohorts are filtered out in _setup_cohort_queries by @suhr25 in #1148
- fix: prevent axis flipping in plot_h12_calibration by adding bounds by @joshitha1808 in #1018
- feat: allow snp_allele_frequencies to accept genomic regions by @joshitha1808 in #1076
- fix: replace assert isinstance with explicit type validation by @kunal-10-cloud in #1192
- feat: Add canonical_transcript() method by @kunal-10-cloud in #1196
- docs: add missing parameter docs for taxa and areas in plot_frequencies_time_series by @isobelnolan in #1173
- Fix unbounded genome cache memory leak in Annotator by @kunal-10-cloud in #1190
- Refactor: Move hardcoded species-specific parameters to SpeciesConfig by @khushthecoder in #1195
- test: add comprehensive unit tests for veff.py Annotator by @kunal-10-cloud in #1188
- fix: resolve roh_hmm cache name safely (GH-1151) by @khushthecoder in #1193
- fix: make _jitter() accept optional random_state parameter (#1217) by @khushthecoder in #1218
- fix: restore gene_names parameter passing to AnophelesGenomeFeaturesData by @khushthecoder in #1210
- Add
__repr__toRegionandCacheMissutility classes (fixes #1219) by @Yashsingh045 in #1220 - Add Windows development setup guide for first-time contributors by @aman-dev-maker in #1112
- perf: vectorize cohort_heterozygosity() for 10-50x speedup by @kunal-10-cloud in #1212
- fix: replace NotImplementedError in _surveillance_flags with graceful fallback by @khushthecoder in #1207
- refactor: narrow overly broad except Exception catches to specific exception types by @kunal-10-cloud in #1226
- Fix fragile cache name property pattern for _xpehh_gwss_cache_name and _ihs_gwss_cache_name by @kunal-10-cloud in #1199
- Add pytest configuration to pyproject.toml by @kunal-10-cloud in #1232
- Add VCF export support for SNP call datasets by @adilraza99 in #1071
- Add type annotations to
snp_data.py(AnophelesSnpData) by @Yashsingh045 in #1222 - Seed random and numpy.random in test suite by @Yashsingh045 in #1224
- Standardize test suite randomization using np.random by @Yashsingh045 in #1240
- Add LD-pruned biallelic SNP access method by @adilraza99 in #1130
- Fix broken image URLs in documentation by @Yashsingh045 in #1250
- fix: migrate _check_types from typeguard to pydantic validate_call by @31puneet in #1040
- Vectorize most-common genotype imputation in PCA by @Sashreekkumar in #1239
- Add DEBIAN_SETUP.md to support Debian and WSL environments (Fixes #1091) by @Schronding in #1099
- Remove Sanger S3 URL from Pf8 by @nw20 in #1233
- Adding Pf9 functionality by @nw20 in #1236
- fix: version switcher dropdown overflow on smaller screens (#578) by @Tanisha127 in #1271
- Use the pivot table directly for taxa by @jonbrenas in #1269
- Fix/replace asserts with runtime validation by @khushthecoder in #1260
- fix: enforce LRU eviction for _cache_locate_site_class (fixes #1276) by @khushthecoder in #1277
New Contributors
- @adilraza99 made their first contribution in #855
- @PaulaYaniz made their first contribution in #884
- @blankirigaya made their first contribution in #891
- @31puneet made their first contribution in #887
- @NgangaKamau3 made their first contribution in #889
- @muien5080 made their first contribution in #909
- @mandeepsingh2007 made their first contribution in #904
- @jwgarber made their first contribution in #943
- @Tanisha127 made their first contribution in #910
- @AswaniSahoo made their first contribution in #895
- @suhr25 made their first contribution in #967
- @ZiadXI made their first contribution in #954
- @shauryam2807 made their first contribution in #983
- @rehanxt5 made their first contribution in #988
- @Sharon-codes made their first contribution in #1013
- @Vedag812 made their first contribution in #873
- @suhaan-24 made their first contribution in #1034
- @GitGautamHub made their first contribution in #892
- @bleedblack1 made their first contribution in #921
- @Flamki made their first contribution in #928
- @ritoban23 made their first contribution in #973
- @star-lord1234 made their first contribution in #1116
- @khushthecoder made their first contribution in #1103
- @joshitha1808 made their first contribution in #1009
- @noir4201 made their first contribution in #1127
- @kunal-10-cloud made their first contribution in #1192
- @isobelnolan made their first contribution in #1173
- @Yashsingh045 made their first contribution in #1220
- @aman-dev-maker made their first contribution in #1112
- @Sashreekkumar made their first contribution in #1239
- @Schronding made their first contribution in #1099
Full Changelog: v15.6.0...v15.7.0