Change Log¶
v10.2.1 (2026-09-24)¶
- Documentation readability pass: the README and docs home now describe what
Varcode does and how to read its results (per-transcript predictions,
severity vs. likelihood,
Noneas unknown). Getting started gains a glossary of the main objects. - Reorganize troubleshooting, sample identity checks, VCF export, SV results, and RNA imports around plain-language summaries, with status/threshold tables and collapsible notes for edge cases.
- Remove stale limitations already fixed in #437 and #449, note that genotype set operations treat uncalled normals as absent, and move the dated quality audit out of the user reference section.
v10.2.0 (2026-09-24)¶
- Add
varcode check-samplesand a Python API for pairwise donor genotype concordance and somatic tumor overlap (#510), with explicit sample roles, matched-normal evidence, expected identity flags, JSON and TSV reports. - Report sparse or uninformative evidence as inconclusive; never infer reference genotypes from missing records. Tolerate tumor LOH and partial somatic overlap with documented, configurable screening heuristics and provenance/QC counts.
- Include reproducible synthetic VCF builders and checks for swaps, mixed tumor/normal inputs, missing quality, allele ordering and precise SV matching.
v10.1.3 (2026-09-24)¶
- Preserve sample identities, per-sample FORMAT values, missing samples, and original multi-allelic ALT order during VCF export (#502).
- Write INFO/FORMAT declarations, accept original field definitions, and reject incomplete/ambiguous ALT reconstructions before writing output.
- Support generator/empty exports, numeric position ordering, missing list elements, and per-sample filters; add independent identity round-trip tests.
v10.1.2 (2026-09-24)¶
- Enforce VCF allele limits across simple and structural calls and retain structural ALT indexes; propagate parser failures instead of silently truncating input (#504).
- Isolate default collection metadata (#505), preserve transcript failure diagnostics (#506), and run pytest with the interpreter used to probe optional plugins (#490).
- Enable undefined-name lint checks, remove mutable parser defaults and deprecated logging calls, and preserve column order during MAF normalization.
- Update developer/release instructions, fixture provenance guidance, Osteosarc compatibility, API navigation, and documented export/phase limits.
v10.1.1 (2026-09-24)¶
- Do not infer protein truncation from an internal-Met reference suffix when an observed transcript's 5′ completeness is unknown (#467). Preserve the start-to-stop ORF, its evidence and mapped local changes, while retaining full comparisons for predictions with a mapped annotated initiator.
v10.1.0 (2026-09-23)¶
- Report identical inherited alleles as
GermlineAlleleOverlap, without manufacturing a new somatic sequence change or claiming LOH (#454). - Add
detect_germline_overlap; deprecate the allele-onlydetect_lohquery, which now returnsNone(not assessed). LOH needs independent allelic-state evidence. Mixed inherited/somatic transcript-model groups remain unresolved.
v10.0.4 (2026-09-23)¶
- Leave overlapping DUP/INV events unresolved in the experimental transcript model when their junctions exceed its finite layout, instead of classifying a clipped allele as a UTR-only or unchanged product (#449). Preserve supplied assemblies and fully represented local rearrangements.
v10.0.3 (2026-09-23)¶
- Archive structural effects as versioned graphs so self candidates, fusion partners, primary/cryptic/splice/external candidates, mutant transcript models, and annotation provenance survive JSON round trips (#438).
v10.0.2 (2026-09-23)¶
- Load structural variants from both CLIs, normalize explicit chr contigs,
report filtered VCF record counts, and add
--include-filtered(#433). - Add
--skip-errorswith retained Failure rows and error details, including failed initial annotation lookups and failures alongside coding filters.
v10.0.1 (2026-09-23)¶
- Reconstruct inserted junction bases in local DEL/DUP transcripts on both strands, including insertions at exon anchors flanking a deleted intron (#491). Protein consequences now use the net spliced edit with the retained insert.
- Share insertion-retention rules with fusion models: retain exonic inserts, exclude intronic inserts under reference splicing, and preserve uncertainty for mixed retention or conflicting/unreadable reciprocal alleles.
v10.0.0 (2026-09-23)¶
Changed
- Classify local SV transcript models by their protein consequence (#420):
start loss, in-frame deletion/insertion, frameshift, and other changes now
replace event-type labels. Preserve conditional consequences in candidate
sets with splice assumptions, event provenance, and mutant sequences.
- Return unresolved candidates for unspecified insertion/CNV structure,
unmaterialized inversions, and unmapped assemblies. Keep fusion consequences
and legacy class imports; callers should read DNA type from variant.sv_type.
- Map retained CDS starts on both strands and preserve selenocysteine/SECIS
uncertainty and independent coding/protein change flags.
v9.5.0 (2026-09-23)¶
Added - Compare SV call tables across samples and callers with a reusable API and command. Preserve every input record, distinguish exact reported alleles from nearby candidates, and export breakpoint/insertion disagreements, source IDs, unresolved calls, and reproducible run provenance.
v9.4.2 (2026-09-23)¶
Fixed - Retain inserted junction bases when translating exonic breakend fusions (#485), with strand-correct sequence from either reciprocal record and paired structural events. Mixed exon/intron insertion retention and conflicting or unreadable inserted alleles remain explicitly unresolved. - Record the reference-splicing assumption when an insertion between two intronic breakpoints is excluded from the predicted fusion transcript.
v9.4.1 (2026-09-22)¶
Testing
- Bundle the verified historical Osteosarc metadata snapshot and run the
native 0.1.4 adapter checks in CI on Python 3.10+. A fresh checkout with
.[test-data] now runs these tests offline without a manually prepared
cache or local sibling repository (#483).
v9.4.0 (2026-09-22)¶
Fixed
- Delegate known-cis groups to the selected annotator's optional
annotate_haplotype method (#437). Retain unsupported groups as unresolved
effects instead of silently dropping them or predicting with another backend.
- Route experimental transcript-model joint effects through its existing
multi-variant engine, including patient germline context from every member's
window and separately retained observed RNA models. The default retains
point-edit haplotypes and explicitly declines joint germline composition.
Testing
- Update the optional test-data extra to Osteosarc 0.1.4, retaining Python 3.10+
compatibility and the historical fixture's package/snapshot provenance (#478).
v9.3.7 (2026-09-21)¶
Testing
- Collect 177 real site variants and five unresolved entries from the pinned
osteosarc snapshot into a portable fixture. Ordinary offline tests now
annotate every ready allele with fast and protein_diff, including the
mitochondrial variant and corrected MAP2 complex allele (#464).
- Add an explicit offline regeneration command and native test-variant loader,
preserving original alleles, reference identity, correction notes, and
source hashes. Optional snapshot checks verify byte-for-byte regeneration.
v9.3.6 (2026-09-19)¶
Fixed
- The fast and transcript_model annotators now classify an insertion
immediately before the retained CDS start on a reverse-strand transcript
as 5′ UTR. The insertion no longer produces a false coding- or
protein-sequence-change flag; all three annotators agree (#474).
v9.3.5 (2026-09-19)¶
Fixed
- Genomic-layout translation only recodes an annotated selenocysteine when
all three codon origins remain contiguous. Insertions or deletions that
create a new TGA from part of that codon now terminate translation (#473).
- protein_diff inspects the mutant start codon at the same mapped CDS
offset used for translation. An insertion immediately before the retained
start codon is classified as 5′ UTR, without a false alternate-start or
coding-sequence-change call (#473).
Testing
- Optional offline corpus checks use osteosarc==0.1.0 and a pinned public
snapshot, preserving native alleles and provenance and distinguishing the
corrected MAP2 complex allele from the older deletion (#464).
v9.3.4 (2026-09-18)¶
Fixed
- Predicted proteins no longer stop at selenocysteine (#470). Mutant
transcripts, splice outcomes, fusions and the experimental transcript_model
layouts now read an annotated Sec UGA (U in the Ensembl reference protein)
as Sec when no edit touches it and some selenoprotein 3′ UTR (SECIS) remains.
Where none remains, as in a fusion downstream of Sec, UGA still terminates.
Across the 60 complete selenoprotein transcripts in Ensembl 81, protein_diff
had called most coding variants PrematureStop (176 of 240 probes), and
transcript_model had called Sec→Trp a stop loss and missense changes after
Sec silent (112 of 240). Both now agree with the default annotator on all 240.
Opaque RNA imports without reference coordinates are still translated
literally. When the 3′ UTR is only partly kept, the SV change flags ignore a
supplied protein and stay unresolved.
- Joint translation of several edits (germline context, phasing, splice
outcomes) now finds the CDS start after a 5′ UTR indel instead of reading
the wrong frame (#471).
- translate_sequence accepts selenocysteine= offsets of TGA codons to
read as U.
v9.3.3 (2026-09-18)¶
Fixed
- SV sequence-change flags no longer call unchanged selenoproteins
protein-changing (#468). A TGA mapped onto an annotated selenocysteine
(U in the Ensembl reference protein) is read as Sec where the model keeps
that transcript through its 3′ end, which holds the SECIS element. It is read
as a stop where no selenoprotein 3′ UTR remains (for example a fusion
downstream of Sec, or a deletion of the whole 3′ UTR, which truncates the
protein). When the SECIS may be only partly lost (a 3′ UTR deletion or
duplication, a fusion in the 3′ UTR, or an unmapped import), the protein flag
is reported only if both readings agree; otherwise it is None. The coding
flag compares CDS bases and does not depend on Sec decoding. A supplied
protein that ends exactly at a Sec residue no longer counts as a truncation,
and partial observations continue past a decoded Sec codon. All 60 complete
selenoprotein transcripts in Ensembl 81 now read unchanged for a
reference-identical model.
- Complete-ORF comparisons read any start codon as the initiator methionine
on both sides. Ensembl writes CTG/TTG initiators as L, so the 68 complete
non-ATG transcripts in Ensembl 81 were previously called protein-changing
when unchanged.
v9.3.2 (2026-09-18)¶
Fixed
- SV sequence-change flags no longer call a partial observation
(protein_completeness of partial_start, partial_end, partial_both, or
an explicit unknown) protein-changing just because it is shorter than the
full reference protein (#462). Missing sequence is neither unchanged nor a
truncation: these flags are True only when ORF bounds and reference-transcript
segments place an observed codon in frame on a differing reference CDS codon,
including premature stops and stop loss, and otherwise stay None.
Only start_to_stop, or no label, permits a whole-protein comparison or
the complete-ORF fallback; any other label fails closed. Exacto partial
peptides, which have no reference coordinates, remain unresolved. Complete
predictions and 9.3.0 candidate aggregation/filtering are unchanged.
v9.3.1 (2026-09-18)¶
Documentation - Explain the shared Varcode / Isovar / Vaxrank responsibility split and evidence handoffs, with short README links and a focused integration guide. Distinguish available functionality from planned RNA/SV reconciliation (Isovar #305) and remaining downstream candidate-selection limits. No annotation behavior changed.
v9.3.0 (2026-09-18)¶
Fixed
- Structural effects now report coding/protein changes from available sequence
and retained reference ORFs, rather than inheriting False (#418). Compare
every candidate; retain a set if any alternative predicts a protein change.
Coding deletions and the seven audited CPEB2–FAM193A fusion proteins survive
filtering, while unchanged and synonymous proteins do not.
Changed
- SV sequence-change flags can now be None for unknown, distinct from False
for unchanged. Unresolved and unclassified cryptic-exon candidates also use
None. drop_silent_and_noncoding() retains unknowns by default; pass
keep_unresolved=False to require a positive protein-change prediction.
Candidate ordering, evidence, effect classes, and stored proteins are unchanged.
v9.2.8 (2026-09-18)¶
Fixed - Retain all compatible fusion partner isoforms and junctions as candidates instead of selecting only the first (#406). Each carries its predicted protein when available; missing transcript sequence stays unresolved. Preserve the primary ordering and existing span/splice/RNA candidates, with no arbitrary count cap and no merging of distinct isoforms by protein alone. - Add the audited CPEB2–FAM193A 1,541/1,500-aa alternatives, a 257-isoform case, and strand, provenance, assembly, and missing-sequence regressions. These are annotated-isoform predictions, not exhaustive splice/phase hypotheses or evidence of expression.
v9.2.7 (2026-09-17)¶
Documentation - Split structural annotation, SV reference rules, and observed RNA imports; separate germline setup from phasing workflows. Replace the long API page with an index and five topic references, without duplicate object headings. - Group effect definitions by family, simplify headings, and move transform contributor notes out of the user guide. Preserve existing section links. - Correct the phased-VCF resolver example and cover it with executable tests. No annotation behavior or public APIs changed (#457, #458).
v9.2.6 (2026-09-17)¶
Documentation - Shorten the effect annotation guide and split splice variants, transcript models, and experimental annotators into separate pages. Consolidate plugin instructions and provenance, use specific headings, and update navigation and example tests. Existing section links still lead to the relevant guides. No annotation behavior or public APIs changed.
v9.2.5 (2026-09-17)¶
Documentation
- Make the README a short introduction and add a reproducible getting-started
guide. Group navigation into everyday tasks, advanced workflows, and reference;
move implementation details behind usage examples (#415, #453).
- Correct germline examples and resolver descriptions (#413), stale splice and
serialization explanations, and the missing Genome API link (#451).
- Lead the annotation guide with ordinary effects() usage. Explain optional
implementations, supported-input limits, partial transcript models, sequence
and candidate access, legacy aliases, and current haplotype ownership in an
advanced section. No annotation behavior or public APIs changed.
v9.2.4 (2026-09-17)¶
Fixed - BND fallbacks retain only the strand/orientation-correct reference cDNA prefix or suffix, not the entire transcript (#447). Single breakends retain their known local side; unknown local orientation leaves the model unresolved. Fragments are explicitly labeled partial, full cDNA/protein remain unknown, and supplied assemblies and existing coding-fusion predictions are preserved.
v9.2.3 (2026-09-17)¶
Fixed - DUP/INV events with junction ends outside the selected transcript no longer fabricate a local duplicated/inverted transcript (#405). The DNA event class remains, but its unresolved mutant transcript is None. Existing fusion predictions and explicitly supplied allele assemblies are preserved.
v9.2.2 (2026-09-17)¶
Fixed - Structural variants expose their actual REF/ALT, not the constructor's temporary nucleotide placeholders; small-edit flags are always false (#417). - Mixed/SV tables include type, endpoint, mate and affected-span columns; point-only and empty table schemas remain unchanged. Structural CSV import raises explicitly instead of reconstructing misleading point variants.
v9.2.1 (2026-09-17)¶
Fixed - Parsed symbolic DEL/DUP/INV/CNV spans exclude the retained VCF padding base from exon and mutant-cDNA annotation (#404). POS and junctions are unchanged; direct constructors retain their explicit affected-span defaults. - Symbolic span records with missing/non-increasing END raise instead of being interpreted as a one-base event at the padding position.
v9.2.0 (2026-09-16)¶
Added
- RNAReadPhasingSource.register_haplotype tests an explicitly supplied local
allele combination against anchored, quality-filtered RNA sequence. Equivalent
deletion, splice-gap and split-gap alignments can support a known sequence
without treating arbitrary RNA skips as DNA deletions (#441).
- load_exacto_fusions(..., primary_structures_path=...) imports native Exacto
peptide predictions, including separate ORFs and partial proteins. Codons and
coordinates are checked against observed RNA; original per-base provenance and
completeness remain explicit. Prediction is not evidence of translation.
Fixed
- RNA read support and pair grouping use (RG, QNAME), preventing unrelated
libraries with reused names from creating false cis evidence or being
collapsed into one supporting fragment (#443).
v9.1.0 (2026-09-16)¶
Added
- load_exacto_fusions imports selected SV-linked transcript structures and
DNA/RNA integration rows without guessing an ORF or choosing one isoform.
Original oriented sequence, splice/path rows, model IDs, and variant links
remain available on existing MutantTranscript/effect candidates (#259, #261).
- RNAEvidence is a small concrete resolver for imported candidates;
make_fusion_outcome imports a caller-specified observed sequence using
existing structural effects. Partial and antisense/intergenic observations
need not be promoted to coding fusions. Translation requires an explicit,
complete start-to-stop ORF and is labeled prediction, not protein evidence.
- MutantTranscript.from_sequence shares external-sequence construction with
the existing assembled-SV path, removing the duplicate sequence wrapper.
Fixed
- RNA observations attached to single-outcome structural predictions such as
Intronic are retained alongside the DNA prediction. Deterministic
point-variant behavior and default annotation remain unchanged.
v9.0.0 (2026-09-15)¶
Breaking changes
- Removed StructuralVariantAnnotator, the varcode.annotators.structural_variant
module, and annotator="structural_variant". Use effects() or
annotator="fast" for both point variants and SVs; direct callers can use
FastEffectAnnotator().annotate_on_transcript(variant, transcript).
- Removed UnsupportedVariantError and its package/registry exports. Partial
annotators return NotImplemented; public prediction APIs expose an
Unresolved effect without silently selecting another annotator.
- Pickles referring to classes in the removed structural-annotator module or
to UnsupportedVariantError must be read with varcode 8 before migrating.
Changed
- The default annotator calls internal structural prediction helpers directly,
without instantiating another annotator. The experimental transcript model
shares those helpers for fusion prediction. Classification, sequence assembly,
candidates, and existing provenance are unchanged.
- fast remains the default; protein_diff and transcript_model remain
experimental. Joint haplotype construction is unchanged (tracked in #437).
v8.0.3 (2026-09-15)¶
Fixed
- Contig validation now uses the actual Genome annotation dataset instead of
sharing a cache by assembly name. Subsets, custom annotations and releases
named GRCh38 no longer accept or reject chromosomes based on loading order
(#402).
- Suppressed gene/transcript lookup errors return an empty EffectCollection
with annotator provenance, rather than a plain list, and log the error.
v8.0.2 (2026-09-15)¶
Fixed
- varcode and varcode-genes no longer fail at startup when pkg_resources
is unavailable. Both commands load their packaged logging configuration with
the standard library's importlib.resources, including from zipped packages.
- Added subprocess regression tests for both commands with pkg_resources
imports blocked, so older setuptools in a test environment cannot mask the
missing runtime dependency.
v8.0.1 (2026-09-15)¶
Changed
- Renamed the experimental realized annotator to transcript_model, with
TranscriptModelEffectAnnotator and predict_transcript_model_effect in
varcode.transcript_model. The old registry name, class, function and module
imports remain compatibility aliases. New annotation provenance uses
transcript_model, including when selected through the old alias.
- The transcript model remains experimental and opt-in. The fast default,
biological model, candidate ordering and unsupported-input behavior are
unchanged.
v8.0.0 (2026-09-15)¶
Changed
- One built-in default annotator (fast) now owns point-edit and structural
routing. Explicit annotator="fast" handles SVs just like effects().
Single-transcript APIs accept annotator and germline context and honor the
same scoped selection as collection annotation.
- Partial experimental annotators return NotImplemented for unsupported
inputs, without declaring supports. Public APIs expose those results as
Unresolved with a reason and retain the selected annotator's provenance;
they never silently substitute another annotator. None is an invalid
plugin result. UnsupportedVariantError remains a compatibility import.
- Nonempty germline context requires annotate_with_context. The default
retains established germline point-edit prediction; SV/germline composition
remains experimental in realized. protein_diff declines SVs before
reading placeholder nucleotide alleles. Realized-layout limitations return
explicit unknowns without swallowing other errors.
- protein_diff and realized remain optional experiments; shared protein
comparison helpers and point-edit parity tests remain in use. This release
changes the annotator contract, not the default biological model or ranking.
Fixed
- The registry-default test now restores the prior annotator rather than
leaking protein_diff into later tests.
v7.3.0 (2026-09-15)¶
Added
- Added the opt-in realized effect annotator and
predict_realized_effect. It composes unknown germline phase, splice-site
choices, point variants and local structural variants on one genomic
layout, realizes the patient baseline and mutant product, classifies their
protein difference, merges identical comparisons, and returns an ordinary
top effect with ordered alternatives in effect.candidates.
- Added graph-native exon projection and splicing on forward and reverse
strands. Canonical and exon-skip products resolve without a FASTA; with
genomic sequence, intron-retention and cryptic-site products are translated
from the mutated haplotype. Sequence-dependent tier-0 branches are reported
as Unresolved.
- Added BND support to the realized annotator through the independently
validated fusion assembler, including translated cross-gene products.
Fixed
- Splice choices whose required exon was removed by another choice are no
longer enumerated, including the impossible combination of retaining an
intron while skipping the exon that terminates it.
- The 64-hypothesis safety limit now applies to the combined phase × splice
product instead of separately to each phase branch.
- Exonic alleles excluded from a realized mRNA are reported as Silent with
excluded_from_mrna=True, rather than being mislabeled as genomic
Intronic variants.
- Structural effects now expose the protein on their realized
mutant_transcript through effect.mutant_protein_sequence.
v7.2.0 (2026-09-15)¶
Added - Added the internal coordinate-aware genomic-layout foundation for the realized effect engine. Layouts preserve base origins through point edits, deletions, duplications, inversions, reverse strands, and cross-contig breakend joins without expanding large introns into per-base objects. - Added composable phase/splice hypothesis and realized-product types. Splice hypotheses are validated as graph rewrites, rule preferences remain ordinal unless a calibrated probability is supplied, and candidate merging now keys on both the patient baseline and mutant product.
v7.1.2 (2026-09-15)¶
Fixed - Cryptic splice-site scans now score the mutated allele and use one interbase boundary convention across donors, acceptors, and both strands. A destroyed canonical donor can no longer nominate itself as a cryptic replacement. - FASTA-backed cryptic-splice and intron-retention outcomes now realize the originating exonic or intronic allele on the same mutant transcript instead of constructing the splice mechanism from reference sequence alone.
v7.1.1 (2026-09-14)¶
Fixed
- Four regression tests no longer silently skip. Three splice-outcome tests
now inspect the always-on SpliceOutcomeSet wrapper and assert its
disrupted_signal_class; the explicit 50-base deletion test now derives
its coordinates from the pinned CFTR transcript instead of using a
position one base before the intended exon.
v7.1.0 (2026-09-11)¶
Changed
- Structural-variant fusion annotation follows breakend orientation. The
side of each breakpoint that's kept, with transcript strand, decides
which transcript is the 5' and which the 3' partner, and a partner has
to be in another gene and join sense-to-sense. GeneFusion is reported
on either partner
(GeneFusion.transcript can be the 3' partner) and carries
five_prime_transcript / three_prime_transcript. A breakend whose
ALT keeps the wrong sides for a fusion now gives
TranslocationToIntergenic.
- A DEL / DUP / INV with one end in a transcript and a
sense-to-sense partner at the other end gives a GeneFusion (e.g. the
TMPRSS2-ERG deletion). The deletion, duplication or inversion of that
transcript's exons follows the fusion in its candidates.
- pair_breakends builds a typed DEL / DUP / INV from a breakend
pair that carries that SVTYPE (esvee, GRIDSS) when both halves agree
on the label and their kept sides fit it, so effects() covers the
whole span. Each record still loads as the breakend it is, so
annotating an unpaired collection doesn't report the event twice.
- StructuralVariant.junctions exposes the novel adjacencies a variant
creates as pairs of Breakend ends (position plus the side kept), and
breakpoints lists their positions. Fusion assembly, transcript
containment and cryptic-exon scanning all read from them.
- The reverse-complement orientation warning is replaced by a warning
when a breakend with a mate has no breakend ALT to read orientation
from.
Fixed
- VCF single breakends (.ACGT / ACGT.) no longer crash load_vcf;
they load as BNDs with no mate.
- SVs from load_vcf use the genome and contig-name settings passed to
it. Previously they fell back to the default GRCh38 and kept chr
names, so effects() raised on UCSC-named VCFs.
- StructuralVariant.mate_contig is normalized like contig, and
Variant._convert_ucsc_contig_name_to_ensembl converts its argument
rather than the variant's own contig.
- StructuralVariant equality compares every field the record carries
(type, span, ALT, mate, assembled allele and confidence intervals), so
load_vcf(distinct=True) no longer merges different SV records at the
same position.
- StructuralVariant.to_dict covers every SV field, so JSON and pickle
round-trip SVs (pickling one previously raised TypeError).
- A fusion keeps the base at each breakpoint, so a breakpoint inside an
exon no longer drops one base from the 5' partner (and frameshifts the
predicted protein).
- A fusion partner must be in a gene that doesn't span both ends of the
junction, so an event inside one gene isn't reported as a fusion with a
nested or antisense gene at its far end.
- A GeneFusion reported on its 3' partner carries a mutant transcript
whose reference_transcript is the transcript being annotated.
- reference_range reads a range with one locus query instead of one
per position when no single transcript spans it, which is the path
cryptic-exon scoring takes on a genome with no chromosome FASTA.
Added
- A structural variant annotation guide (docs/structural_variants.md)
covering which transcripts are annotated, how strand and kept sides
decide fusion direction, every breakend combination, deletions,
duplications and inversions by strand, and where a breakpoint lands.
- Fusion regression tests from the public osteosarc.com osteosarcoma
dataset, validated against LINX (tests/test_osteosarc_fusions.py,
tests/data/osteosarc_esvee_somatic.vcf).
v7.0.0 (2026-07-08)¶
Changed
- The default effect annotator is now fast (the offset-based
classifier varcode has shipped since 2.0.0) instead of protein_diff.
Variant.effects() / VariantCollection.effects() with no explicit
annotator= now route through fast. This is a behavior change for
callers that relied on the default: for SNVs / indels / MNVs the two
annotators are fully reconciled (see tests/test_protein_diff_parity.py,
tests/test_annotator_parity_adversarial.py, and
tests/test_annotator_divergence_scenarios.py), so nearly all output is
unchanged, but any residual divergence now resolves to fast's
classification. protein_diff stays available via
annotator="protein_diff" or varcode.use_annotator("protein_diff"), and
remains the substrate the MutantTranscript / splice-outcome / germline
machinery builds on. Rationale: fast is the more battle-tested path —
during the protein_diff bring-up it was effectively the correctness oracle
protein_diff was reconciled against
(#318–#321),
and it has the cleaner bug history
(#397). Major version bump
because default behavior changes.
Added
- Regression pins in tests/test_annotator_divergence_scenarios.py for the
frameshift coincidental-shared-suffix class
(#396 /
#397): a frameshift whose
novel C-terminus coincidentally ends with the reference protein's terminal
residue(s) must retain the full tail under both annotators (CFTR
p.L127fs on the + strand, BRCA1 p.R71fs on the − strand).
v6.0.2 (2026-07-08)¶
Fixed
- The default protein-diff annotator (classify_from_protein_diff) no
longer drops the last 1–2 residues of a frameshift/stop-loss novel
C-terminus when that tail coincidentally ends with the same residue(s)
as the reference protein's own C-terminus. Reading-frame-changing
branches now trim only the shared prefix (trim_shared_prefix)
instead of trim_shared_flanking_strings, which also stripped a shared
suffix — correct for an in-frame indel, but wrong for a novel tail
running to a new stop codon. Example: ATM p.F61fs (GRCh38
chr11:g.108227882delT, ENST00000675843) now reports 74 aa … FRKKQNV
from Variant.effects(), matching annotator="fast" and the true ORF,
instead of the truncated 73 aa … FRKKQN. annotator="fast" and
predict_variant_effect_on_transcript() were never affected
(#396,
#397).
v6.0.1 (2026-06-18)¶
Fixed
- In-frame deletions that remove the stop codon of a transcript with no
3' UTR sequence (e.g. MAPK3-006 / ENST00000395199, whose
three_prime_utr_sequence is "") no longer raise
ValueError: If no amino acids added by StopLoss then it should be Silent.
With no readthrough sequence to translate into, the effect is now
classified as a C-terminal Deletion instead of an invalid StopLoss
with an empty aa_alt. Both annotators agree on this: the in-frame
predictor (FastEffectAnnotator) no longer constructs the invalid
StopLoss, and the default protein-diff classifier
(classify_from_protein_diff) no longer mislabels the truncated protein
as a PrematureStop — there is no stop codon in the mutant CDS, so a
premature stop is incorrect. The earlier
#246 fix only covered
transcripts with a non-empty 3' UTR
(#394).
v6.0.0 (2026-05-26)¶
Fixed
- apply_variants_to_transcript now refuses an insertion abutting
another edit at the same cDNA offset. The previous overlap check
only caught range overlap and the two-insertions-at-the-same-offset
case, so an insertion paired with a substitution or deletion
starting at the same offset slipped through and produced an
order-dependent joint cDNA. User-visible impact: phased haplotype /
germline pipelines (varcode/phasing.py, varcode/germline.py)
that previously returned a silently order-dependent joint effect for
these inputs now return independent per-variant effects computed
against the reference instead.
- IUPAC ambiguity codes (R, Y, S, W, K, M, D, V, H, B) in a
reverse-strand variant's alleles are now reverse-complemented via
the full IUPAC translation table. The private helper in
varcode/mutant_transcript.py only covered A/C/G/T/N and silently
passed ambiguity codes through unchanged; _resolve_variant_edit
now delegates to varcode.nucleotides.reverse_complement.
Added
- Added RNAReadPhasingSource, a BAM-backed ReadPhasingSource
implementation for RNA read/fragment co-occurrence. It is consumed
through MolecularPhaseResolver(source) and lives behind the optional
varcode[rna] / pysam dependency. ReadPhaseResolver remains as
the varcode 5.0 compatibility name.
- SpliceOutcomeSet.effect_if_splicing_unchanged — the canonical
"alternative outcome" accessor: the coding consequence that applies
if splicing proceeds normally (the NormalSplicing candidate's
coding_effect). Unlike the legacy ExonicSpliceSite.alternate_effect,
it works for intronic splice disruptions — returning None when
the nucleotide change leaves the protein untouched (i.e. there is
no coding consequence to attach). Sits alongside most_likely_effect
and candidates as the three-accessor surface on SpliceOutcomeSet
(#391).
Breaking
- SpliceOutcomeSet is now always-on for splice-disrupting variants
(#391). Every variant
that lands in the canonical splice window — SpliceDonor,
SpliceAcceptor, ExonicSpliceSite, IntronicSpliceSite — is
wrapped in a SpliceOutcomeSet carrying the candidate mechanisms.
Specifically:
- The splice_outcomes=True flag on Variant.effects() /
VariantCollection.effects() / predict_variant_effects() is
removed. Callers passing it explicitly get a TypeError.
Migration: drop the keyword — wrapping is unconditional.
- Variant.effect_on_transcript(transcript) and the
FastEffectAnnotator / ProteinDiffEffectAnnotator per-transcript
paths return a SpliceOutcomeSet for splice-disrupting variants
instead of the raw ExonicSpliceSite / SpliceDonor / etc. class.
Migration: replace isinstance(effect, ExonicSpliceSite) with
isinstance(effect, SpliceOutcomeSet) and effect.disrupted_signal_class is ExonicSpliceSite.
effect.alternate_effect still works as a back-compat alias for
effect.effect_if_splicing_unchanged, so attribute access keeps
working through the wrapper.
- SpliceOutcomeSet.modifies_protein_sequence is hardcoded to
True (a splice disruption is always potentially protein-
modifying via a non-NormalSplicing candidate). Closes a long-
standing filter bug where drop_silent_and_noncoding() silently
dropped exonic-splice-site variants whose NormalSplicing.coding_effect
happened to be Silent.
- Candidate construction is lazy: only the cheap NormalSplicing
candidate is built eagerly; ExonSkipping, IntronRetention,
CrypticDonor / CrypticAcceptor materialise on first
.candidates access. Pipelines that filter on
modifies_protein_sequence / effect_priority and never read
.candidates pay only the eager cost.
- SpliceOutcomeSet is now a TranscriptMutationEffect subclass
(alongside MultiOutcomeEffect), so it carries gene /
transcript and matches the standard isinstance(effect, TranscriptMutationEffect)
filter used by downstream consumers.
- Unified the multi-outcome machinery: SpliceCandidate deleted;
MultiOutcomeEffect.outcomes accessor + _with_extra_outcomes
helper + _extra_outcomes slot removed
(#382).
- SpliceOutcomeSet.candidates now returns
tuple[EffectCandidate, ...] — the same shape every other
MultiOutcomeEffect subclass exposes. Each entry wraps an
inner SpliceMechanismEffect (NormalSplicing,
ExonSkipping, IntronRetention, CrypticDonor, or
CrypticAcceptor). Mechanism identity now lives on
type(candidate.effect), and the mechanism object carries
fields like affected_exon, side, cryptic_genomic_position,
aa_ref, aa_alt, and mutant_transcript. The previous
candidate.outcome / candidate.plausibility /
candidate.coding_effect / candidate.predicted_class_name /
candidate.mutant_transcript / candidate.has_protein
fields are gone — read provenance off the EffectCandidate
(.source, .evidence) and mechanism/protein state off the
inner effect (candidate.effect,
candidate.effect.mutant_transcript).
candidate.plausibility has no one-for-one semantic replacement:
it was the old splice-specific name for a DNA-only ordering
heuristic, not evidence. There is no shared
EffectCandidate.probability; producer-specific support belongs
in candidate.evidence under explicit names.
- MultiOutcomeEffect.candidates is the single accessor on every
subclass (SpliceOutcomeSet, StructuralVariantEffect,
PhaseCandidateSet, ExonicSpliceSite, HaplotypeEffect).
A new MultiOutcomeEffect.effects convenience property unwraps
to tuple(c.effect for c in self.candidates) for callers that
don't need provenance.
- The post-hoc attachment slot renamed _extra_outcomes →
_extra_candidates; the merge helper renamed
_with_extra_outcomes → _combine_with_extra_candidates.
apply_rna_evidence_to_effects still uses _extra_candidates
for non-splice multi-outcome effects; splice mechanism sets now
reconcile RNA evidence into a replacement set with
rna_evidence, added_candidates, excluded_candidates, and
candidate_rna_evidence audit fields. External integrations
that touched these private names must rename.
- StructuralVariantEffect.__init__ parameter renamed
candidates= → primary_effects= (carries the inner
MutationEffect tuple; the candidates accessor now lifts
to EffectCandidate automatically). Same on LargeDeletion,
LargeDuplication, GeneFusion.
- MultiOutcomeEffect.most_likely is removed. Replaced by
four explicit accessors so callers never confuse "wrapped vs
unwrapped" or "likeliest vs most-disruptive":
- .most_likely_candidate → EffectCandidate (same as
candidates[0])
- .most_likely_effect → inner MutationEffect of the above
- .highest_priority_candidate → EffectCandidate with the
highest effect_priority among candidates (worst-case
classification, independent of producer order)
- .highest_priority_effect → inner MutationEffect of the above
Callers doing effect.most_likely.mutant_protein_sequence or
effect.most_likely.aa_ref should switch to
effect.most_likely_effect.mutant_protein_sequence etc.;
callers that want the wrapper (with .source, .evidence) use
effect.most_likely_candidate.
- Splice mechanisms promoted to first-class MutationEffect
classes, each carrying its own protein vocab (aa_ref /
aa_alt / mutant_protein_sequence / mutant_transcript) on
the instance — no more wrapping a separate coding effect.
New hierarchy:
- SpliceMechanismEffect(TranscriptMutationEffect) — base,
carries splice_signal referencing the underlying
SpliceDonor / SpliceAcceptor / IntronicSpliceSite /
ExonicSpliceSite so each mechanism knows where the
disruption was.
- NormalSplicing — splice signal hit but splicing proceeds;
carries coding_effect for the underlying nucleotide-level
change (or None for purely intronic disruption).
- ExonSkipping — affected exon excluded; carries
affected_exon and in_frame.
- IntronRetention — intron retained; carries
retained_intron_start, retained_intron_end, side.
- CrypticDonor / CrypticAcceptor — cryptic site replaces
canonical; carry affected_exon,
cryptic_genomic_position, motif_score,
exon_length_delta.
Unresolved state is "protein fields are None" — no parallel
placeholder class hierarchy. Class identity = mechanism;
consumers dispatch on isinstance(candidate.effect,
ExonSkipping) instead of evidence-key checks. Resolved
mechanisms retain their classified protein consequence as
protein_effect so severity queries (effect_priority,
modifies_protein_sequence) behave like ordinary coding effects
while preserving mechanism identity.
- Deleted: SpliceOutcome enum (replaced by class identity),
PredictedIntronRetention (subsumed by IntronRetention),
PredictedCrypticSpliceSite (split into CrypticDonor +
CrypticAcceptor), SpliceOutcomeSet.to_dict /
.from_dict overrides (no enum left to stringify),
evidence["splice_outcome"] / evidence["placeholder"] /
evidence["description"] keys (info now lives on the
mechanism Effect — type(candidate.effect),
candidate.effect.resolved, candidate.effect.short_description),
_placeholder_effect_for_outcome and _make_splice_candidate
helpers.
- SpliceOutcomeSet.candidate_proteins now keys by mechanism
class (e.g. proteins[ExonSkipping]) instead of SpliceOutcome
enum value.
- varcode.Outcome renamed to varcode.EffectCandidate. The helper
outcomes_from_candidates renamed to candidates_from_effects.
The module varcode.outcomes renamed to
varcode.effect_candidates. The test file tests/test_outcomes.py
renamed to tests/test_effect_candidates.py. The description
field on the wrapper class is removed — use
candidate.effect.short_description (it was always a passthrough).
Also removed from make_rna_outcome(description=...). No
deprecation alias; update imports. The class ships with a module
docstring explaining why the wrapper exists: the same
MutationEffect instance can appear in multiple multi-outcome
contexts with different per-context provenance (e.g. a splice
candidate re-surfaced by the SV annotator with a different
source tag and sv_type in evidence); putting metadata on the
wrapper instead of the Effect lets the Effect stay shared while
the labels diverge. (Per #382, .outcomes has since been removed
and MultiOutcomeEffect.candidates is the single accessor across
every subclass.) Aspirational
"isovar" / "exacto" / "longread_assembly" example tags
scrubbed from varcode docstrings.
- Phasing API generalized; Isovar-named identifiers removed from the
varcode public surface (#378).
Varcode no longer imports or names any upstream tool — implementations
of the new generic Protocols live in their respective packages
(e.g. isovar.IsovarReadPhasing, openvax/isovar#183).
- IsovarAssemblyProvider (Protocol) removed, split into:
- ReadPhasingSource with has_evidence(variant) -> bool and
partners_in_cis(variant) -> Sequence[Variant].
- MutantTranscriptSource with
mutant_transcript(variant, transcript) -> Optional[MutantTranscript].
- IsovarPhaseResolver renamed to ReadPhaseResolver. Constructor
accepts any ReadPhasingSource; routes mutant_transcript(...)
to the wrapped source when it also satisfies MutantTranscriptSource.
Returns None otherwise instead of raising.
- Resolver source tag changed from "isovar" to "read_phasing"
on ReadPhaseResolver. Consumers filtering effects by phase
source need to update their filter values.
- varcode.effects.effect_classes.PhaseAmbiguousEffect renamed to
PhaseCandidateSet. No deprecation alias — update imports
(#376).
Per #382, the public surface is .candidates (a
tuple[EffectCandidate, ...] with per-hypothesis evidence keys),
.most_likely_candidate / .most_likely_effect /
.highest_priority_candidate / .highest_priority_effect, and
.short_description.
Changed
- SpliceOutcomeSet serialization migrated onto serializable>=1.1.0's
standard introspection (the parallel SpliceCandidate dataclass that
also lived on this path has since been deleted per #382). The
__effect_class__ tagging and hand-rolled class registries
(_CODING_EFFECT_CLASS_REGISTRY, _SPLICE_SIGNAL_CLASS_REGISTRY,
_rehydrate_coding_effect) are gone; JSON round-trip now flows
through serializable.helpers' standard __class__ / __module__
stamping (#343).
SpliceOutcomeSet.to_dict / from_dict are overridden to stringify
the SpliceOutcome enum stored under
candidate.evidence["splice_outcome"] (and rehydrate it on the way
back) without mutating self mid-call, and to emit a single
candidates key on the wire (no parallel _candidates).
The JSON wire format is unchanged, but the pre-#305 migration
shim for the internal _ExonSkipFrameshiftEffect class has been
removed. JSON produced by varcode 2.4.x or earlier (which could
contain "__effect_class__": "_ExonSkipFrameshiftEffect" tags) will
no longer rehydrate; re-emit from the current annotator or hand-patch
those tags to FrameShift before loading. Anyone still reading such
payloads can pin varcode<4.7 or resurrect the shim in user code.
Changed
- README "Effect Types" section rewritten: 14 missing concrete
effect classes added (Failure, the splice mechanisms, the
structural-variant effects, CrypticExonCandidate,
HaplotypeEffect, PhaseCandidateSet), grouped into 7 sub-tables
by biological context, with a new intro explaining
MultiOutcomeEffect and how multi-possibility effects are
represented. Each class name links to its source definition via
GitHub text-fragment URLs that survive line-number drift.
- Documented and streamlined the splice-effect model: clarified that
SpliceSite effects (SpliceDonor / SpliceAcceptor /
IntronicSpliceSite / ExonicSpliceSite) describe where a splice
signal was hit and carry no protein consequence on their own, while
SpliceMechanismEffect subclasses describe what the spliceosome
does and carry the protein change. SpliceSite (previously an
undocumented marker base) is now the documented, load-bearing type:
enumerate_splice_outcomes gates on isinstance(effect, SpliceSite)
rather than enumerating the four subclasses. Documented the
SpliceOutcomeSet.disrupted_signal_class (a SpliceSite subclass,
i.e. a type, for priority lookup) vs each candidate's
effect.splice_signal (a SpliceSite instance) distinction.
No behavior change.
Added
- Docs site now has an "Effect types" page that auto-renders every
class in varcode.effects.effect_classes via mkdocstrings, so the
documented catalog stays in sync with the code (previously only the
abstract bases were in the API reference, while the full list lived
only in the hand-maintained README table).
- Exported the splice-signal disruption effects at the package root
for parity with the already-public splice mechanism effects:
SpliceSite (the shared base), SpliceDonor, SpliceAcceptor,
IntronicSpliceSite, and ExonicSpliceSite. from varcode import
SpliceSite now works, so isinstance(effect, SpliceSite) can be
used to catch any splice-site disruption without reaching into
varcode.effects.effect_classes.
v2.3.0 (2026-04-13)¶
Added
- Per-sample genotype / zygosity access (#267).
Genotype frozen dataclass, Zygosity enum (ABSENT/HETEROZYGOUS/HOMOZYGOUS/MISSING),
new VariantCollection methods .samples, .genotype(variant, sample),
.zygosity(variant, sample), .for_sample(name), .heterozygous_in(name),
.homozygous_alt_in(name). Multi-allelic aware: each split Variant
reports zygosity relative to its own alt.
- varcode.SampleNotFoundError(KeyError) raised on typoed sample names.
v2.2.1 (2026-04-13)¶
Fixed
- Ref-vs-genome mismatches now raise a dedicated
varcode.ReferenceMismatchError (subclass of ValueError) with an
actionable message naming the likely causes and pointing at
raise_on_error=False (#215,
#246).
v2.2.0 (2026-04-12)¶
Added
- from_csv now accepts either chr or contig as the contig column
name on both VariantCollection and EffectCollection, so CSVs are
interchangeable between the two types
(#274).
- from_csv warns on major varcode_version drift recorded in the
CSV header (#275).
Changed
- from_csv docstrings now point users at from_json for byte-for-byte
round-trip or larger collections
(#276).
v2.1.0 (2026-04-12)¶
Added
- VariantCollection.from_csv and EffectCollection.from_csv for
round-trip deserialization (#273).
- to_csv prepends a # key=value metadata header by default
(varcode_version, reference_name); from_csv reads it so the
genome argument becomes optional. Pass include_header=False for
legacy consumers.
Fixed
- VariantCollection.variants and EffectCollection.effects now
match the collection's iteration order instead of holding the raw
pre-sort / pre-dedup input list
(#220).
v2.0.0 (2026-04-11)¶
Major release — several backward-incompatible fixes. See #263 and #265 for full details.
Breaking
- Silent.short_description returns HGVS p.{ref}{pos}= (e.g.
p.R6=) instead of the literal "silent"
(#217).
- Silent.aa_pos no longer includes the shared-prefix offset; it now
points at the actual synonymous codon
(#208).
- PrematureStop.short_description returns p.{pos}ins{alt}* when
aa_ref is empty instead of the ambiguous p.{pos}{alt}*
(#216).
- EffectCollection is sorted by effect priority (most severe first)
by default. Pass sort_key=False to disable or a custom callable
to override (#227).
- Intronic splice classification is sequence-aware: variants at
+1/+2 or -1/-2 with a non-canonical reference base are
classified as IntronicSpliceSite rather than
SpliceDonor/SpliceAcceptor
(#262).
Fixed
- SNV in the stop codon with a stop-prefixed 3' UTR is correctly
classified as StopLoss instead of Insertion
(#250,
#205).
- Insertion before the stop codon that produces an identical protein
is correctly classified as Silent
(#201).
- changes_exonic_splice_site now applies the mutation before
checking the splice pattern (#262).
- VCF loader skips symbolic alleles (<DEL>, <CN0>, <INS:ME:ALU>,
...) and breakend notation with a visible warning instead of
crashing (#88).
Full SV support is tracked in #264.
v0.5.15 (2017-04-28)¶
Closed issues:
- Allow contig to be empty to allow parsing of MAF with faulty mutation(s) #210
Merged pull requests:
- Fixes to load_maf #223 (tavinathanson)
- added raise_on_error option to load_maf and load_maf_dataframe #221 (iskandr)
- Optionally allow duplicated mutations when using load_vcf or load_maf. Fixes #211 #212 (tuomastik)
v0.5.14 (2017-04-05)¶
Merged pull requests:
v0.5.13 (2017-04-01)¶
Closed issues:
- Effect prediction throws error (even if raise_on_error=False) #213
- Optionally allow duplicated mutations when using load_vcf or load_maf #211
Merged pull requests:
- install ensembl 87 on travis #219 (iskandr)
- Allow user to affect the sorting of variants when loading a VCF or MAF. #218 (tuomastik)
v0.5.12 (2017-01-18)¶
Closed issues:
- Make Varcode correctly infer genome for b37-decoy string #207
- Longer indels in random variants #47
- Predict coding sequence of StartLoss mutations #4
Merged pull requests:
- Add optional_cols list to load_maf #209 (tavinathanson)
v0.5.11 (2016-12-05)¶
Fixed bugs:
- Varcode noncoding variant in a drop_silent_and_noncoding() list #200
Merged pull requests:
v0.5.10 (2016-10-19)¶
Fixed bugs:
- Variant pickling won't work for not-human and non-EnsemblRelease Genomes #147
Closed issues:
- Link on PyPI badge broken #191
- Reference incorrectly inferred when "b36" in reference file path #181
- Premature stop codon error #166
Merged pull requests:
- explicit args to __init__ of Intronic splice effects fixes serialization #199 (iskandr)
- Update RELEASING.md, fixing tagging instructions #198 (julia326)
v0.5.9 (2016-10-11)¶
Fixed bugs:
- StopLoss pickling is broken #188
Closed issues:
Merged pull requests:
- One logger per module. #197 (julia326)
- Fix edge case where PrematureStop in last amino acid got interpreted as a Deletion #194 (iskandr)
- Fix inferred-reference-bug #182 (jburos)
v0.5.8 (2016-09-28)¶
Merged pull requests:
v0.5.7 (2016-09-28)¶
v0.5.3 (2016-09-28)¶
Merged pull requests:
- Use conda to install pypandoc #189 (arahuja)
- Ensure README.md is packaged #186 (arahuja)
- Upgrade serializable dependency with tests #185 (arahuja)
- Add pypi badge #184 (arahuja)
v0.5.2 (2016-09-28)¶
Closed issues:
- Make sure
Variantworks with any Genome (not just a human EnsemblRelease) #127
Merged pull requests:
- Move extraneous variables to properties for normalization #190 (tavinathanson)
- Use is_protein_coding property of pyensembl.Transcript and pyensembl.Gene #180 (iskandr)
v0.5.1 (2016-09-16)¶
Merged pull requests:
- Add MutationEffect to __init__.py #178 (timodonnell)
v0.5.0 (2016-09-13)¶
Implemented enhancements:
- Support collection.as_dataframe() #128
Closed issues:
- Substitution mis-annotated as stop-loss #176
- Wrong aa_mutation_end_offset for insertion of stop codon #175
- Wrong aa_ref for insertion of stop codon #174
- Insertions after the stop codon annotated as plain Insertions #172
- Mutations before the stop codon confused as StopLosses #171
- StopLosses do not translate into 3' UTR #170
- Insertion of stop codon is annotated as simple Insertion and not PrematureStop #169
- Synonimous FrameShift over stop codon not annotated as silent #168
- Wrong offset for insertion of StopCodon #167
- Document release process #154
- compare variants that use different references #83
- Annotate with predicted pathogenicity #46
Merged pull requests:
v0.4.19 (2016-09-12)¶
Fixed bugs:
- original_start doesn't get pickled #141
Closed issues:
- replace
load\_vcfwithload\_vcf\_fast? #144 - Add
annotate\_random\_variantscommandline script #49 - support filtering a variant collection to variants overlapping specified gene names #32
- Use SPANR to identify splicing misregulation #2
v0.4.18 (2016-08-08)¶
Closed issues:
- vcf unit tests broken in python 3 (?) #164
- maximum recursion depth exceeded when loading a vcf from a URL #163
Merged pull requests:
- In load_vcf, when passed a URL download it first to a local file then… #165 (timodonnell)
- Removed Collection from varcode, moved to separate 'sercol' repo instead #162 (iskandr)
v0.4.17 (2016-08-05)¶
Merged pull requests:
v0.4.16 (2016-07-30)¶
v0.4.15 (2016-07-15)¶
Fixed bugs:
- Fix clone_with_new_elements for VariantCollection #159 (tavinathanson)
Closed issues:
- load_vcf_fast fails when sample names contain spaces #158
Merged pull requests:
- Fix load_vcf_fast for sample names containing a space character #160 (timodonnell)
v0.4.14 (2016-06-07)¶
Merged pull requests:
v0.4.12 (2016-05-28)¶
v0.4.13 (2016-05-28)¶
Merged pull requests:
v0.4.11 (2016-05-27)¶
v0.4.10 (2016-05-27)¶
v0.4.9 (2016-05-27)¶
Closed issues:
- Add serialization for EffectCollection and VariantCollection #71
Merged pull requests:
v0.4.8 (2016-05-27)¶
Fixed bugs:
- Potentially wrong translated sequence from frameshift on mm10 #151
Closed issues:
- ExonicSpliceSite mutations are classified as Noncoding #136
- Filter field is not saved after loading a VCF #89
- investigate porting read evidence module to use impala #69
- Attach genotypes and other sample information to Variants #30
- support determining the evidence for a variant in a bam #26
Merged pull requests:
- Added unit tests for Klf6 frameshift, fix bug in frameshift translation #152 (iskandr)
- Add as_dataframe to EffectCollection #150 (arahuja)
- Use versioneer to manage version number #149 (arahuja)
- Fix pyvcf error from passing _parse_samples a tuple instead of a list #148 (timodonnell)
- Fix variant pickling #146 (tavinathanson)
- Parse and expose sample info, including for multisample VCFs #145 (timodonnell)
- Preserve contig name #140 (iskandr)
- Quotes around nucleotides in Variant representation #139 (iskandr)
- added is_deletion, is_insertion, and is_indel properties to variants #138 (iskandr)
v0.4.2 (2016-02-25)¶
Implemented enhancements:
- VariantCollection.high_priority_effect != Variant.top_effect #58
- Improves the documentation for varcode #110 (armish)
- Convert effect-type section into a sorted table #104 (armish)
- Start highlighting Python syntax in README #103 (armish)
Fixed bugs:
- Varcode requires pandas >= 0.13.1, however it uses 0.15 functionality #12 #92
- Varcode version 0.3.10 cannot be imported when installed through pip #90
- pip installing Varcode doesn't seem to work lately #84
- AttributeError: 'FrameShiftTruncation' object has no attribute 'aa_alt' #70
- Use find_packages correctly #85 (tavinathanson)
Closed issues:
- memoize a bit less #131
- Intragenic variants do not have a short_description field #129
- move read_evidence module and Locus class to varlens #124
- Support Structural Variants #122
- PrematureStop called as Silent #116
- PrematureStop called as a Deletion #111
- UnboundLocalError in in_frame_coding_effect.py #107
- Double mutations in a MAF file cause error #105
- varcode.load_vcf_fast used 0.16.1 Pandas options #101
- Configuring datacache default cache directory #98
- Improve the README to include some examples of working with Varcode in IPython #95
- support loading VCFs over HTTP #91
- Travis should include setup.py testing #86
- Make Variants pickle-able #77
- modifies_coding_sequence is always false #64
- AssertionError: aa_ref and aa_alt can't both be empty string #63
- Too many open files on error on getting top effect #62
- KeyError: 'reference' in load_vcf #60
- Issue with n_skip? #56
- Optional random seed argument for generating random variants #48
- An argument for using == and not >= for requirements? #43
- deploy a test coverage tool #38
- Replace raise_on_error parameter to property of VariantCollection #36
- assertion error in infer_coding_effect #33
- add a memoized "highest_priority_effect" property to Variant #31
- support deep reloading varcode module #25
- handle multiallelic variants #22
- vcf.load_vcf should provide an option to load all variants, regardless of whether filter is PASS #21
- empty variant collection when loading strelka vcf #16
- Incorrect handling of variants which run past the beginning/end of an exon's boundary #14
- Reference amino acid sequence sometimes empty for coding variants #12
- handle single-sample VCFs with INFO fields containing list values of size > 1 #9
- Do FrameShift (or StopGain) mutations affect splicing? #6
- What to do with mutations that span the 5' UTR / CDS boundary? #5
- Annotate essential splice site mutations #1
Merged pull requests:
- Modest change to filtering of coding mutations include ExonicSpliceSite #137 (iskandr)
- Version bump #135 (tavinathanson)
- Fix conda install on Travis #134 (iskandr)
- Don't memoize EffectCollection.top_priority_effect() #132 (timodonnell)
- All effects should have a default
short\_descriptionfield #130 (armish) - Remove read_evidence and locus modules #125 (timodonnell)
- Include a link to the iPython notebook in README.md #121 (armish)
- Add varcode to Travis #120 (tavinathanson)
- Minor problem in Variant.__init__ #119 (iskandr)
- Update Varcode to work with new multi-species PyEnsembl #118 (iskandr)
- Fix #116 and call PrematureStop when stop codon is added in the middle of an insertion #117 (leekaiinthesky)
- Warn when variants in MAF file have wrong end position #115 (iskandr)
- Bump pyensembl/varcode version #114 (tavinathanson)
- fix logic for determining whether the protein length decreases #112 (leekaiinthesky)
- decreasing 3' splice site to distance 3 from boundary #109 (iskandr)
- fixed typo in effect inference, added breaking variant to unit tests #108 (iskandr)
- Allow Varcode to work with mouse data via Genome #106 (tavinathanson)
- Manually set compression in read_vcf_into_dataframe #102 (timodonnell)
- Added examples to README #100 (iskandr)
- depend on pandas >= 0.15 #99 (iskandr)
- Faster VCFs loading, support HTTP, and refactored variant metadata #94 (timodonnell)
- Support for regular varcode variant instances in read evidence module #87 (timodonnell)
- Read and write json files #82 (iskandr)
- JSON serialization for VariantCollection. #81 (timodonnell)
- Add short_description field to intergenic variants #80 (timodonnell)
- Speed up PileupCollection.group_by_allele #79 (timodonnell)
- Variant serialization #78 (timodonnell)
- added option for genome name in load_vcf #76 (iskandr)
- Fix variant.effects() to always return an EffectCollection #75 (timodonnell)
- Bump pysam dependency #74 (timodonnell)
- Cufflinks RNA filtering #73 (iskandr)
- Read evidence tweaks #72 (timodonnell)
- Filter effect collection by expression #67 (iskandr)
- Created EpitopeCollection, refactored effects, fix assertion failure while annotating silent stop codon #66 (iskandr)
- Created EpitopeCollection, refactored effects #65 (iskandr)
- include substitution in high priority effects #61 (arahuja)
- don't annotate StopLoss variants that are immediately followed by another stop codon #57 (iskandr)
- Refactor coding effect #55 (iskandr)
- Add read_evidence module #53 (timodonnell)
- Use transcript protein sequence #45 (iskandr)
- Add contributing md #41 (iskandr)
- Small coding effect refactoring and fixes #39 (iskandr)
- Test problematic variants #37 (iskandr)
- Typechecks and test fixes #35 (timodonnell)
- Fix maf parsing #34 (iskandr)
- parse multiple alleles into distinct Variant records #29 (iskandr)
- PEP8 & pyflakes fixes #28 (iskandr)
- Remove pyfaidx #27 (iskandr)
- Variant collection tweaks #24 (timodonnell)
- Improved vcf parsing #23 (timodonnell)
- Associate EnsemblRelease with each Variant object #20 (iskandr)
- Variant collection filtering #19 (iskandr)
- added IntronicSpliceSite, SpliceDonor, SpliceAcceptor effects #17 (iskandr)
- collect effect annotation errors in dictionary, only look up overlapping... #13 (iskandr)
- don't flatten INFO dictionary of VCF, lists are part of the field format #11 (iskandr)
- Small fixes #10 (timodonnell)
- Add support for Python 3 #8 (timodonnell)
- Refactor core logic #7 (iskandr)
- Classes for protein/transcript variant effects #3 (iskandr)
* This Change Log was automatically generated by github_changelog_generator