SeqAn3 3.4.0-rc.4
The Modern C++ library for sequence analysis.
|
This changelog contains a top-level entry for each release with sections on new features, API changes and notable bug-fixes (not all bug-fixes will be listed).
Get to know SeqAn3 with our tutorials.
Please see the release announcement: https://www.seqan.de/announcing-seqan3/
See the porting guide for some help on porting: https://docs.seqan.de/seqan3/main_user/howto_porting.html
See the documentation on API stability to learn about when API changes are allowed.
seqan3::sam_file_input
now accepts user-defined tags (#3256).seqan3::bitpacked_sequence
(#3268).seqan3::sam_file_output
now takes ownership of the given reference information (#3300).build_system
directory was renamed to cmake
(#3292).seqan3::alignment_from_cigar
creates an alignment (tuple of two aligned sequences) from a CIGAR vector (std::vector<seqan3::cigar>
) (#3057) or a CIGAR string (std::string
) (#3077).seqan3::cigar_from_alignment
creates a CIGAR vector (std::vector<seqan3::cigar>
) from an alignment (tuple of 2 aligned sequences) (#3057).seqan3::dna4::complement()
(#3026).std::vector
are now constexpr
if supported by the compiler (#3073).seqan3::sam_file_header::program_info_t
easier to copy (#3145).seqan3::interleaved_bloom_filter
for decompressing a compressed seqan3::interleaved_bloom_filter
(#3082).seqan3::sequence_file_input_traits
now allows char
as a sequence alphabet (#3128).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
.seqan
to seqan2
. For interoperability, an up-to-date checkout of SeqAn2's main branch is required (#3156).seqan3::cigar
can now be assigned from std::string_view
(#2966).seqan3::views::char_strictly_to
. Behaves like seqan3::views::char_to
, but throws on invalid input (#2898).seqan3::sequence_file_option::fasta_ignore_blanks_before_id
to ignore blanks before IDs when reading FASTA files. E.g., > some_id
will only store "some_id"
as ID (#2770).seqan3::counting_vector::operator+=
(#2930).seqan3::list_traits::repeat
(#2899).>
, e.g., > >MyID
, are now parsed correctly (#2869).kmer_hash_view::iterator
difference requirement (#2931).seqan3::views::minimiser
requirements to be C++20-compatible (#2845).seqan3::views::kmer_hash
requirements to be C++20-compatible (#2843).seqan3::views::single_pass_input
cannot propagate the std::ranges::output_range
property because it cannot satisfy the following requirement (#2775): cpp *it++ = value; // must be the same as *it = value; ++it; // but it actually would be the same as ++it; *it = value;
seqan3::detail::store_sse4
. This might have affected some public API (#2893).seqan3::views::to_simd
requirements to be C++20-compatible (#2849).GCC 7, 8, and 9 have been removed. All headers in seqan3/std/
except charconv
and new
have been deprecated, please use the equivalent std
includes. The namespace std::cpp20
has been deprecated, please use std::
.
seqan3::views::to
has been changed to seqan3::ranges::to
. 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
.
output_options::fasta_blank_before_id
to false
(#2769).bgzf_thread_count
to 4
. Previously, all available threads on the machine were utilised (#2911).bgzf_thread_count
is not static anymore. Modifying the variable now affects the runtime of the entire program. Formerly, this variable was specific to each translation unit (#2752).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 (#2969).seqan3::views::chunk
. It is now implemented in SeqAn3 and does not use the range-v3 implementation anymore. seqan3::views::chunk
is similar to C++23's std::views::chunk
and will be replaced with the STL-equivalent in a future version (#2975).seqan3::views::join_with
. It is now implemented in SeqAn3 and does not use the range-v3 implementation anymore. seqan3::views::join_with
is equivalent to C++23's std::views::join_with
and will be replaced with the STL-equivalent in a future version (#2973).seqan3::views::zip
. It is now implemented in SeqAn3 and does not use the range-v3 implementation anymore. seqan3::views::zip
is equivalent to C++23's std::views::zip
and will be replaced with the STL-equivalent in a future version (#2971).The files deprecated in 3.0.3 (denoted by [deleted without replacement]
) have been removed.
Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.
seqan3::phred94
, a quality type that represents the full Phred Score range (Sanger format) and is used for PacBio Phred scores of HiFi reads (#2290).seqan3::argument_parser
constructor was changed to accept a strong-type seqan3::update_notifications::(on|off)
instead of a simple bool (which was subject to unexpected implicit conversion) (#2180).seqan3::output_file_validator
, with a parameter seqan3::output_file_open_options
to allow overwriting output files (#2009).seqan3::argument_parser
has a new member function seqan3::argument_parser::is_option_set
that checks whether an option, identified by its long or short name, was set on the command line by the user (#1859).seqan3::argument_parser
may contain a dash (#2306).seqan3::sequence_record
for seqan3::sequence_file_(in|out)put
, seqan3::sam_record
for seqan3::sam_file_(in|out)put
and seqan3::structure_record
for seqan3::structure_file_(in|out)put
. You can now access the id
in a sequence file (e.g. fasta
file) record via record.id()
instead of seqan3::get<seqan3::field::id>(record)
. This will allow us to add convenient functions that compute information based on the record itself and to provide better documentation. (#2340, #2380, #2389)seqan3::fm_index_cursor
and seqan3::bi_fm_index_cursor
can be serialised (#2048).seqan3::fm_index_cursor
exposes its suffix array interval (#2076).seqan3::interleaved_bloom_filter
supports counting occurrences of a range of values (#2373).seqan3::interleaved_bloom_filter
supports clearing of bins (#2428).seqan3::argument_parser::parse()
and not on construction of the seqan3::argument_parser
(#2179).seqan3::regex_validator
parses std::filesystem::path
's correctly now (#2216).seqan3::input_file_validator
and seqan3::input_file_validator
support extensions containing a dot (#2363).std::vector
of enums or bool
(#2381).seqan3::views::kmer_hash
does not return wrong values when combined with std::views::reverse
on a text of the same size as the kmer (#2416).*
) but is not empty correctly now (#2184).gz
-compressed output no longer results in bgzf
-compressed output. This change may have following effects (#2458):gz
-compressed content since, in contrast to bgzf
, gz
does not feature parallelisation (magnitude depends on the application and level of parallelisation).gz
-compressed content due to gz
storing less metadata than bgzf
(up to 20% smaller file size).gz
and bgzf
are fully compatible.gz
-compressed input. This is the case when the gz
-compressed input was also generated with SeqAn.Most of our API or header file changes will trigger a deprecation warning to let you know if something changed and, if applicable, when it will be removed. We recommend upgrading version-by-version to check whether you need to change code. You can either directly check the reported code or verify with our documentation how the new API should be used.
For a complete list of behavioural changes in our public and internal API, you can consult our API stability regression test suite and patches at https://github.com/seqan/seqan3/tree/main/test/api_stability/3.0.2.
seqan3::aminoacid_similarity_matrix
were changed to lower case (#2599):seqan3::aminoacid_similarity_matrix::BLOSUM30
is replaced by seqan3::aminoacid_similarity_matrix::blosum30
.seqan3::aminoacid_similarity_matrix::BLOSUM45
is replaced by seqan3::aminoacid_similarity_matrix::blosum45
.seqan3::aminoacid_similarity_matrix::BLOSUM62
is replaced by seqan3::aminoacid_similarity_matrix::blosum62
.seqan3::aminoacid_similarity_matrix::BLOSUM80
is replaced by seqan3::aminoacid_similarity_matrix::blosum80
.Header Changes:
We relaxed some requirements of seqan3::alphabet_base<alphabet_t>
(#2427):
alphabet_t::rank_to_char
and alphabet_t::char_to_rank
must be lookup tables.alphabet_t::rank_to_char
and alphabet_t::char_to_rank
must be static member functions.This allows for more flexible rank <-> char conversion implementations. Lookup tables are still possible within those static member functions. However, alphabets that do not need a lookup table can now use easier and/or more efficient implementations. For example, seqan3::gap
always returns rank 0
or char -
, or seqan3::phred42
where the rank and char representations are offset by a fixed value.
seqan3::nucleotide_base<alphabet_t>
(#2584):alphabet_t::complement_table
must be a lookup table.alphabet_t::rank_complement
must be a static member function.seqan3::phred68legacy
to seqan3::phred68solexa
(#2522).seqan3::sam_dna16
to seqan3::dna16sam
(#2521).seqan3::phred42::assign_phred()
or seqan3::operator""_phred42
instead of seqan3::phred42(phred_type)
.seqan3::phred63::assign_phred()
or seqan3::operator""_phred63
instead of seqan3::phred63(phred_type)
.seqan3::phred94::assign_phred()
or seqan3::operator""_phred94
instead of seqan3::phred94(phred_type)
.seqan3::phred68legacy::assign_phred()
or seqan3::operator""_phred68legacy
instead of seqan3::phred68legacy(phred_type)
.seqan3::quality_base
to seqan3::phred_base
(#2539).seqan3::literals
namespace containing all literals. This adds the option to use using namespace seqan3::literals
to import literal operators. The old way of explicitly importing specific operators via using seqan3::operator""_{dna4, rna4, ...}
is not affected by this change (#2568).seqan3::alphabet_variant::is_alternative
and seqan3::alphabet_variant::holds_alternative
(#2596).Header Changes:
seqan3::output_file_validator
cannot be constructed with the extension list alone anymore, you need to specify one of the seqan3::output_file_open_options options. (#2009).seqan3::option_spec
were changed to lower case (#2285):seqan3::option_spec::DEFAULT
is replaced by seqan3::option_spec::standard
.seqan3::option_spec::REQUIRED
is replaced by seqan3::option_spec::required
.seqan3::option_spec::ADVANCED
is replaced by seqan3::option_spec::advanced
.seqan3::option_spec::HIDDEN
is replaced by seqan3::option_spec::hidden
.Header Changes:
seqan3::field::seq_qual
. Use seqan3::field::seq
and seqan3::field::qual
instead. (#2379). Check out SeqAn3 Cookbook - Write Record for usage.seqan3::alignment_file_header
is replaced by seqan3::sam_file_header
.seqan3::alignment_file_input_default_traits
is replaced by seqan3::sam_file_input_default_traits
.seqan3::alignment_file_input
is replaced by seqan3::sam_file_input
.seqan3::alignment_file_input_format
is replaced by seqan3::sam_file_input_format
.seqan3::alignment_file_input_options
is replaced by seqan3::sam_file_input_options
.seqan3::alignment_file_output
is replaced by seqan3::sam_file_output
.seqan3::alignment_file_output_format
is replaced by seqan3::sam_file_output_format
.seqan3::alignment_file_output_options
is replaced by seqan3::sam_file_output_options
.seqan3::sam_file_input
and seqan3::sam_file_output
do not accept seqan3::field::ref_seq
, seqan3::field::evalue
and seqan3::field::bit_score
anymore. (#2658).seqan3::get
accessor for I/O records, e.g. seqan3::get<seqan3::field::id>(record)
, is deprecated, please use the corresponding member accessor (#2420):seqan3::views::get<seqan3::field::id>
to project a single field, e.g.seqan3::views::get<seqan3::field::id>(fin)
=> std::views::transform(fin, [](auto && record){ return record.id(); })
fin | seqan3::views::get<seqan3::field::id>()
=> fin | std::views::transform([](auto && record){ return record.id(); })
fin | std::views::transform(&decltype(fin)::record_type::id)
seqan3::sequence_record
:seqan3::get<seqan3::field::id>(record)
=> record.id()
seqan3::get<seqan3::field::seq>(record)
=> record.sequence()
seqan3::get<seqan3::field::qual>(record)
=> record.base_qualities()
seqan3::structure_record
:seqan3::get<seqan3::field::id>(record)
=> record.id()
seqan3::get<seqan3::field::seq>(record)
=> record.sequence()
seqan3::get<seqan3::field::structure>(record)
=> record.sequence_structure()
seqan3::get<seqan3::field::energy>(record)
=> record.energy()
seqan3::get<seqan3::field::bpp>(record)
=> record.base_pair_probability_matrix()
seqan3::sam_record
:seqan3::get<seqan3::field::id>(record)
=> record.id()
seqan3::get<seqan3::field::seq>(record)
=> record.sequence()
seqan3::get<seqan3::field::qual>(record)
=> record.base_qualities()
seqan3::get<seqan3::field::offset>(record)
=> record.sequence_position()
seqan3::get<seqan3::field::alignment>(record)
=> record.alignment()
seqan3::get<seqan3::field::ref_id>(record)
=> record.reference_id()
seqan3::get<seqan3::field::ref_offset>(record)
=> record.reference_position()
seqan3::get<seqan3::field::header_ptr>(record)
=> record.header_ptr()
seqan3::get<seqan3::field::flag>(record)
=> record.flag()
std::get<0>(seqan3::get<seqan3::field::mate>(record))
=> record.mate_reference_id()
std::get<1>(seqan3::get<seqan3::field::mate>(record))
=> record.mate_position()
std::get<2>(seqan3::get<seqan3::field::mate>(record))
=> record.template_length()
seqan3::get<seqan3::field::mapq>(record)
=> record.mapping_quality()
seqan3::get<seqan3::field::cigar>(record)
=> record.cigar_sequence()
seqan3::get<seqan3::field::tags>(record)
=> record.tags()
Header Changes:
seqan3::views::convert
NOAPI and moved it to seqan3/utility/views/convert.hpp
. You can still use seqan3::views::convert
in the meantime, but we encourage using std::views::transform
instead as shown in our Cookbook (#2524).seqan3::views::as_const
, there is no alternative other than reimplementing it yourself (#2567).seqan3::views::drop
, use std::views::drop
or seqan3::views::type_reduce | std::views::drop
. (#2540)seqan3::views::join
. Please use std::views::join
or seqan3::views::join_with
instead (#2526).seqan3::views::move
, use the std::ranges::move
algorithm, std::[cpp20::]move_iterator
or an explicit for loop where you move the value. (#2563)seqan3::views::take
and it will be removed in 3.1.0. Use std::views::take
instead (#2541).seqan3::views::take_line
and it will be removed in 3.1.0 (#2525).seqan3::views::take_exactly
. Please use std::views::take
or std::views::counted
instead (#2601).seqan3::views::take_until
and it will be removed in 3.1.0. Use std::views::take_while(std::not_fn(predicate))
instead (#2604).seqan3::views::take_until_and_consume
and it will be removed in 3.1.0. There is no alternative other than reimplementing it yourself (#2604).seqan3::views::to_upper
and it will be removed in 3.1.0, use std::views::transform([](auto && chr){return std::toupper(chr)})
. (#2538)seqan3::views::to_lower
and it will be removed in 3.1.0, use std::views::transform([](auto && chr){return std::tolower(chr)})
. (#2556)seqan3::views::persist
. There is no replacement, use lvalues instead of rvalues (#2553).seqan3::gap_decorator::unaligned_seq_type
to seqan3::gap_decorator::unaligned_sequence_type
(#2564).seqan3::views::get
to seqan3::views::elements
(#2554).seqan3::translation_frames::*FRAME*
(#2565):seqan3::translation_frames::FWD_FRAME_0
is replaced by seqan3::translation_frames::forward_frame0
.seqan3::translation_frames::FWD_FRAME_1
is replaced by seqan3::translation_frames::forward_frame1
.seqan3::translation_frames::FWD_FRAME_2
is replaced by seqan3::translation_frames::forward_frame2
.seqan3::translation_frames::REV_FRAME_0
is replaced by seqan3::translation_frames::reverse_frame0
.seqan3::translation_frames::REV_FRAME_1
is replaced by seqan3::translation_frames::reverse_frame1
.seqan3::translation_frames::REV_FRAME_2
is replaced by seqan3::translation_frames::reverse_frame2
.seqan3::translation_frames::FWD_REV_0
is replaced by seqan3::translation_frames::forward_reverse0
.seqan3::translation_frames::FWD_REV_1
is replaced by seqan3::translation_frames::forward_reverse1
.seqan3::translation_frames::FWD_REV_2
is replaced by seqan3::translation_frames::forward_reverse2
.seqan3::translation_frames::FWD
is replaced by seqan3::translation_frames::forward_frames
.seqan3::translation_frames::REV
is replaced by seqan3::translation_frames::reverse_frames
.seqan3::translation_frames::SIX_FRAME
is replaced by seqan3::translation_frames::six_frames
.seqan3::type_reduce_view
to seqan3::type_reduce_t
(#2587).Header Changes:
seqan3::[bi_]fm_index[_cursor]_specialisation
. We did this because we currently have only one implementation modelling each concept and are not completely sure if the current definition of the concepts is the right one. If you used those concepts, you can check whether the cursor type is seqan3::[bi_]fm_index_cursor
as a substitute. (#2348)Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.
seqan3::align_cfg::on_result
(#1876).seqan3::align_pairwise
accepts a std::pair
of sequences as input (#1913).seqan3::aligned_sequence
concept by removing everything that needs write access to the object. We then added a new seqan3::writable_aligned_sequence
concept which extends seqan3::aligned_sequence
with the requirements that need write access (e.g. insert_gap
) (#1933).seqan3::argument_parser::option_spec::ADVANCED
to control what is displayed on the (advanced) help page:seqan3::argument_parser::add_section
seqan3::argument_parser::add_subsection
seqan3::argument_parser::add_line
seqan3::argument_parser::add_list_item
Note that other seqan3::argument_parser::option_spec
s like REQUIRED
are ignored (#1652).seqan3::format_fasta
accepts the file extension .fas
as a valid extension for the FASTA format (#1599).CMakeLists.txt
(#1475).seqan3::views::minimiser
has been added. This is a view that computes the minimum in a window shifted over a range of comparable values (#1654).seqan3::views::minimiser_hash
has been added. This is a view that computes the minimisers of a range of type seqan3::semialphabet
(#1721).seqan3::interleaved_bloom_filter
, a data structure that efficiently answers set-membership queries for multiple bins (#920).seqan3::search_cfg::hit
, which allows dynamic configuration of the hit strategy. (#1853).seqan3::search_cfg::on_result
, which allows providing a custom callback for the search algorithm (#2019).seqan3::align_cfg::vectorise
-> seqan3::align_cfg::vectorised{}
.seqan3::align_cfg::band
has been replaced by seqan3::align_cfg::band_fixed_size
, and will directly be initialised with a seqan3::align_cfg::lower_diagonal
and seqan3::align_cfg::upper_diagonal
instead of a seqan3::static_band
class. It also directly exposes the lower_diagonal
and upper_diagonal
as public members (#1873).seqan3::align_cfg::mode
has been replaced by two separate configuration elements seqan3::align_cfg::method_global
and seqan3::align_cfg::method_local
(#1918).seqan3::align_cfg::aligned_ends
has been replaced by seqan3::align_cfg::method_global
. The free end-gaps are now initialised via constructor arguments to the seqan3::align_cfg::method_global
configuration (#2119).seqan3::align_cfg::vectorise
has been replaced by seqan3::align_cfg::vectorised
(#2026).seqan3::align_cfg::scoring
has been replaced by seqan3::align_cfg::scoring_scheme
(#2027).seqan3::align_cfg::result
has been replaced by seqan3::align_cfg::output_*
options. When no output configuration was configured, the default behaviour changed from computing only the score to all possible outputs. Please read the linked documentation above carefully to understand all implied changes (#2024 & #2035).seqan3::align_cfg::gap
has been replaced by seqan3::align_cfg::gap_cost_affine
, which is directly initialised with the relevant gap scores (#2037).seqan3::align_cfg::max_error
has been replaced by seqan3::align_cfg::min_score
, and thus prepares it for non-edit scoring schemes in the future as well (#2021).Header Changes:
std::default_constructible
to std::default_initializable
std::readable
to std::indirectly_readable
std::writable
to std::indirectly_writable
(#1860).seqan3::remove_cvref_t
has been replaced by std::remove_cvref_t
(#2079).seqan3::begin()
, seqan3::end()
, seqan3::cbegin()
, seqan3::cend()
, seqan3::size()
, seqan3::empty()
functions have been deprecated. Use std::ranges::{begin|end|cbegin|cend|size|empty}()
instead (#1663).seqan3::forward_range
has been removed. Use std::ranges::borrowed_range
instead (#2038).seqan3::views:trim
has been renamed to seqan3::views:trim_quality
(#2025).Header Changes:
seqan3::search
from search/algorithm/
to search/
(#1696).seqan3::search_result_range
returns now a seqan3::search_result
which unifies the interface for all the search instances, e.g. using an index over a single text or a text collection (#1706).seqan3::search_cfg::max_error
has been replaced by individual configuration elements:seqan3::search_cfg::max_error{seqan3::search_cfg::total}
to seqan3::search_cfg::max_error_total{}
seqan3::search_cfg::max_error{seqan3::search_cfg::insertion}
to seqan3::search_cfg::max_error_insertion{}
seqan3::search_cfg::max_error{seqan3::search_cfg::deletion}
to seqan3::search_cfg::max_error_deletion{}
seqan3::search_cfg::max_error{seqan3::search_cfg::substitution}
to seqan3::search_cfg::max_error_substitution{}
(#1861).seqan3::search_cfg::error_rate
or seqan3::search_cfg::error_count
, and can be reassigned (#1861).seqan3::search_cfg::mode
has been replaced by individual configuration elements (#1639):seqan3::search_cfg::mode{seqan3::search_cfg::all}
to seqan3::search_cfg::hit_all{}
seqan3::search_cfg::mode{seqan3::search_cfg::best}
to seqan3::search_cfg::hit_single_best{}
seqan3::search_cfg::mode{seqan3::search_cfg::all_best}
to seqan3::search_cfg::hit_all_best{}
seqan3::search_cfg::mode{seqan3::search_cfg::strata{5}}
to seqan3::search_cfg::hit_strata{5}
seqan3::search_cfg::hit_strata
member variable value
has been replaced to stratum
seqan3::search_cfg::output
has been replaced by individual configuration elements (#1862):seqan3::search_cfg::output{seqan3::search_cfg::text_position}
to seqan3::search_cfg::output_reference_begin_position{}
seqan3::search_cfg::output{seqan3::search_cfg::text_position}
to seqan3::search_cfg::output_index_cursor
seqan3::search_cfg::output_query_id{}
has been addedseqan3::search_cfg::output_reference_id{}
has been addedseqan3::bi_fm_index_cursor::to_rev_cursor()
and seqan3::bi_fm_index::rev_cursor()
(#1892).Header Changes:
seqan3::align_cfg::parallel
configuration element, all available threads were used. This is now fixed and only the specified number of threads will be spawned (#1854).seqan3::align_cfg::score_type
configuration is prevented with a static assert, since gaps and mismatches have negative scores and thus need a signed score type (#1891).Long option identifiers and their value must be separated by a space or equal sign =
. Applying this restriction resolves an ambiguity that occurs if one long option identifier is the prefix of another (#1792).
Valid short id value pairs: -iValue
, -i=Value
, -i Value
Valid long id value pairs: --id=Value
, --id Value
(prohibited now: --idValue
)
seqan3::field::cigar
was added to the default fields for reading and writing alignment files (#1642). This has the following impact:seqan3::alignment_file_output{"foo.sam"} = seqan3::alignment_file_input{"bar.sam"};
seqan3::alignment_file_output
now accepts seqan3::field::cigar
and seqan3::field::alignment
although they store redundant information. For the SAM/BAM format this ambiguity is handled by favouring the CIGAR information at all times if present. Note that this breaks your code if you have not selected custom fields and used structural bindings!seqan3::fm_index_cursor::extend_right()
, seqan3::bi_fm_index_cursor::extend_right()
and seqan3::bi_fm_index_cursor::extend_left()
functions handle c-style strings without including the null character (#1588).seqan3::fm_index
and seqan3::bi_fm_index
construct the index correctly if a collection with a single text is passed as input (#1892).size()
function to seqan3::views::kmer_hash
(#1722).operator[](difference_type const n)
of the iterator of the seqan3::views::kmer_hash
is declared const
and returns value n
steps after the current position without jumping to that position (#1756).Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.
seqan3::semialphabet_any
, a semi-alphabet that type erases all other semi-alphabets of the same size (#981).seqan3::dna3bs
, an alphabet that mimics a bisulfite-treated dna4 sequence (#1191).seqan3::align_cfg::result
configuration (#1340).seqan3::align_pairwise
can be parallelised using theseqan3::align_cfg::parallel
configuration (#1379, #1444).seqan3::input_file_validator
and seqan3::output_file_validator
(#863).seqan3::value_list_validator
is now constructible from a range or a parameter pack (#1298).seqan3::argument_parser::add_option
(and add_positional_option) calls allow enum types when using the seqan3::enumeration_names
customisation point (#1196).find_package(SeqAn3)
is now case-insensitive and always populates SEQAN3_*
variables in all upper-case (#1427).seqan3::lzcnt
, seqan3::tzcnt
, and seqan3::popcount
for bit manipulation (#1141).seqan3::type_list
and type packs (#1204, #1214, #1273).seqan3::upcast
and seqan3::upcast_signed
(#1190).seqan3::field::cigar
into a vector over seqan3::cigar
is supported via seqan3::alignment_file_input
(#1192).seqan3::field::cigar
into a vector over seqan3::cigar
is supported via seqan3::alignment_file_output
(#1192).seqan3::view::async_input_buffer
(#1205).seqan3::views::kmer_hash
, a view that computes hash values of an alphabet sequence given a seqan3::shape
(#946).seqan3::views::to
, a view that returns a container created from a range by copying all elements (#1033).seqan3::dynamic_bitset
, a container that stores single bits and has a dynamic size (#1153).seqan3::views::translate_join
, analogue to seqan3::views::translate
but returns a flattened range (#1171).seqan3::views::to_simd
, a view that transforms a range of ranges into chunks of seqan3::simd
vectors (#1190).seqan3::views::as_const
, a view that provides only const &
to elements of the underlying range (#1410).seqan3::views::move
, a view that turns lvalue-references into rvalue-references (#1410).seqan3::views::all
to seqan3::views::type_reduce
(#1410).std::to_chars
overload for floating point data types in our seqan3/std/from_chars
header (#1160).seqan3::custom::
. Please see About Customisation (#1225).snake_case
style (e.g. seqan3::WritableAlphabet
-> seqan3::writable_alphabet
)! This change was motivated by the decision of the ISO C++ committee to also use snake case everywhere (#1235).seqan3::cigar
alphabet is not an seqan3::alphabet
anymore but only a seqan3::semialphabet
(#1285).seqan3::value_list_validator
is not constructible from a std::initialiser_list anymore (e.g. seqan3::value_list_validator{{1,2,3}}
does not work, use seqan3::value_list_validator{1,2,3}
instead) (#1298).input_file_validator
to input_file_validator<>
) (#863).validator
can validate has been renamed from value_type
to option_value_type
(#1394).find_package(SEQAN3 3.0.1)
requires at least SeqAn3 with a version of >= 3.0.1
and < 4.0.0
) (#1425).SEQAN3_VERSION_STRING
defined by find_package(SEQAN3)
was renamed to SEQAN3_VERSION
(#1425).type_list
header has moved: If you included <seqan3/core/type_list.hpp>
you need to change the path to <seqan3/core/type_list/type_list.hpp>
(#1204).seqan3::views:zip()
, for input we will implement unzip()
in the future (#1398 #1412).seqan3::field::flag
of SAM/BAM input and output is now an enum instead of an integer, see seqan3::sam_flag
(#1390).seqan3::field
names are deprecated. Use the lower case field names instead. You can easily find and replace all occurrences by the following regex: find field::([A-Z_]+)
replace field::\L$1
(#1421).seqan3::sequence_file_input<traits_t, fields_t, formats_t, char>
to seqan3::sequence_file_input<traits_t, fields_t, formats_t>
. Before this change, setting the char type gave the impression that also streams over wide characters are supported which is not the case yet (#1400).seqan3::concatenated_sequences::data()
function has been deprecated: Use seqan3::concatenated_sequences::raw_data()
instead (#1208).seqan3::to_char
must always return a built-in character type (#1285).seqan3/range/view
has be renamed to seqan3/range/views
(#1251).seqan3::view
has been renamed to seqan3::views
(#1251).seqan3::fm_index
or seqan3::bi_fm_index
you will need to add the alphabet type as first parameter and pass a seqan3::text_layout
instead of a bool
to indicate the text layout (single, collection). For example, fm_index<false> index{text}
where text
is of type dna4_vector
needs to be changed to fm_index<dna4, text_layout::single> index{text}
(#1222).construct()
method of the (bi_)fm_index is now private: Use the constructor seqan3::fm_index::fm_index(text_t && text)
or seqan3::bi_fm_index::bi_fm_index(text_t && text)
instead (#1222).seqan3::fm_index::char_type
member was renamed to seqan3::fm_index::alphabet_type
The same applies for the seqan3::bi_fm_index
(#1433).seqan3::fm_index_cursor::index_char_type
member was renamed to seqan3::fm_index_cursor::index_alphabet_type
The same applies for the seqan3::bi_fm_index_cursor
(#1433).seqan3::gap_decorator
does not cause assert anymore (#1109).seqan3::argument_parser
is restricted to alpha-numeric characters and _
and -
(#1133).seqan3::fm_index
and seqan3::bi_fm_index
now work properly (#1144).seqan3::fm_index
and seqan3::bi_fm_index
constructed from a text collection containing a single text now returns the correct result (#1316).seqan3::views::take
is sized if the underlying range is sized (#1146).This is the initial release of SeqAn3. It is an entirely new library so there is no changelog that covers the differences to SeqAn2.
Note that 3.1.0 will be the first API stable release and interfaces in this release might still change.