NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Cython bindings and Python interface to HMMER3.
Last release 1 months ago
19 Aug 2026
Release timing varies
gaps range from 9 days to 6 months
Nearly every release is documented
notes for 49 of 49 stable releases
12 versions withdrawn
withdrawn after publishing
6 years old
68 releases · first in 2020
One column per quarter.
Syntax error in plan7.pyi stubs ( #105 , by @aretasg ).
Segmentation fault in HMM.__eq__ for HMMs missing a creation_time ( #103 ).
HMM.__eq__ for HMMs missing a creation_time (#103).HMM.__eq__ for HMMs missing a creation_time (#103).Sequence.L property to get the length of a sequence consistently with HMM.M .
Sequence.L property to get the length of a sequence consistently with HMM.M.Matrix.flatten method to get a Vector over the whole C-contiguous buffer of a Matrix.allocM property to Profile and OptimizedProfile to get the allocated capacity.HMM.emit_sequence, HMM.emit_alignment and Profile.emit_sequence to generate sequences from a model (#102).gap_index, gap_symbol and type properties of Alphabet.Profile.transition_scores due to memory leak.SequenceFile.__init__ crashing on opening SSI indices for gzip-compressed files.Support for Windows AMD64 builds with MinGW ( #92 , see documentation ).
SequenceBlock.write method to write all sequences from a block to a file.SequenceBlock.total_length to compute the sum of lengths of sequences in a block.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.VectorI and MatrixI classes to pyhmmer.easel to store C int types (usually 32 bits).OptimizedProfile.ssv_filter method for NEON target in addition to SSE.msv_filter method to Profile and OptimizedProfile classes.Background.null1 to compute the null1 lod score for an arbitrary Sequence.HMMFile._file exposing the internal file-like object given to HMMFile constructor, if any (#89).SSIReader.primary_keys exposing a read-only sequence of primary keys inside a SSI file.SequenceFile.indexed and MSAFile.indexed to access data indexed with a SSI index (#85).scikit-build-core dependent packages.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.TextSequence constructor.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.Pipeline constructor when given a Background as argument.TopHits.merge potentially recomputing inclusion/reporting flags for hits obtained with bitscore cuttoffs.SSIReader missing methods in type stubs (#85).alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.Support for Windows AMD64 builds with MinGW ( #92 , see documentation ).
SequenceBlock.write method to write all sequences from a block to a file.SequenceBlock.total_length to compute the sum of lengths of sequences in a block.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.VectorI and MatrixI classes to pyhmmer.easel to store C int types (usually 32 bits).OptimizedProfile.ssv_filter method for NEON target in addition to SSE.msv_filter method to Profile and OptimizedProfile classes.Background.null1 to compute the null1 lod score for an arbitrary Sequence.HMMFile._file exposing the internal file-like object given to HMMFile constructor, if any (#89).scikit-build-core dependent packages.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.TextSequence constructor.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.Pipeline constructor when given a Background as argument.TopHits.merge potentially recomputing inclusion/reporting flags for hits obtained with bitscore cuttoffs.SSIReader missing methods in type stubs (#85).alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.Support for Windows AMD64 builds with MinGW ( #92 , see documentation ).
SequenceBlock.write method to write all sequences from a block to a file.SequenceBlock.total_length to compute the sum of lengths of sequences in a block.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.VectorI and MatrixI classes to pyhmmer.easel to store C int types (usually 32 bits).OptimizedProfile.ssv_filter method for NEON target in addition to SSE.msv_filter method to Profile and OptimizedProfile classes.Background.null1 to compute the null1 lod score for an arbitrary Sequence.HMMFile._file exposing the internal file-like object given to HMMFile constructor, if any (#89).scikit-build-core dependent packages.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.TextSequence constructor.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.Pipeline constructor when given a Background as argument.TopHits.merge potentially recomputing inclusion/reporting flags for hits obtained with bitscore cuttoffs.SSIReader missing methods in type stubs (#85).alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.SequenceBlock.write method to write all sequences from a block to a file.
SequenceBlock.write method to write all sequences from a block to a file.SequenceBlock.total_length to compute the sum of lengths of sequences in a block.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.VectorI and MatrixI classes to pyhmmer.easel to store C int types (usually 32 bits).OptimizedProfile.ssv_filter method for NEON target in addition to SSE.msv_filter method to Profile and OptimizedProfile classes.Background.null1 to compute the null1 lod score for an arbitrary Sequence.scikit-build-core dependent packages.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.TextSequence constructor.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.Pipeline constructor when given a Background as argument.TopHits.merge potentially recomputing inclusion/reporting flags for hits obtained with bitscore cuttoffs.SSIReader missing methods in type stubs (#85).alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.SequenceBlock.write method to write all sequences from a block to a file.
SequenceBlock.write method to write all sequences from a block to a file.SequenceBlock.total_length to compute the sum of lengths of sequences in a block.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.VectorI and MatrixI classes to pyhmmer.easel to store C int types (usually 32 bits).OptimizedProfile.ssv_filter method for NEON target in addition to SSE.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.TextSequence constructor.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.Pipeline constructor when given a Background as argument.alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.SequenceBlock.write method to write all sequences from a block to a file.
SequenceBlock.write method to write all sequences from a block to a file.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.SequenceBlock.write method to write all sequences from a block to a file.
SequenceBlock.write method to write all sequences from a block to a file.DNA, RNA and AA of pyhmmer.easel.Alphabet to allow marking the alphabet type with type annotations.str rather than bytes (#88).
Sequence into str instead of bytes: accession, description, name, source.MSA into str instead of bytes: accession, description, name, source, author, names, reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities.HMM, Profile and OptimizedProfile into str instead of bytes: name, accession, description.Alignment into str instead of bytes: hmm_name, hmm_accession, hmm_sequence, target_name, target_sequence.SequenceBlock.indexed and MSA.indexed mapping use str for keys instead of bytes.SSIReader and SSIWriter use str for keys and aliases instead of bytes.DigitalSequence, DigitalSequenceBlock, DigitalMSA, SequenceFile, MSAFile, HMM, Profile, OptimizedProfileBlock, Background, Builder, Pipeline, HMMFile, HMMPressedFile generic over the alphabet type._from_raw_bytes class constructors of various objects.PyUnicode_DecodeASCII to decode ASCII strings of known length instead of PyUnicode_FromString where applicable.hmmlogo.c from compiled HMMER sources to avoid an issue with the presence of a main function when linking.multiprocessing.Value in pyhmmer.hmmer while in single-threaded mode for improved compatibility.Matrix caused by outdated allocation logic for zero dimensions.HMMFile constructor pretend to stream when given a file-like object to prevent HMMER from calling fseek and ftell.MSA property setters.alphabet in TextMSA, DigitalMSA, TextSequence and DigitalSequence constructors.Nothing published for this version
[v0.11.4]: https://github.com/althonos/pyhmmer/compare/v0.11.3...v0.11.4
hmmalign.TestMSA.compute_weights documentation (#96).Trace.__eq__ exiting the interpreter on inequality (EddyRivasLab/hmmer#344).Traces more similar to SequenceBlock and implement list-like interface (append, extend, clear, ...).[v0.11.3]: https://github.com/althonos/pyhmmer/compare/v0.11.2...v0.11.3
VectorD and MatrixD classes for double-precision data.__abs__ implementations for floating-point Vector and Matrix types.MSA.sequence_weights to access the sequence weights of an alignment.MSA.compute_weights to compute the sequence weights of an alignment like esl-weight (#94)MSA.mark_fragments method to identify fragmented sequences in an alignment.DigitalMSA.reverse_complement method to reverse-complement a nucleotide alignment.TextMSA and DigitalMSA constructors now default-initialize the sequence weights of the Easel alignment.psutil dependencies to allow versions past 5.0.ValueError exceptions in pyhmmer.easel with more specific InvalidParameter errors.[v0.11.2]: https://github.com/althonos/pyhmmer/compare/v0.11.1...v0.11.2
Deprecate positional arguments in TextSequence, DigitalSequence, TextMSA and DigitalMSA constructors.
DigitalMSA.identity_filter method to remove sequences too similar from a multiple sequence alignment (#84).reference, model_mask, secondary_structure, surface_accessibility, posterior_probabilities properties of MSA to get and set additional column annotation for a sequence alignment.MSA.select to select a subset of columns and rows of a sequence alignment given an iterable of indices.hmmsearch suitable for low query counts to parallelize on target chunks rather than individual queries (more similar to original HMMER).TextSequence.sample and DigitalSequence.sample constructors to generate random sequences for testing.DigitalMSA.sample constructor to generate a random multiple sequence alignment for testing.MSA.indexed and SequenceBlock.indexed to get the sequences of an alignment or block by name.DigitalMSA.alignment to get the rows of an alignment in digital mode as VectorU8 objects.pyhmmer.tests.data to reduce distribution size.Pipeline search methods.Builder.build_msa on input format errors.TextSequence, DigitalSequence, TextMSA and DigitalMSA constructors.pyhmmer.hmmer dispatchers.None to HMM.sample.collections.abc.Sequence classes to expose MSA.sequences instead of Cython class.collections.abc.Sequence classes to expose TextMSA.alignment instead of generating a tuple on demand.psutil dependency to support both 6.0 and 7.0.Pipeline methods not raising errors on unsupported targets (#87).Matrix.__getitem__ raising IndexError when slicing with a slice without upper bound.TopHits.merge not properly merging book-keeping attributes when merging TopHits with zero hits.TopHits.merge when the query was an OptimizedProfile.pyhmmer.hmmer background workers.TextMSA.sequences due to Easel bug in esl_sq_FetchFromMSA (EddyRivasLab/easel#80).Deprecated properties of TopHits (query_name, query_length, query_accession).
LongTargetsPipeline.__len__ implementation for HMMPressedFile using the entries in the SSI index.HMM.pyhmmer.hmmer in addition to thread-based.TextSequence and DigitalSequence classes.scikit-build-core to build the package instead of setuptools.TypedDict API to mark allowed keyword arguments in pyhmmer.hmmer functions.pyhmmer.hmmer.SequenceFile to most pyhmmer.hmmer functions.PyUnicode_FromStringAndSize function to decode strings of known lengths in several plan7 classes.SequenceFile and MSAFile generic on the individual sequence and MSA types.pyhmmer.hmmer into different submodules.typing-extensions for Python3.8 to 3.10.TopHits.__getstate__.Pipeline object when running single-threaded searches in pyhmmer.hmmer.SequenceFile type based on the digital flag value (#72).TopHits (query_name, query_length, query_accession).Deprecate old query properties of TopHits (query_name, query_length, query_accession).
query property TopHits referencing the original object used to create the TopHits #76.TopHits object.TopHits generic over its query property.TopHits (query_name, query_length, query_accession).setup.py (#71).[v0.10.14]: https://github.com/althonos/pyhmmer/compare/v0.10.13...v0.10.14
setup.py for possible performance gains on x86 platforms.pydata-sphinx-theme.[v0.10.13]: https://github.com/althonos/pyhmmer/compare/v0.10.12...v0.10.13
AlphabetMismatch error to allow for an unknown actual alphabet.HMMFile and HMMPressedFile raise AlphabetMismatch on files with mixed alphabets.fclose with null pointers in Sequence.write and MSA.write.[v0.10.12]: https://github.com/althonos/pyhmmer/compare/v0.10.11...v0.10.12
HMM.__setstate__ not properly extracting the cutoff from pickle state for some HMMs (#67).[v0.10.11]: https://github.com/althonos/pyhmmer/compare/v0.10.10...v0.10.11
[v0.10.10]: https://github.com/althonos/pyhmmer/compare/v0.10.9...v0.10.10
write function for fopencookie with off_t instead of off64_t for compatibility.read and write methods of fopencookie.[v0.10.9]: https://github.com/althonos/pyhmmer/compare/v0.10.8...v0.10.9
nhmmer with more than 64 sequences (#62).[v0.10.8]: https://github.com/althonos/pyhmmer/compare/v0.10.7...v0.10.8
Domain produced by a LongTargetsPipeline.MissingCutoffs error message, if any.LongTargetsPipeline to be configured with window length and beta parameters.nhmmer use the window length and beta from the options when creating a Builder.nhmmer not computing E-values for non-default window lengths (moshi4/pybarrnap#2).SequenceFile and MSAFile crashing with a segmentation fault when given the path to a folder rather than a file.[v0.10.7]: https://github.com/althonos/pyhmmer/compare/v0.10.6...v0.10.7
__getbuffer__ method of Matrix and Vector objects.importlib-resources.pyhmmer.hmmer dispatchers possibly dead-locking on background thread errors (#60).[v0.10.6]: https://github.com/althonos/pyhmmer/compare/v0.10.5...v0.10.6
armv7 and aarch64 to the PKGBUILD architectures.SSIReader and SSIWriter constructors now accept path-like objects.importlib.resources.files when it is not available on the host machine.Pipeline._scan_loop_file.[v0.10.5]: https://github.com/althonos/pyhmmer/compare/v0.10.4...v0.10.5
Alignment properties to get the original lengths of the sequence and HMM being stored.Hit.length property storing the length of the hit sequence (or HMM).TopHits.query_length storing the length of the hit HMM (or query).Alignment.posterior_probabilities property showing an encoded representation of posteriors (#59, by @arajkovic).Trace.score method to compute a trace score from a given profile and sequence.Alignment.__sizeof__ implementation leveraing p7_alidisplay_SizeOf.Cutoffs proxy objects not recording their owner to prevent deallocation.GeneticCode.translate.Hits obtained from daemon.Client.MatrixU8 creation attempting zero-allocation.VectorU8.zeros allocating 4x more memory than required.__getbuffer__ methods of Matrix and Vector types.[v0.10.4]: https://github.com/althonos/pyhmmer/compare/v0.10.3...v0.10.4
residue_markups argument to TextSequence and DigitalSequence constructors.__reduce__ implementation to TextSequence, DigitalSequence, TextSequenceBlock and DigitalSequenceBlock.easel I/O methods to avoid implicit GIL acquisition for error checking.[v0.10.3]: https://github.com/althonos/pyhmmer/compare/v0.10.2...v0.10.3
Bitfield objects.float attributes and forward/backward parameters of OptimizedProfile.InvalidHMM error raised by HMM.validate.HMM.zero method as noexcept.hmmer dispatcher.pyhmmer.hmmer message passing implementation.Bitfield._from_raw_bytes.TraceAligner.align_traces.[v0.10.2]: https://github.com/althonos/pyhmmer/compare/v0.10.1...v0.10.2
DigitalSequenceBlock.translate (#50).[v0.10.1]: https://github.com/althonos/pyhmmer/compare/v0.10.0...v0.10.1
HMM.set_consensus method to set the consensus for a method or compute it from the emission probabilities.setup.py.pyhmmer.plan7.HMM constructor setting a consensus string forcefully.[v0.10.0]: https://github.com/althonos/pyhmmer/compare/v0.9.0...v0.10.0
v3.4.v0.49.cibuildwheel to build wheel distributions.PyInterpreterState_GetID preventing the package from working on PyPy 3.9.[v0.9.0]: https://github.com/althonos/pyhmmer/compare/v0.8.2...v0.9.0
[v0.8.2]: https://github.com/althonos/pyhmmer/compare/v0.8.1...v0.8.2
repr implementation to HMM, Profile and OptimizedProfile showing model alphabet, length and name.MissingCutoffs and InvalidParameter exceptions inheriting ValueError.pthread locks with PyThread API for synchronizing models in OptimizedProfileBlock.LongTargetsPipeline.search_hmm (#42).LongTargetsPipeline.search_msa not building a HMM with Builder.build_msa.[v0.8.1]: https://github.com/althonos/pyhmmer/compare/v0.8.0...v0.8.1
HMM.validate method to ensure a HMM holds HMMER structural constraints.plan7.Transitions enum with transition names for indexing HMM.transition_probabilities.Deprecated ignore_gaps argument in SequenceFile.__init__.
PyHMMER has been accepted for publication in Bioinformatics. Paper can be reached at doi:10.1093/bioinformatics/btad214.
pyhmmer.hmmer.jackhmmer function to run several JackHMMER iterative searches in parallel using multithreading (#35, by @zdk123).HMM.to_profile shortcut method to allocate and configure a new Profile object.Pipeline.iterate_seq and Pipeline.iterate_hmm.HMMPressedFile.read.Offsets.profile not recording offsets properly, causing pyhmmer.hmmer.hmmpress to produce invalid pressed files (#37).HMM.__init__ and HMM.sample now take the Alphabet as the first argument, for consistency with the rest of the API.HMM now require a name argument.ignore_gaps argument in SequenceFile.__init__.Sequence.taxonomy_id property.[v0.7.4]: https://github.com/althonos/pyhmmer/compare/v0.7.3...v0.7.4
TraceAligner methods causing a segfault when passed an uninitialized HMM (#36).HMM default constructor now always creates a valid HMM (with respects to probability arrays).TraceAligner now validates the input HMM before calling the HMMER code.bytearray objects where applicable.[v0.7.3]: https://github.com/althonos/pyhmmer/compare/v0.7.2...v0.7.3
[v0.7.2]: https://github.com/althonos/pyhmmer/compare/v0.7.1...v0.7.2
easel.GeneticCode class wrapping an ESL_GENCODE struct for configuring translation.DigitalSequence.translate method to translate a nucleotide sequence to a protein sequence. Metadata is copied from the source sequence to its translation (#31, by @valentynbez).Sequence.taxonomy_id property, as it is not used by Easel and implementation is not consistent (see EddyRivasLab/easel#68).[v0.7.1]: https://github.com/althonos/pyhmmer/compare/v0.7.0...v0.7.1
__reduce__ method to TopHits.setup.py.[v0.7.0]: https://github.com/althonos/pyhmmer/compare/v0.6.3...v0.7.0
Bitfield.zeros and Bitfield.ones classmethods for constructing an empty bitfield of known size.Bitfield.copy method to copy a bitfield object.SequenceBlock and OptimizedProfileBlock classes to store Python objects next to a contiguous array of pointers for iterating with the GIL released.SequenceFile.read_block method to read a whole sequence block from a file.HMM.sample class method to generate a HMM at random given a Randomness source.hmmscan function to scan a profile database with sequence queries.deepcopy implementations to HMM, Profile and OptimizedProfile classes of plan7.rewind method to HMMFile, HMMPressedFile and SequenceFile to reset a file back to its initial position.name attribute to HMMFile, HMMPressedFile, MSAFile and SequenceFile to expose the path of a file (when it was created from path).local property to Profile and OptimizedProfile, indicating whether a profile is in local or global mode.multihit property to Profile and OptimizedProfile, indicating whether a profile is in unihit or multihit mode, with a setter taking care of the reconfiguration.Domain.included and Domain.reported settable properties to report the inclusion and reporting status of a single domain.TopHits.included and TopHits.reported sized iterator to iterate only on included and reported hits.Domains.included and Domains.reported sized iterator to iterate only on included and reported domains.Bitfield, Vector and Matrix can now be created from an iterable.Pipeline search methods now expect a DigitalSequenceBlock or a SequenceFile for the target sequence database.Pipeline scan methods now expect an OptimizedProfileBlock or a HMMPressedFile for the target profile database.TraceAligner now expect a DigitalSequenceBlock for the sequences to align to the HMM.Profile.configure now uses a default value of 400 for the L argument.hmmsearch, nhmmer and phmmer support being given a single query instead of requiring an iterable.HMMPressedFile can now be created, closed and used as a context manager directly without having to manage the source HMMFile.Profile.optimized method to Profile.to_optimized.Randomness.is_fast method with the Randomness.fast property.Hit flags using settable properties (Hit.included, Hit.reported, Hit.new, Hit.dropped, Hit.duplicate) instead of methods.LongTargetsPipeline search loop.readinto methods now expecting unsigned char* instead of char* memoryview.NULL-pointer dereference in Pipeline.search_hmm when given a query without name.LongTargetsPipeline not recording the query name and accession.Builder.PipelineSearchTargets, replaced in functionality with easel.DigitalSequenceBlock.is_local and is_multihit methods of Profile and OptimizedProfile, replaced with equivalent properties.Hit.manually_drop and Hit.manually_include methods, replaced with the different Hit properties.[v0.6.3]: https://github.com/althonos/pyhmmer/compare/v0.6.2...v0.6.3
SequenceFile or MSAFile.DigitalSequence constructor to make sure encoded characters are in valid range (#25).SequenceFile.guess_alphabet and MSAFile.guess_alphabet to guess the alphabet from an open file.Alphabet.encode and Alphabet.decode to convert raw sequences between digital and text format.[v0.6.2]: https://github.com/althonos/pyhmmer/compare/v0.6.1...v0.6.2
hmmsearch, phmmer and nhmmer functions will reduce the requested number of threads to the number of queries, if it can be detected using operator.length_hint.HMMFile object at once (#23).Examples page of the documentation.[v0.6.1]: https://github.com/althonos/pyhmmer/compare/v0.6.0...v0.6.1
pickle protocol support for TopHits objects, using the HMMER network serialization.TopHits.write method to write hits to a file in tabular format.query_name and query_accession properties to TopHits objects to access the name and accession of the query that produced the hits.HMMFile constructor.os.cpu_count instead of multiprocessing.cpu_count where applicable to preserve OS scheduling.HMM.insert_emissions.TopHits.searched_nodes returning the searched number of residues instead of the searched number of model nodes.MatrixF or VectorF when data comes from a source of different endianness.pyhmmer.hmmer threading code using Deque instead of collections.Queue to store the queries and results.pyhmmer.hmmer by reducing the number of semaphores and event flags used concurrently.pyhmmer.hmmer main threads block on query insertion rather than result retrieval to make sure worker threads are never idling.ignore_gaps argument of easel.SequenceFile is now deprecated.
pyhmmer.daemon module with an client implementation to communicate to a hmmpgmd server.Pipeline.arguments methods to get a list of CLI arguments from the parameters used to initialize the Pipeline.name, accession and description properties of plan7.Hit.plan7.Trace objects outside a plan7.Traces list.plan7.Trace.from_sequence constructor to create a faux trace from a single sequence.manually_include and manually_drop methods to plan7.Hit for manually selecting the inclusion status of a Hit in a TopHits instance.compare_ranking method to plan7.TopHits for comparing the order of the hits compared to a previous run on the same targets stored in an easel.KeyHash object.Pipeline.iterate_seq and Pipeline.iterate_hmm to run iterative queries like JackHMMER.repr implementations for easel.MSAFile, easel.SequenceFile and easel.HMMFile showing the path or file object they were created from.repr implementation for easel.Randomness showing the seed and the RNG algorithm in use.str implementation for plan7.Alignment using HMMER original code to display a domain alignment like in search/scan results.plan7.Trace.posterior_probabilities property may now be None in case no memory is allocated for the posteriors in the P7_TRACE struct.TopHits.to_msa can now add additional sequences passed as arguments to the alignment.plan7.HMMPressedFile now raises an exception on attempts to create a new instance manually.ignore_gaps argument of easel.SequenceFile is now deprecated.repr implementations for easel types now use the fully qualified class name.easel.SequenceFile.readinto docstring not rendering properly in documentation.hits_included and hits_reported of plan7.TopHits marking these properties as bool instead of int.name, accession, description and author properties of easel.MSA crashing when given None values.easel.TextSequence and easel.TextMSA constructors where byte strings are expected (#20).[v0.5.0]: https://github.com/althonos/pyhmmer/compare/v0.4.11...v0.5.0
plan7.PipelineSearchTargets to reduce the overhead when searching the same sequences several times with different. query profiles.TopHits.copy method to duplicate a TopHits instance.TopHits.merge method to merge hits obtained with the same query on different targets.pyhmmer.easel.Bitfield.TopHits.included and TopHits.reported properties to TopHits.hits_included and TopHits.hits_included.MSAFile and SequenceFile are now directly in digital mode if they are instantiated with digital=True.SequenceFile.parse can now return a sequence in digital mode.memcpy in contexts where it may have had undefined behaviour.VectorF.__eq__ crashing when comparing two empty objects.SequenceFile and MSAFile not closing file handles when raising an error in __init__.[v0.4.11]: https://github.com/althonos/pyhmmer/compare/v0.4.10...v0.4.11
plan7.HMMFile.read method to read a single plan7.HMM from an plan7.HMMFile (instead of using next).closed property on easel.SequenceFile, easel.MSAFile and plan7.HMMFile to mark whether a file object is closed.plan7.HMMFile.is_pressed method to check whether a HMM file has associated pressed data.plan7.HMMFile.optimized_profiles methods to read the plan7.OptimizedProfile entries in an plan7.HMMFile is there are associated pressed data available.name, accession, description, consensus, consensus_structure, evalue_parameters and cutoffs properties of a plan7.OptimizedProfile.plan7.OptimizedProfile.__eq__ implementation to compare two optimized profiles.__sizeof__ implementations for plan7.OptimizedProfile and plan7.Profile to get the allocated size of a profile.easel.Randomness, easel.Vector, easel.Matrix, plan7.Cutoffs, plan7.EvalueParameters, plan7.Offsets, plan7.Trace)plan7.Hit.description using the pointer to the accession string erroneously, causing occasional NULL dereference.plan7.OptimizedProfile.copy performing a shallow copy instead of a deep copy as expected.pyhmmer.hmmer type annotations now explicit support for plan7.Profile or plan7.OptimizedProfile inputs where applicable.[v0.4.10]: https://github.com/althonos/pyhmmer/compare/v0.4.9...v0.4.10
entropy and relative_entropy methods to easel.VectorF to compute the Shannon entropy of a vector and the Kullback-Leibler divergence of two vectors.mean_match_entropy, mean_match_information and mean_match_relative_entropy methods to plan7.HMM to get information statistics of an HMM model.match_occupancy method to plan7.HMM to compute the occupancy for each match state as an easel.VectorF.plan7.Builder.build_msa using the gap-open and gap-extend probabilities instead of the MSA itself to compute the transition probabilities for the new HMM.plan7.Builder.build will now only load the score system once and reuse it unless a different score system is requested between calls.[v0.4.9]: https://github.com/althonos/pyhmmer/compare/v0.4.8...v0.4.9
plan7.ScoreData class to store the substitution scores and maximal extensions for a long target search.plan7.LongTargetsPipeline to run searches on targets longer than 100,000 residues.Alphabet methods to check whether an Alphabet object is a DNA, RNA, nucleotide or protein alphabet.window_length and window_beta arguments to plan7.Builder to set the max length of nucleotide HMM created by builder objects.pyhmmer.hmmer.nhmmer now uses a LongTargetsPipeline instead of a Pipeline to search the target sequences.pyhmmer.hmmer.nhmmer now supports HMM queries in addition to DigitalSequence and DigitalMSA queries.pyhmmer.hmmer.phmmer now always assumes protein queries.Z and domZ attributes of plan7.TopHits objects is now read-only.nhmmer now uses DNA as the default alphabet instead of amino acid alphabet like it did before (#12).[v0.4.8]: https://github.com/althonos/pyhmmer/compare/v0.4.7...v0.4.8
plan7.Pipeline to support bit score thresholds instead to filter top hits.SequenceFile and an MSAFile using a Python file-like object instead of only supporting filenames.SequenceFile.TextMSA.alignment to access the actual alignment as a tuple of strings.easel.Vector subclassesplan7.Cutoffs now support setting the bit score cutoffs, but requires both to be set or cleared at the same time.easel.Vector will always allocate some memory when created manually to avoid having a special empty case in every vector method.pyhmmer.easel.AllocationError now stores the size it failed to allocate, and the number of elements when allocating an array.TextSequence.digitize will not raise a ValueError when the sequence contains invalid characters for the alphabet (previously was an UnexpectedError).[v0.4.7]: https://github.com/althonos/pyhmmer/compare/v0.4.6...v0.4.7
TraceAligner, Trace and Traces classes to pyhmmer.plan7 to get tracebacks after aligning several sequences against an HMM.pyhmmer.hmmalign function with the same features as the hmmalign binary from HMMER3.easel.Vector and easel.Matrix.Vector or Matrix by calling their constructor without arguments.plan7.OptimizedProfile.write and several plan7.SSIWriter methods.[v0.4.6]: https://github.com/althonos/pyhmmer/compare/v0.4.5...v0.4.6
pickle protocol for easel.Alphabet, easel.Bitfield, easel.KeyHash, easel.Vector, easel.Matrix and plan7.HMM.taxonomy_id and residue_markups properties to easel.Sequence.sum_score property to plan7.Hit.plan7.EvalueParameters class to expose the e-value parameters of a plan7.HMM or a plan7.Profile.easel.Matrix and easel.Vector.easel matrices and vectors.plan7.Cutoffs class to expose the Pfam score cutoffs of a plan7.HMM or a plan7.Profile.plan7.Pipeline object.plan7.Pipeline.pyhmmer.hmmer to ensure background threads exit on a KeyboardInterrupt.easel.VectorU8.__eq__ accepts any object implementing the buffer protocol.plan7.HMM.creation_time now takes and returns a datetime.datetime object, assuming the field is only ever set with asctime.easel.Vector and easel.Matrix and mark exposed memory as C-contiguous.easel.Alphabet not reporting potential allocation errors.easel.Matrix and easel.Vector when calling __init__ more than once.[v0.4.5]: https://github.com/althonos/pyhmmer/compare/v0.4.4...v0.4.5
OptimizedProfile.convert method to configure an optimized profile from a Profile without reallocating a new P7_OPROFILE struct.plan7.Pipeline search loop to avoid reacquiring the GIL between reference sequences.search_hmm, search_msa and search_seq methods of plan7.Pipeline.OptimizedProfile every time a new HMM is passed to Pipeline.search_hmm.TopHits in Pipeline search methods.[v0.4.4]: https://github.com/althonos/pyhmmer/compare/v0.4.3...v0.4.4
ignore_gaps parameter to pyhmmer.plan7.SequenceFile, allowing to skip the gap characters when reading a sequence from an ungapped format.__sizeof__ implementation for somepyhmmer.plan7.Pipeline.pyhmmer.plan7.Builder.build_msa.Pipeline search and scan methods.[v0.4.3]: https://github.com/althonos/pyhmmer/compare/v0.4.2...v0.4.3
[v0.4.2]: https://github.com/althonos/pyhmmer/compare/v0.4.1...v0.4.2
pyhmmer.easel.Randomness class exposing a deterministic random number generator.pyhmmer.plan7.Builder.randomness and pyhmmer.plan7.Pipeline.randomness attributes exposing the internal random number generator used by each object.pyhmmer.plan7.Hit.best_domain property mapping to the highest scoring domain of a hit.pyhmmer.plan7.OptimizedProfile.rbv property exposing match scores.pyhmmer.plan7.Domain.pvalue and pyhmmer.plan7.Hit.pvalue reporting the p-value for a domain or hit bitscore.pyhmmer.plan7.OptimizedProfile.sbv matrix not being properly set.[v0.4.1]: https://github.com/althonos/pyhmmer/compare/v0.4.0...v0.4.1
MatrixF.__dealloc__ and MatrixU8.__dealloc__ when created without owner.pyhmmer.plan7.Pipeline as both constructor arguments and mutable properties.consensus, consensus_structure and offsets properties to pyhmmer.plan7.Profile objects.OptimizedProfile.ssv_filter check the alphabet of the given sequence.[v0.4.0]: https://github.com/althonos/pyhmmer/compare/v0.3.1...v0.4.0
Vector) and 2D (Matrix) contiguous buffers containing numerical values to pyhmmer.easel.Z and domZ parameters of the pyhmmer.plan7.Pipeline constructor.pyhmmer.errors.AlphabetMismatch exception deriving from ValueError to specifically report mismatching Easel alphabets where applicable.scale and normalize methods to pyhmmer.plan7.HMM objects.pyhmmer.plan7.Background residue frequencies as a VectorF object.pyhmmer.plan7.HMM mean residue composition as a VectorF object.pyhmmer.plan7.HMM probabilities and emissions as MatrixF objects.ssv_filter methods to pyhmmer.plan7.OptimizedProfile to get the SSV filter score of the profile for a given sequence.pyhmmer.plan7.OptimizedProfile internals.report_e parameter of pyhmmer.plan7.Pipeline constructor.pyhmmer.plan7.TopHits.clear method which could lead to segfault if it was called while a Hit is being held.pyhmmer.hmmer to reduce memory consumption while still yielding hits in order.pyhmmer.easel.DigitalSequence.sequence property is now a VectorU8.pyhmmer.hmmer.pyhmmer.plan7.HMM.command_line property setter.pyhmmer.plan7.Builder constructor.TextMSA.digitize caused by esl_msa_Copy not digitizing on-the-fly like esl_sq_Copy.pyhmmer.plan7.Profile and pyhmmer.plan7.TopHits.[v0.3.1]: https://github.com/althonos/pyhmmer/compare/v0.3.0...v0.3.1
Pipeline.scan_seq method to query a database of profiles with one or more sequences.transition_probabilities, match_emissions, insert_emissions properties to the HMM class, providing access to the numerical parameters of the HMM.consensus_structure and consensus_accessibility properties to the HMM class to get consensus lines from the source alignment if the HMM was created from a MSA.nseq and nseq_effective properties to the HMM class to get the number of training sequences and effective sequences used to build the HMM.HMM.checksum is now None if the p7H_CHKSUM flag is not set.Builder methods will now record sys.argv when creating a HMM.HMM.write(..., binary=False) crashing on HMMs without a consensus line. (#5). Fixed upstream in (EddyRivasLab/HMMER#236).Pipeline.reset mishandling the Z and domZ values if those were detected from the number of targets.pyhmmer.hmmer functions will not block until all results have been collected anymore when run in multithreaded mode.[v0.3.0]: https://github.com/althonos/pyhmmer/compare/v0.2.2...v0.3.0
easel.MSAFile to read from a file containingaccession, author, name and description properties to easel.MSA objects.plan7.Builder.build_msa to build a pHMM from a sequence alignment.easel.KeyHash, allowing to use it as a dict/set hybrid.Sequence.write and MSA.write methods to format a sequence or an alignment to a file handle.plan7.TopHits.to_msa method to convert all the top hits of a query against a database into a multiple sequence alignment.easel.MSA.sequences attribute to access individual sequences of an alignment using the collections.abc.Sequence interface.easel.DigitalMSA.textize method to convert a multiple sequence alignment in digital mode to its text-mode counterpart.name, accession and description properties to plan7.Profile showing attributes inherited from the HMM it was configured with.plan7.HMM.consensus property, allowing to access the consensus sequence of a pHMM.plan7.HMM equality implementation, using zero tolerance.plan7.Pipeline.search_msa to query a MSA against a sequence database.easel.Sequence.reverse_complement method allowing to reverse-complement inplace or to build a copy.errors.AlphabetMismatch exception for use in cases where an alphabet is expected but not matched by the input.hmmer.nhmmer function with the same behaviour as hmmer.phmmer, except it expects inputs with a DNA alphabet.plan7.Builder.copy not copying some parameters correctly, causing pyhmmer.hmmer.phmmer to give inconsistent results in multithreaded mode.easel.Bitfield not properly handling index overflows.__init__ method of all classes.plan7.Builder gap-open and gap-extend probabilities are now set on instantiation and depend on the alphabet type.easel.TextMSA and easel.DigitalMSA, which can now be given an iterable of easel.Sequence objects to store in the alignment.easel.SequenceFile.fetch and easel.SequenceFile.fetchinto methods.Your coding agent can read these notes before it upgrades. Set up the MCP server →