Change Log¶
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