pav3 3.0.0.dev23__tar.gz → 3.0.1__tar.gz

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.
Files changed (147) hide show
  1. pav3-3.0.1/CHANGELOG.md +417 -0
  2. {pav3-3.0.0.dev23 → pav3-3.0.1}/CONTRIBUTING.md +2 -2
  3. pav3-3.0.1/PKG-INFO +279 -0
  4. pav3-3.0.1/README.md +238 -0
  5. {pav3-3.0.0.dev23 → pav3-3.0.1}/pyproject.toml +15 -16
  6. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/__init__.py +11 -3
  7. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/lcmodel/_util.py +12 -5
  8. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/lift.py +4 -0
  9. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/op.py +6 -6
  10. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/records.py +2 -0
  11. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/tables.py +67 -7
  12. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/trim.py +34 -13
  13. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/anno.py +1 -1
  14. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/call/integrate.py +123 -0
  15. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/cli/__init__.py +11 -1
  16. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/cli/_cli.py +50 -9
  17. pav3-3.0.1/src/pav3/cli/_common_opt.py +161 -0
  18. pav3-3.0.1/src/pav3/cli/_lift_cli.py +139 -0
  19. pav3-3.0.1/src/pav3/cli/_returncode.py +82 -0
  20. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/cli/_subcommand_batch.py +1 -1
  21. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/cli/_subcommand_call.py +3 -3
  22. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/cli/_subcommand_license.py +3 -2
  23. pav3-3.0.1/src/pav3/cli/_subcommand_lift.py +100 -0
  24. pav3-3.0.1/src/pav3/cli/_subcommand_maketable.py +106 -0
  25. pav3-3.0.1/src/pav3/cli/_subcommand_subseq.py +117 -0
  26. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/const.py +25 -18
  27. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/tracks/alignment_track_fields.tsv +27 -23
  28. pav3-3.0.1/src/pav3/data/tracks/variant_track_fields.tsv +41 -0
  29. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/workflow/Snakefile +4 -4
  30. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/workflow/rules/align.smk +125 -127
  31. pav3-3.0.1/src/pav3/data/workflow/rules/call.smk +749 -0
  32. pav3-3.0.1/src/pav3/data/workflow/rules/data.smk +133 -0
  33. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/workflow/rules/tracks.smk +27 -23
  34. pav3-3.0.1/src/pav3/errors.py +33 -0
  35. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/fig/tracks.py +239 -51
  36. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/fig/util.py +5 -3
  37. pav3-3.0.1/src/pav3/format.py +122 -0
  38. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/call.py +4 -2
  39. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/interval.py +37 -3
  40. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/variant.py +262 -32
  41. pav3-3.0.1/src/pav3/lift/__init__.py +75 -0
  42. pav3-3.0.1/src/pav3/lift/errors.py +35 -0
  43. pav3-3.0.1/src/pav3/lift/output.py +516 -0
  44. pav3-3.0.1/src/pav3/lift/run.py +332 -0
  45. pav3-3.0.1/src/pav3/lift/source.py +422 -0
  46. pav3-3.0.1/src/pav3/lift/source_table.py +278 -0
  47. pav3-3.0.1/src/pav3/maketable.py +450 -0
  48. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/params.py +102 -7
  49. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/pipeline.py +109 -11
  50. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/schema.py +82 -12
  51. pav3-3.0.1/src/pav3/vcf.py +1850 -0
  52. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/workflow/__init__.py +2 -0
  53. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/workflow/call.py +140 -29
  54. pav3-3.0.1/src/pav3/workflow/perf.py +1017 -0
  55. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/workflow/resource.py +2 -2
  56. pav3-3.0.1/src/pav3.egg-info/PKG-INFO +279 -0
  57. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3.egg-info/SOURCES.txt +32 -1
  58. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3.egg-info/requires.txt +5 -4
  59. pav3-3.0.1/tests/align/test_trim.py +167 -0
  60. pav3-3.0.1/tests/call/test_derived_seq.py +174 -0
  61. pav3-3.0.1/tests/call/test_ins_derived.py +133 -0
  62. pav3-3.0.1/tests/cli/test_maketable.py +502 -0
  63. pav3-3.0.1/tests/lgsv/test_off_target.py +175 -0
  64. pav3-3.0.1/tests/lgsv/test_query_region.py +292 -0
  65. pav3-3.0.1/tests/lift/conftest.py +53 -0
  66. pav3-3.0.1/tests/lift/test_lift.py +197 -0
  67. pav3-3.0.1/tests/lift/test_subseq.py +201 -0
  68. pav3-3.0.1/tests/test_anno.py +60 -0
  69. pav3-3.0.1/tests/test_params.py +72 -0
  70. pav3-3.0.1/tests/test_pipeline_config.py +137 -0
  71. pav3-3.0.1/tests/test_vcf_cpx.py +206 -0
  72. pav3-3.0.1/tests/test_vcf_fields.py +254 -0
  73. pav3-3.0.1/tests/test_vcf_multiallelic.py +232 -0
  74. pav3-3.0.1/tests/workflow/test_perf.py +173 -0
  75. {pav3-3.0.0.dev23 → pav3-3.0.1}/tox.toml +1 -3
  76. pav3-3.0.0.dev23/CHANGELOG.md +0 -37
  77. pav3-3.0.0.dev23/PKG-INFO +0 -195
  78. pav3-3.0.0.dev23/README.md +0 -170
  79. pav3-3.0.0.dev23/src/pav3/cli/_common_opt.py +0 -41
  80. pav3-3.0.0.dev23/src/pav3/data/tracks/variant_track_fields.tsv +0 -37
  81. pav3-3.0.0.dev23/src/pav3/data/workflow/rules/call.smk +0 -684
  82. pav3-3.0.0.dev23/src/pav3/data/workflow/rules/data.smk +0 -136
  83. pav3-3.0.0.dev23/src/pav3/vcf.py +0 -1150
  84. pav3-3.0.0.dev23/src/pav3.egg-info/PKG-INFO +0 -195
  85. {pav3-3.0.0.dev23 → pav3-3.0.1}/CODE_OF_CONDUCT.md +0 -0
  86. {pav3-3.0.0.dev23 → pav3-3.0.1}/LICENSE +0 -0
  87. {pav3-3.0.0.dev23 → pav3-3.0.1}/MANIFEST.in +0 -0
  88. {pav3-3.0.0.dev23 → pav3-3.0.1}/setup.cfg +0 -0
  89. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/__main__.py +0 -0
  90. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/__init__.py +0 -0
  91. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/features.py +0 -0
  92. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/lcmodel/__init__.py +0 -0
  93. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/lcmodel/_lcmodel.py +0 -0
  94. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/lcmodel/_lcmodel_logistic.py +0 -0
  95. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/lcmodel/_lcmodel_null.py +0 -0
  96. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/align/score.py +0 -0
  97. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/call/__init__.py +0 -0
  98. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/call/expr.py +0 -0
  99. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/call/intra.py +0 -0
  100. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/call/util.py +0 -0
  101. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/default/model.json +0 -0
  102. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/human_95_80/model.json +0 -0
  103. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/human_95_80/model_info.tar.gz +0 -0
  104. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/human_95_80/weights.npz +0 -0
  105. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/human_98_80/model.json +0 -0
  106. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/human_98_80/model_info.tar.gz +0 -0
  107. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/human_98_80/weights.npz +0 -0
  108. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/prim_90_50/model.json +0 -0
  109. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/prim_90_50/model_info.tar.gz +0 -0
  110. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/prim_90_50/weights.npz +0 -0
  111. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/primdiv_85_50/model.json +0 -0
  112. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/primdiv_85_50/model_info.tar.gz +0 -0
  113. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/lcmodel/primdiv_85_50/weights.npz +0 -0
  114. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/workflow/profiles/pav_default/config.yaml +0 -0
  115. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/data/workflow/rules/pipeline.smk +0 -0
  116. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/dev/__init__.py +0 -0
  117. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/dev/imports.py +0 -0
  118. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/dev/inter.py +0 -0
  119. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/dev/path.py +0 -0
  120. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/dev/sm.py +0 -0
  121. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/dev/tables.py +0 -0
  122. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/fig/__init__.py +0 -0
  123. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/fig/const.py +0 -0
  124. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/fig/density.py +0 -0
  125. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/inv.py +0 -0
  126. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/io.py +0 -0
  127. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/kde.py +0 -0
  128. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/__init__.py +0 -0
  129. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/chain.py +0 -0
  130. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/io.py +0 -0
  131. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/region_kde.py +0 -0
  132. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/resources.py +0 -0
  133. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/lgsv/struct.py +0 -0
  134. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/region.py +0 -0
  135. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/seq.py +0 -0
  136. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3/util.py +0 -0
  137. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3.egg-info/dependency_links.txt +0 -0
  138. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3.egg-info/entry_points.txt +0 -0
  139. {pav3-3.0.0.dev23 → pav3-3.0.1}/src/pav3.egg-info/top_level.txt +0 -0
  140. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/TESTING_TODO.md +0 -0
  141. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/align/.gitkeep +0 -0
  142. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/align/test_score.py +0 -0
  143. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/align/test_tables.py +0 -0
  144. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/call/.gitkeep +0 -0
  145. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/cli/.gitkeep +0 -0
  146. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/conftest.py +0 -0
  147. {pav3-3.0.0.dev23 → pav3-3.0.1}/tests/lgsv/.gitkeep +0 -0
@@ -0,0 +1,417 @@
1
+ # Changelog
2
+
3
+ <!--
4
+ Style guide:
5
+ https://common-changelog.org/
6
+ -->
7
+
8
+ <!-- TEMPLATE
9
+ ## [x.y.z] - YYYY-MM-DD
10
+
11
+ ### Changed
12
+ -
13
+
14
+ ### Added
15
+ -
16
+
17
+ ### Removed
18
+ -
19
+
20
+ ### Fixed
21
+ -
22
+
23
+ -->
24
+
25
+ ## 3.0.1 - 2026-11-03
26
+
27
+ Updating dependencies
28
+
29
+ ### Changed
30
+ - Updated to agglovar release 1.0.0
31
+
32
+ ## 3.0.0 - 2026-10-28
33
+
34
+ _First stable release of PAV 3, listing changes since the last prerelease (3.0.0.dev26)._
35
+
36
+ ### Changed
37
+ - **Breaking:** Low-confidence alignment filtering (`LCALIGN`) is off by default (config parameter `lc_model`
38
+ defaults to `none`). It removed correct calls in highly diverged regions such as HLA class II. Set `lc_model` to
39
+ `default` for the previous behavior.
40
+ - **Breaking:** Alignment records with MAPQ below 20 are filtered by default (new config parameter `min_mapq`).
41
+ Their variants are filtered with `MAPQ`, and their regions are not callable. Low-MAPQ fragments in satellites and
42
+ repeats produced false calls that broke haplotype reconstruction from the VCF.
43
+ - **Breaking:** Haplotype merge defaults (`pav3.const.DEFAULT_MERGE_PARAMS`) for `insdel` and `cpx` merge only
44
+ matching alleles: same position and end, size and sequence identity of at least 0.998 for insertions and
45
+ deletions, and 0.98 for complex variants (with segment overlap 0.8). The previous population-style tolerances
46
+ merged different alleles from the two haplotypes into one homozygous record and moved variants up to 200 bp to the
47
+ other haplotype's position. Override with the new `merge_params` config parameter.
48
+ - **Breaking:** VCF records at the same position are combined into multi-allelic records when they have the same
49
+ filter and no haplotype carries more than one of them, so different alleles on two haplotypes are written as one
50
+ record (e.g. `1|2`) instead of two overlapping records (`1|0` and `0|1`).
51
+ - **Breaking:** Complex variants are written as sequence-resolved REF and ALT alleles by default. The record
52
+ replaces the reference bases skipped by the variant with the variant sequence, so applying it to the reference
53
+ (e.g. `bcftools consensus`) reconstructs the haplotype. Set `vcf_cpx_symbolic` to write `<CPX>` alleles.
54
+ - **Breaking:** VCF `INFO/SVLEN` is always positive. Deletions are no longer negated.
55
+ - **Breaking:** VCF `INFO/SVLEN` is written only for symbolic ALT alleles. VCF defines it for symbolic structural
56
+ variant alleles and directs writers to use the missing value for all others, where REF and ALT give the length.
57
+ Multi-allelic records combining an SNV with an indel carried `SVLEN=.,N`, which crashed Truvari, and htslib 1.22
58
+ sized sequence-resolved records by SVLEN.
59
+ - **Breaking:** VCF `INFO/END` and `INFO/SEQ` are written only for symbolic ALT alleles, where REF and ALT do not
60
+ carry the span or the sequence. `SEQ` is upper-cased to match REF and ALT, and is not written for derived
61
+ variants, where it does not describe the alternate allele.
62
+ - **Breaking:** VCF INFO values no longer contain literal commas, which VCF reserves as the value delimiter. `DUP`
63
+ separates regions with `/`, and `CPX_REF_TRACE` and `CPX_QRY_TRACE` drop thousands separators. The `trace_ref`
64
+ and `trace_qry` variant table columns are unchanged.
65
+ - **Breaking:** Tandem and inverted duplications are written as `<DUP:TANDEM>` and `<DUP:INVDUP>` rather than
66
+ `INFO/SUBTYPE`.
67
+ - **Breaking:** Replaced VCF `INFO/HOMREF` and `INFO/HOMQRY` with the reserved `INFO/HOMLEN`, summing upstream and
68
+ downstream homology from reference breakpoints for `DEL` and `DUP` and query breakpoints for `INS` and `CPX`.
69
+ - **Breaking:** Workflow targets are renamed for the output they build: `pav_all` to `vcf` (still the default),
70
+ `align_all` to `align`, `call_tables_all` to `call_tables`, `call_tables_hap_all` to `call_tables_hap`,
71
+ `tracks_all` to `tracks`, and `tracks_align_all` to `tracks_align`. The rules previously named `call_tables`,
72
+ `call_tables_callable`, and `tracks_align` are renamed `call_merge_haps`, `call_callable`, and
73
+ `tracks_align_trim`, so Snakemake profiles setting resources for them need the new names.
74
+ - **Breaking:** The assembly table is the first of `assemblies.csv`, `assemblies.xlsx`, and `assemblies.tsv` found
75
+ in the run directory (previously `assemblies.tsv`, then `assemblies.xlsx`). A run directory with more than one of
76
+ these files may read a different table.
77
+ - Tighter compliance with VCF 4.5.
78
+ - Complex variant tables have new columns `seq_ref_pos` and `seq_ref_end`, the reference region the variant
79
+ sequence replaces.
80
+ - VCF INFO headers declare an accurate `Number`. `END` is `Number=1` and `SVLEN` is `Number=A`, matching the
81
+ reserved keys; all others are `Number=A`. All were previously `Number=.`.
82
+ - Contig names embedded in VCF INFO values (`QUERY`, `DUP`, and the complex variant traces) are percent-encoded
83
+ where they contain `;`, `=`, `,`, `%`, a tab, or a line break, as VCF requires.
84
+ - VCF records are sorted in reference order, the order of the `##contig` header lines, rather than by chromosome
85
+ name (`chr1`, `chr10`, `chr2`). Tools validating records against the sequence dictionary (e.g. Picard) reject
86
+ other orders.
87
+ - VCF REF and ALT reduce IUPAC ambiguity codes to the base that is first alphabetically (e.g. `R` to `A`), as VCF
88
+ requires.
89
+ - The VCF header writes `##fileDate` instead of `##filedate`, and `##reference` as the reference file name instead
90
+ of a `file://` URI, which read the file name as a host name.
91
+ - Variant tracks report `.` for strand. The strand column was never set, and a variant carries no orientation of
92
+ the reference feature it is drawn on.
93
+ - The multi-allelic record summary is printed only with `verbose`, and its statistics are not computed otherwise.
94
+ - `pav3 --help` directs users to `batch` and lists `call` as deprecated.
95
+ - The README cites the PAV 3 preprint (https://doi.org/10.1101/2024.12.19.629504), is reorganized into install,
96
+ configuration, run, and output sections, and documents the workflow targets and the other `pav3` subcommands.
97
+
98
+ ### Added
99
+ - YAML configuration file `pav.yaml` (or `pav.yml`), accepting the same parameters as `pav.json`. PAV reads
100
+ `pav.json` only if no YAML configuration is found, and warns and uses the YAML configuration if both are present.
101
+ - Config parameters `min_mapq`, `merge_params`, and `vcf_cpx_symbolic`.
102
+ - VCF `INFO/SVCLAIM` is written as `J` for symbolic `DEL` and `DUP` alleles, which VCF requires. PAV calls these
103
+ from non-reference adjacencies rather than from a measure of DNA abundance.
104
+ - Duplications derived from insertions placing a copy of a reference region. A tandem-duplication insertion
105
+ derives a tandem duplication.
106
+ - Insertions over deleted reference bases and deletions with inserted bases now emit both variants instead of the
107
+ larger one alone. The smaller component was previously discarded, leaving an allele that reported no inserted
108
+ sequence.
109
+ - Documentation page describing the VCF output.
110
+ - Config parameter `perf_log` logs the CPU and memory usage of each rule from input assemblies to the VCF to
111
+ `log/perf/{asm_name}/{rule}_{wildcards}.parquet` (e.g. `log/perf/HG00171/call_intra_snv_insdel_h1.parquet`).
112
+ `true` takes a snapshot every 30 seconds, a positive integer sets the seconds between snapshots, and `false` or `0`
113
+ (default) disables it. The table is rewritten after every snapshot, so a job killed for exceeding its memory keeps
114
+ its samples. Adjunct rules (tracks, alignment depth) are not logged.
115
+ - Runtime dependencies PyYAML, for `pav.yaml`, and psutil, for `perf_log`.
116
+ - Workflow targets `callable`, the callable regions of each haplotype, and `tracks_var`, the variant tracks of each
117
+ haplotype.
118
+
119
+ ### Removed
120
+ - **Breaking:** Snakemake `benchmark` directives (`log/benchmark/`), replaced by `perf_log`.
121
+ - **Breaking:** VCF `INFO/SVTYPE`. VCF 4.5 deprecates it as redundant with ALT, which carries the type in the
122
+ symbolic allele or in the REF and ALT lengths.
123
+ - The `##FILTER=<ID=PASS>` header. VCF defines PASS implicitly.
124
+ - Workflow target `align_export_all`. It always failed in PAV 3, which does not yet implement the alignment export
125
+ rule it requires.
126
+
127
+ ### Fixed
128
+ - Alignment trimming truncated the passing alignment instead of the filtered one where a passing and a filtered
129
+ alignment overlapped (the filtered flag was inverted).
130
+ - Alignment trimming applied the left-aligning tie-break to alignments in opposite orientations instead of
131
+ alignments in the same orientation.
132
+ - Alignment trimming removed a passing alignment contained in a higher-scoring filtered alignment. The filtered
133
+ alignment is now removed.
134
+ - The haplotype merge dropped one of two variants with the same position, end, and length on one haplotype (e.g. a
135
+ 1 bp insertion and deletion at one site). Duplicates are now identified with the variant type and sequence.
136
+ - Symbolic VCF records (INV, DUP) had the first base of the variant as `REF` instead of the base at `POS`.
137
+ - VCF FORMAT keys and sample values were separated by `;` instead of `:`.
138
+ - An unknown `lc_model` name is an error instead of silently disabling LC filtering (path-like names) or raising an
139
+ unrelated import error (plain names).
140
+ - Variant IDs were duplicated when a variant merged into both the passing and non-passing haplotype merges. IDs
141
+ are now versioned across both merges rather than within each.
142
+ - Deletions derived from complex variants were written with an empty VCF `REF`.
143
+ - Insertions at a tandem duplication were written with `REF` matching `ALT`, encoding no variant.
144
+ - Writing a VCF now fails, naming the variants, if a record has an empty `REF`, an empty `ALT`, or a `REF`
145
+ matching its `ALT`.
146
+ - Query homology was read from the reference homology field.
147
+ - VCF `INFO/DUP` was dropped for variants duplicating an even number of regions.
148
+ - `DUP` and `CPX` records carried no `INFO/END`, so they indexed as 1 bp and could be missed by region queries.
149
+ - Large deletions reported an empty query region, which wrote `INFO/QUERY` as an inverted range. Deletions now
150
+ report a 1 bp query region at the breakpoint, matching intra-alignment deletions. Query homology is still
151
+ measured over the query region between the anchors.
152
+ - Complex variants reported the query region between the untrimmed anchors, which excludes bases duplicated at
153
+ the variant site, leaving `INFO/QUERY` shorter than `INFO/SVLEN`. They now report the region from the
154
+ query-reference-trimmed alignments, as insertions do, when that region spans the duplicated bases.
155
+ - Insertions and complex variants took the duplicated bases at the variant site from the query region of the
156
+ query-reference-trimmed alignments without checking that reference trimming resolved the overlap between the
157
+ anchors. Where it did not, a tandem duplication was written with no sequence at all. The duplicated bases are
158
+ again read from the reference in that case, and the variant reports a 1 bp query region rather than an empty
159
+ one.
160
+ - Perfect homology was reported as zero when it ran to the end of the compared flank, understating `INFO/HOMLEN`
161
+ for short variants in low-complexity sequence.
162
+ - The assertion comparing the query-trimmed and query-reference-trimmed reference regions of an alignment
163
+ interval joined its conditions with `or`, so it passed whenever any one of them held.
164
+ - INV/DUP/CPX tracks failed to build with `Trailing characters parsing integer in field 7` once the duplication
165
+ callset carried duplications derived from insertions. Duplications are the only records without their own
166
+ thick-line coordinates, and the missing values were filled with the literal text `pos` and `end` instead of the
167
+ variant position, which `bedToBigBed` rejected.
168
+ - Track columns typed as numbers in the AutoSQL table are now checked before the BED is written, naming the
169
+ column rather than failing inside `bedToBigBed`. UCSC itemRgb columns, which are declared `uint` but hold
170
+ `R,G,B` strings, are exempt.
171
+ - Duplication filters were assigned to the wrong records. The duplication table sorted its filter column on its
172
+ own rather than the codes within each record, moving filters such as `LCALIGN` and `MAPQ` between duplications.
173
+ - Duplication IDs were not unique. Derived duplications of the same reference region (e.g. a region copied twice by
174
+ one complex variant) shared one ID, because the duplication table was written without the ID versioning applied
175
+ to the other tables. Repeated IDs now take a version suffix (`.1`, `.2`), and passing variants keep the
176
+ unversioned ID.
177
+ - Variant IDs changed after other records were linked to them. IDs were versioned as each call source was
178
+ integrated, when the `derived`, `discord`, and `inner` columns and the complex variant segment and reference trace
179
+ tables link to them, then versioned again when the table was written, which reassigned versions among variants
180
+ sharing an ID. IDs are now versioned once. Variants derived from other variants are versioned last, so they never
181
+ take an ID another record links to. A passing variant takes a versioned ID when a variant integrated before it has
182
+ the same ID (e.g. an alignment-truncating deletion filtered by `LCALIGN` keeps its ID over a passing deletion at
183
+ the same site).
184
+ - Complex variants whose sequence matches the reference bases they replace were written with REF equal to ALT when
185
+ the reference was soft-masked, because the check compared case. They are left out of the VCF with a warning.
186
+ - VCF `INFO/SUBTYPE`, `INFO/CPX_REF_TRACE`, and `INFO/CPX_QRY_TRACE` were written with an empty value for complex
187
+ variants with an empty reference or query trace.
188
+ - VCF records were written with CSV quoting: an empty INFO column was written as `""`, and a value containing a
189
+ quote was wrapped in quotes. An empty INFO column is now `.`.
190
+ - With `vcf_haplotypes`, variants carried only by haplotypes left out of the VCF were written with no haplotype
191
+ carrying the ALT allele (e.g. `0|0`).
192
+ - `pav3 license` without a format argument failed instead of printing the brief license.
193
+
194
+ ## 3.0.0.dev26 - 2026-08-28
195
+
196
+ ### Changed
197
+ - Version bump to mitigate version conflicts with built containers with a stale version number.
198
+
199
+ ## 3.0.0.dev25 - 2026-08-28
200
+
201
+ ### Added
202
+ - `lift`, `subseq`, and `maketable` subcommands.
203
+
204
+ ### Changed
205
+ - Repository moved to BeckLaboratory/pav3 and images deployed to GHCR.
206
+ - Updated Agglovar version and merge fields.
207
+ - Documentation fixes for Read the Docs and a callout about container permissions.
208
+
209
+ ### Fixed
210
+ - `pav3.workflow.link_fasta()` returned an empty list for uncompressed FASTA files.
211
+
212
+ ## 3.0.0.dev23 - 2026-06-18
213
+
214
+ ### Added
215
+ - Docker and Apptainer build processes.
216
+
217
+ ### Changed
218
+ - Routines locating PAV resources accept a path other than the working directory.
219
+ - Updated Polars and other dependency versions.
220
+
221
+ ### Fixed
222
+ - Workaround for a Polars 1.41 streaming bug.
223
+
224
+ ## 3.0.0.dev22 - 2026-05-06
225
+
226
+ ### Added
227
+ - Functions converting alignment operations to sequence operations (`M` to `=`/`X`).
228
+
229
+ ### Changed
230
+ - VCF writing supports multiple samples.
231
+ - Schema harmonized with Agglovar.
232
+
233
+ ### Fixed
234
+ - Reading `M` alignment operations from SAM files.
235
+ - Intra-alignment variant performance.
236
+ - `from_definition` typo.
237
+
238
+ ## 3.0.0.dev21 - 2026-03-30
239
+
240
+ ### Fixed
241
+ - Off-by-one error lifting regions.
242
+ - Float32/Float64 mismatch with Polars 1.38 and newer.
243
+ - Snakemake `namedlist` import location varies by version.
244
+
245
+ ## 3.0.0.dev20 - 2026-03-23
246
+
247
+ ### Changed
248
+ - Genotype procedure supports multi-sample merges.
249
+ - Removed Snakemake from `rules/align.smk`.
250
+
251
+ ### Fixed
252
+ - VCF irregularities.
253
+
254
+ ## 3.0.0.dev19 - 2026-03-19
255
+
256
+ ### Changed
257
+ - Tuned inter-alignment variant models for robustness.
258
+ - Score model accepts n template switches.
259
+ - `integrate_sources` moved from Snakemake into a library routine.
260
+
261
+ ### Fixed
262
+ - Inter-alignment variant discovery and scoring model bugs.
263
+ - Interval reported the absolute value for `ref_len`, which is negative for a tandem duplication at a breakpoint.
264
+ - Float32/Float64 type mismatch between NumPy and Polars.
265
+
266
+ ## 3.0.0.dev18 - 2026-02-18
267
+
268
+ ### Fixed
269
+ - Complex variant structures, including duplications at a breakpoint.
270
+ - VCF failures with empty variant tables.
271
+ - Dependabot vulnerability alert.
272
+
273
+ ## 3.0.0.dev17 - 2026-02-10
274
+
275
+ ### Fixed
276
+ - Missing inversion schema for intra-alignment inversions with no variants.
277
+
278
+ ## 3.0.0.dev16 - 2026-02-09
279
+
280
+ ### Changed
281
+ - Schema cast sorts columns by schema order.
282
+
283
+ ### Fixed
284
+ - Intra-alignment inversion discovery.
285
+ - Dependabot alerts (urllib3, filelock, virtualenv).
286
+
287
+ ## 3.0.0.dev15 - 2026-02-08
288
+
289
+ ### Added
290
+ - Variant and alignment tracks.
291
+ - Tools for interactive development and troubleshooting.
292
+ - Configuration file flexibility.
293
+
294
+ ### Changed
295
+ - Reworked the workflow framework.
296
+ - Alignment lift framework rewritten for efficiency.
297
+
298
+ ### Fixed
299
+ - Inversion detection, including false negatives around alignment breaks with no aligned inverted segment.
300
+ - Intra-alignment variant calling and coordinate lifts.
301
+ - Variant sort order at intermediate stages.
302
+ - Variant table schema mismatches.
303
+
304
+ ## 3.0.0.dev14 - 2025-12-08
305
+
306
+ ### Changed
307
+ - Semicolons are converted when writing VCFs.
308
+
309
+ ## 3.0.0.dev13 - 2025-12-05
310
+
311
+ ### Added
312
+ - VCF writer.
313
+
314
+ ### Changed
315
+ - `call` subcommand renamed to `batch`.
316
+ - Configuration file renamed from `config.json` to `pav.json`, with a warning for the old name.
317
+
318
+ ## 3.0.0.dev12 - 2025-11-27
319
+
320
+ ### Fixed
321
+ - Inversion flag bugs.
322
+ - Errors from PAV and Agglovar versions getting out of sync.
323
+
324
+ ## 3.0.0.dev11 - 2025-11-26
325
+
326
+ ### Changed
327
+ - Updated Agglovar version.
328
+
329
+ ## 3.0.0.dev10 - 2025-11-26
330
+
331
+ ### Added
332
+ - Complex variants in the haplotype merge (`results/{asm_name}/call/call_cpx.parquet`).
333
+
334
+ ### Changed
335
+ - Replaced the `polars-u64-idx` dependency with `polars` 1.35.2 or newer.
336
+
337
+ ## 3.0.0.dev9 - 2025-11-20
338
+
339
+ ### Added
340
+ - Haplotype merge combining the per-haplotype call tables of an assembly into
341
+ `results/{asm_name}/call/call_{vartype}.parquet` for INS/DEL, INV, and SNV, merging passing and filtered variants
342
+ separately. Merge parameters are in `pav3.const.DEFAULT_MERGE_PARAMS`.
343
+
344
+ ### Changed
345
+ - Large insertion and tandem duplication tables replace the `ref_templ` column with `dup`, the duplicated reference
346
+ loci. Complex variant tables add `seg`, the aligned segments between the anchors, and `dup`.
347
+ - Large variants are sorted by reference position before they are resolved, speeding sequence and homology lookups.
348
+ - Updated Agglovar version.
349
+
350
+ ## 3.0.0.dev8 - 2025-11-06
351
+
352
+ ### Changed
353
+ - Variant ID expressions moved to Agglovar.
354
+
355
+ ### Fixed
356
+ - QC routines causing inversion loss.
357
+ - Build not finding PAV files.
358
+
359
+ ## 3.0.0.dev6, 3.0.0.dev7 - 2025-10-21
360
+
361
+ ### Fixed
362
+ - Removed a line raising `NotImplementedError`.
363
+
364
+ ## 3.0.0.dev5 - 2025-10-21
365
+
366
+ ### Changed
367
+ - Haplotype variant tables relocated.
368
+
369
+ ### Fixed
370
+ - Variant table handling.
371
+
372
+ ## 3.0.0.dev4 - 2025-10-08
373
+
374
+ ### Added
375
+ - Command-line interface.
376
+ - `CONTRIBUTING.md`.
377
+
378
+ ### Changed
379
+ - Package data relocated and packaging updated for upload.
380
+
381
+ ## 3.0.0.dev3 - 2025-10-06
382
+
383
+ ### Added
384
+ - PAV 3 complete through haplotype call tables (rule `call_tables_hap`).
385
+
386
+ ## 3.0.0.dev2 - 2025-06-23
387
+
388
+ ### Added
389
+ - Low-confidence alignment prediction model for filtering alignment records.
390
+ - QC for large SV calling and tracks.
391
+
392
+ ### Changed
393
+ - Alignment trimming performance for deep overlapping alignment records.
394
+ - Reworked feature handling and alignment operation handling.
395
+ - CIGAR and non-large inversion calls integrated with PAV 3.
396
+ - I/O avoids pysam, which breaks on large operation lengths.
397
+ - Renamed `.snakemake` files to `.smk`.
398
+
399
+ ### Removed
400
+ - `keep-going` from the default Snakemake profiles.
401
+
402
+ ### Fixed
403
+ - Large variant calls and alignment filter aliases.
404
+
405
+ ## 3.0.0.dev1 - 2024-12-22
406
+
407
+ ### Changed
408
+ - Altered PAV project structure including library.
409
+ - Replaced Pandas with Polars.
410
+ - Increased performance with Polars and vectorization.
411
+ - Repository transitioned to the Beck laboratory.
412
+
413
+ ### Added
414
+ - Variant intersects are handled by agglovar.
415
+
416
+ ### Removed
417
+ - SVPop was replaced by agglovar and some functions were moved into PAV.
@@ -5,7 +5,7 @@ features.
5
5
 
6
6
  ## Bugs, questions, and feature requests
7
7
 
8
- The project's [GitHub issues page](https://github.com/BeckLaboratory/pav/issues) may be used to ask questions,
8
+ The project's [GitHub issues page](https://github.com/BeckLaboratory/pav3/issues) may be used to ask questions,
9
9
  report bugs, and request features.
10
10
 
11
11
  Please search for related issues before opening a new one. If you find a relevant open issue, you may monitor it for
@@ -49,7 +49,7 @@ Please make sure you understand the [Code of Conduct](CODE_OF_CONDUCT.md) before
49
49
 
50
50
  Pull the codebase from GitHub:
51
51
  ```bash
52
- git clone https://github.com/BeckLaboratory/pav.git
52
+ git clone https://github.com/BeckLaboratory/pav3.git
53
53
  cd pav
54
54
  ```
55
55