Skip to content

Releases: seqan/seqan3

SeqAn 3.4.0-rc.2

13 Dec 17:48
3.4.0-rc.2
7ee8398
Compare
Choose a tag to compare
SeqAn 3.4.0-rc.2 Pre-release
Pre-release

This is the second release candidate for SeqAn 3.4.0

What's Changed

Click to expand

Full Changelog: 3.4.0-rc.1...3.4.0-rc.2

SeqAn 3.4.0-rc.1

22 Jan 16:44
3.4.0-rc.1
ee718d0
Compare
Choose a tag to compare
SeqAn 3.4.0-rc.1 Pre-release
Pre-release

This is the first release candidate for SeqAn 3.4.0

SeqAn 3.4.0 offers support for GCC 11/12/13, and new clang 17

Changelog

SeqAn 3.3.0

17 Aug 11:13
3.3.0
6b681fb
Compare
Choose a tag to compare

GitHub commits since tagged version (branch)

We are glad to announce the SeqAn 3.3.0 release that has a major compiler update:

We dropped GCC 10 and we added GCC 13 support.

While we will present essential changes of the 3.3.0 release in this message, you can also find a comprehensive list of the changes in our changelog.

🎉 New Features

Alignment

  • The function seqan3::alignment_from_cigar creates an alignment from a CIGAR vector (#3057) or a CIGAR string (#3077).
  • The function seqan3::cigar_from_alignment creates a CIGAR vector from an alignment (#3057).

Alphabet

  • Improved performance of vector assignment for alphabets by a factor 2.5 (#3038).
  • Improved performance of seqan3::dna4::complement() (#3026).
  • Char literals returning std::vector are now constexpr if supported by the compiler (#3073).

I/O

  • Made seqan3::sam_file_header::program_info_t easier to copy (#3145).
  • Reading SAM/BAM files is 2x faster than before (#3106).

Search

  • The uncompressed seqan3::interleaved_bloom_filter (IBF) can now be constructed from a compressed IBF (#3082).

🐛 Notable bug fixes

Alignment

  • Resolved an issue resulting in a wrong alignment score (#3098).

I/O

  • Fixed writing an empty SAM-BAM file resulting in an invalid file (#3081).
  • seqan3::sequence_file_input_traits now allows char as a sequence alphabet (#3128).

Utility

  • Fixed spin delay having no effect on the PowerPC platform (#3129).

🛠️ Notable API changes

Alignment

  • The fields seqan3::field::offset and seqan3::field::alignment have been removed from seqan3::sam_record (#3058, #3089).
    For seqan3::field::offset, please check the soft clipping of the CIGAR string (seqan3::sam_record::cigar()).
    For seqan3::field::alignment, please use seqan3::alignment_from_cigar.

🔌 External dependencies

  • Dropped support for GCC 10 (#3148).
  • Added support for GCC 13 (#3148).
  • We require at least CMake 3.16 for our test suite. Note that the minimum requirement for using SeqAn3 is unchanged (#3050).
  • We now use Doxygen version 1.9.6 to build our documentation (#3116).
  • Updated sdsl-lite to 3.0.3 (#3170, #3174).
  • Compatibility with SeqAn2: SeqAn2's namespace was changed from seqan to seqan2. For interoperability, an up-to-date checkout of SeqAn2's main branch is required (#3156).

SeqAn 3.3.0-rc.2

09 Aug 16:59
3.3.0-rc.2
05c4347
Compare
Choose a tag to compare
SeqAn 3.3.0-rc.2 Pre-release
Pre-release

This is the second release candidate for SeqAn 3.3.0

Changelog

SeqAn 3.3.0-rc.1

17 Jul 10:36
3.3.0-rc.1
3423ad5
Compare
Choose a tag to compare
SeqAn 3.3.0-rc.1 Pre-release
Pre-release

This is the first release candidate for SeqAn 3.3.0

Changelog

SeqAn 3.2.0

20 Jun 14:03
3.2.0
84938ed
Compare
Choose a tag to compare

GitHub commits since tagged version (branch)

We are excited to announce the SeqAn 3.2.0 release that has a major compiler update:

We dropped GCC 7, GCC 8, and GCC 9 and we added GCC 12 support.

As a consequence, we also dropped C++17 support and are fully C++20 compatible.

Furthermore, we could drop the range-v3 dependency completely, so be sure to delete the submodule after updating to SeqAn 3.2.0!

While we will present essential changes of the 3.2.0 release in this message, you can also find a comprehensive list of the changes in our changelog.

Get to know SeqAn3 with our tutorials.

🎉 New Features

We added GCC 12 support!

Alphabet

  • seqan3::cigar can now be assigned from std::string_view which is much faster (no allocations) than the former assignment from seqan3::small_string.
  • The new view seqan3::views::char_strictly_to behaves like seqan3::views::char_to, but throws on invalid input.

I/O

  • The new option seqan3::sequence_file_option::fasta_ignore_blanks_before_id lets you keep blanks before IDs when reading FASTA files.
    This ensures a "perfekt roundtrip" when reading and writing FASTA files.
    E.g., fasta_ignore_blanks_before_id = true (default): >    some_id will only store "some_id" as ID.
    E.g., fasta_ignore_blanks_before_id = false: >    some_id will store "    some_id" as ID.

Search

  • Improved performance of seqan3::counting_vector::operator+= by 25%.

Utility

  • Added seqan3::list_traits::repeat.

🛠️ Notable API changes

seqan3::views::to is no view anymore but C++23 conform

We replaced seqan3::views::to (implemented via range-v3) with seqan3::ranges::to (implemented in SeqAn3). seqan3::ranges::to provides a subset of C++23's std::ranges::to and will be replaced with the STL-equivalent in a future version.
Since it is not a view anymore, it cannot be properly deprecated. Please keep this in mind if you encounter errors with seqan3::views::to.

Example:

auto vec = std::views::iota(0, 10) | seqan3::views::to<std::vector>; // Before
auto vec = std::views::iota(0, 10) | seqan3::ranges::to<std::vector>(); // After

Removed several headers in seqan3/std/

All headers in seqan3/std/ except charconv and new have been deprecated, since their STL-equivalents are available in GCC >= 10. Please use the equivalent std includes.

Example:

// Before
#include <seqan3/std/bit>
#include <seqan3/std/charconv>
// After
#include <bit>
#include <seqan3/std/charconv>

Removed namespace std::cpp20

The namespace std::cpp20 has been deprecated, since, e.g., the implementation of the std::back_inserter among others are now C++20-conform with GCC >= 10. Please use the std:: namespace.

Example:

std::ranges::copy(range, std::cpp20::back_inserter(other_range)); // Before
std::ranges::copy(range, std::back_inserter(other_range)); // After

🐛 Notable bug fixes

Core

  • Added missing implementations for AVX512 .

IO

  • FASTA files containing IDs starting with >, e.g., > >MyID, are now parsed correctly.

Search

  • Relaxed kmer_hash_view::iterator difference requirement .
  • Relaxed seqan3::views::minimiser requirements to be C++20-compatible.
  • Relaxed seqan3::views::kmer_hash requirements to be C++20-compatible.

Utility

  • seqan3::views::single_pass_input cannot propagate the std::ranges::output_range property because it cannot satisfy the following requirement:
    *it++ = value;
    // must be the same as
    *it = value; ++it;
    // but it actually would be the same as
    ++it; *it = value;
  • Fixed signature of seqan3::detail::store_sse4. This might have affected some public API.
  • Relaxed seqan3::views::to_simd requirements to be C++20-compatible.

🔌 External dependencies

  • GCC 7, 8, and 9 have been removed.
  • SeqAn 3.2.0 is known to compile with GCC 10.3, 11.3, and 12.1. Future versions might work, but were not yet available at the time of this release.
  • Other compilers, e.g., clang, and MSVC, are known to not be compatible with SeqAn 3.2.0.
  • We removed range-v3, and now require cereal 1.3.2 as well as sdsl-lite 3.0.1.
  • We use doxygen 1.9.4 to build our documentation.

SeqAn 3.2.0-rc.1

15 Jun 18:11
3.2.0-rc.1
1148ce1
Compare
Choose a tag to compare
SeqAn 3.2.0-rc.1 Pre-release
Pre-release

This is the first release candidate for SeqAn 3.2.0

You can find a list of changes in our changelog.

Notable API-changes (not final)

  • We removed the std::cpp20 namespace. We use std instead, since all supported compilers provide the C++20 versions of the entities we used with std::cpp20.
  • We replaced seqan3::views::to with seqan3::range::to. As planned for C++23, it is no longer a view, but a function object. seqan3::views::to<std::vector> changes to seqan3::range::to<std::vector>().

Dependencies

  • cereal bumped to 1.3.2
  • sdsl-lite bumped to 3.0.1
  • range-v3 removed
  • For documentation: doxygen bumped to 1.9.4

SeqAn 3.1.0

11 Nov 08:45
3.1.0
4668203
Compare
Choose a tag to compare

GitHub commits since tagged version (branch)

We are thrilled to announce the SeqAn 3.1.0 release with the first stable SeqAn module: Alphabet

The Alphabet module is the foundation of SeqAn, thoroughly used and tested in other modules as well as external projects (e.g. raptor). We are confident to release the code with few exceptions as the first stable module of SeqAn3.
Check out notes about our API stability or the API documentation for more details.

In the upcoming future we strive to let the other modules follow suit.

While we will present essential changes of the 3.1.0 in this message, you can also find a comprehensive list of the changes in our changelog.

Get to know SeqAn3 with our tutorials.

🔒 API Stability

With few exceptions, the Alphabet module of SeqAn3 is now stable. Additionally, the following entities are marked stable in this release:

While 3.0.3 only deprecated entities, the affected items are removed in 3.1.0!

If you are upgrading from an older version than 3.0.3, we strongly recommend first upgrading to 3.0.3, and afterwards to 3.1.0. The version 3.0.3 contains deprecation notices that will help you to transition with ease.

🛠️ Notable API changes

There are no API changes upgrading from 3.0.3. See the 3.0.3 release message for an overview of previous changes.

🐛 Notable bug fixes

🔌 External dependencies

  • SeqAn 3.1.0 is known to compile with GCC 7.5, 8.4, 9.4, 10.3, and 11.2. Future versions might work, but were not yet available at the time of this release.
  • Other compilers, e.g. GCC 12 (currently in development), clang, and MSVC, are known to not be compatible with SeqAn 3.1.0.
  • We support ranges-v3 versions ≥ 0.11.0 and < 0.12.0, sdsl-lite 3.0.0, and cereal 1.3.0.
  • We use doxygen 1.9.2 to build our documentation.

SeqAn 3.1.0-rc.1

09 Aug 10:53
3.1.0-rc.1
4604f1b
Compare
Choose a tag to compare
SeqAn 3.1.0-rc.1 Pre-release
Pre-release

This is the first release candidate for SeqAn 3.1.0

You can find a list of changes in our changelog.

SeqAn 3.0.3

28 May 09:58
3.0.3
c7d7f1a
Compare
Choose a tag to compare

GitHub commits since tagged version (branch)

We are proud to announce the last 3.0.x Release of the SeqAn Library.

This is a rather big release for us, encompassing 923 commits and changing 1750 files. This sums up to over 75,000 insertions and more than 50,000 deletions.
Despite this huge diff, we have good reasons to believe that upgrading from 3.0.2 will be extremely smooth and easy.

You can find a comprehensive list of the changes in our changelog.

Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.

Our final push to 3.1.0

For 3.0.3, we heavily focused on making the final push towards 3.1.0 and took our time to really define the scope of our Sequence Analysis Library.

That means the next Release (3.1.0) will be the first stable one, exciting right? 🥳

📖 Module structure

We now utilise the following module structure.

Sequence Analysis Modules

  • #include <seqan3/alphabet/*.hpp>:
    Contains alphabet related entities, like seqan3::dna4.
  • #include <seqan3/alignment/*.hpp>:
    Contains sequence alignment related entities, like seqan3::align_pairwise.
  • #include <seqan3/io/*.hpp>:
    Contains I/O related entities, like seqan3::sequence_file_input.
  • #include <seqan3/search/*.hpp>:
    Contains search related entities, like seqan3::search.

We also moved containers and views from the former range module into related Sequence Analysis Module (e.g., seqan3::bitpacked_sequence and seqan3::translate are now part of the alphabet module).

All Sequence Analysis Modules will have strong API Stability guarantees. So far we finished declaring the stability in our documentation for alphabets, containers, and ranges. Sequence Alignment and I/O will follow in the next release.

General Purpose Modules

  • #include <seqan3/argument_parser/*.hpp>:
    Our argument parser library that helps to write apps.
  • #include <seqan3/range/*.hpp> (split since 3.0.3):
    We moved most entities within this module into the other modules: alphabet, alignment, io, search or utility. But, we also deprecated some of them that did not fit our scope anymore.
  • #include <seqan3/core/*.hpp>:
    Our internal module for entities that are shared across our sequence analysis modules and are needed to implement our own algorithms and data structures.
  • #include <seqan3/utility/*.hpp>:
    utility contains entities that are completely unrelated to biology-problems. We think of these as something that could be made separate libraries.

All General Purpose Modules will have no API Stability guarantees.

🔒 API Stability

We are especially thrilled to announce 3.0.3, because this release should be the first one that just compiles™️ your app when upgrading from 3.0.2 to 3.0.3. Arguably, you will encounter scattered "deprecation" notices, but all of those messages should point you to an upgrade path. Unless you treat warnings as errors, your app will still compile even when encountering deprecation notices.

Furthermore, we see this release as a test run of our way to handle API Stability in the upcoming era of stable releases. We are happy to hear your feedback, so please let us know whether it worked for you and if something could be improved. We believe we found a good system for hinting changes between releases to our users.

But how do we know that we did not miss anything? Our idea is simple: compile our current SeqAn version (3.0.3 in this case) against the tests of our previous Release (3.0.2). If everything compiles and the previous tests pass, we most likely did not break our API.

🎉 Notable new features

  • A new Phred Quality Score alphabet seqan3::phred94 that represents the full Phred Score range (Sanger format) and is used for PacBio Phred scores of HiFi reads.

  • A new seqan3::literals namespace, which can be used in lieu of importing individual literal operators.

    Click for an example
    #include <seqan3/alphabet/nucleotide/dna4.hpp>
    
    int main()
    {
        using namespace seqan3::literals; // Still works: using seqan3::operator''_dna4;
    
        seqan3::dna4 adenine = 'A'_dna4;
    }
  • Records of I/O files have member functions.

    Click for an example
    #include <seqan3/core/debug_stream.hpp>
    #include <seqan3/io/sequence_file/input.hpp>
    
    int main()
    {
        seqan3::sequence_file_input fin{"my.fastq"};
    
        for (auto && record: fin)
        {
            seqan3::debug_stream << "id: " << record.id() << '\n';
            seqan3::debug_stream << "sequence: " << record.sequence() << '\n';
            seqan3::debug_stream << "base_qualities: " << record.base_qualities() << '\n';
        }
    }

:trollface: Notable breaking changes (API)

  • Starting with 3.0.3, seqan3::seqan3_version is a number and equivalent to the SEQAN3_VERSION macro. Consequently, seqan3::seqan3_version_cstring is the C-String (char const *) which was named seqan3::seqan3_version in the previous release (and was a std::string).
  • The meanings of seqan3::alphabet_variant::{is_alternative, holds_alternative} have been swapped.

🛠️ Notable API changes

  • Entities have been renamed, a short but incomplete excerpt
    • seqan3::phred68legacy to seqan3::phred68solexa
    • seqan3::sam_dna16 to seqan3::dna16sam
    • seqan3::bitcompressed_vector to seqan3::bitpacked_sequence
    • seqan3::alignment_file_* to seqan3::sam_file_*
    • multiple UPPER_CASE to lower_case names, mostly in enums
  • Accessing an I/O file record by seqan3::get, e.g., seqan3::get<seqan3::field::id>(record), has been deprecated in favour of the new member accessors, e.g., record.id().

🐛 Notable bug fixes

  • A couple of fixes in the argument parser.
  • Fixed a nasty issue when combining seqan3::views::kmer_hash and std::views::reverse.
  • Fixed an issue with compressing .gz files with the BGZF compression algorithm.
  • Various fixes to our SAM/BAM file implementation.

🔌 External dependencies

  • SeqAn 3.0.3 is known to compile with GCC 7.5, 8.4, 9.3, 10.3, and 11.1. Future versions (such as GCC 11.2 and 12) might work, but were not yet available at the time of this release.
  • We support ranges-v3 versions ≥ 0.11.0 and < 0.12.0.
  • We use doxygen 1.9.1 to build our documentation.