32#include <seqan3/utility/simd/simd.hpp>
33#include <seqan3/utility/simd/simd_traits.hpp>
39namespace seqan3::detail
58template <
typename sequence_pairs_t>
59 requires sequence_pair_range<std::remove_reference_t<sequence_pairs_t>>
60struct chunked_indexed_sequence_pairs
63 using type =
decltype(
views::zip(std::declval<sequence_pairs_t>(), std::views::iota(0)) |
views::chunk(1));
77template <
typename configuration_t>
78 requires is_type_specialisation_of_v<std::remove_cv_t<configuration_t>, configuration>
79struct alignment_configuration_traits
92 template <arithmetic score_t>
93 using select_scalar_index_t = min_viable_uint_t<1ull << (bits_of<score_t> - 1)>;
96 static constexpr auto determine_alignment_result_type() noexcept
98 if constexpr (configuration_t::template exists<align_cfg::detail::result_type>())
101 std::declval<configuration_t>()))>;
102 return typename result_type_cfg_t::type{};
112 static constexpr bool is_vectorised = configuration_t::template exists<align_cfg::vectorised>();
114 static constexpr bool is_parallel = configuration_t::template exists<align_cfg::parallel>();
116 static constexpr bool is_global = configuration_t::template exists<seqan3::align_cfg::method_global>();
118 static constexpr bool is_local = configuration_t::template exists<seqan3::align_cfg::method_local>();
120 static constexpr bool is_banded = configuration_t::template exists<align_cfg::band_fixed_size>();
122 static constexpr bool is_debug = configuration_t::template exists<detail::debug_mode>();
124 static constexpr bool is_one_way_execution = configuration_t::template exists<align_cfg::on_result>();
126 using scoring_scheme_type =
decltype(get<align_cfg::scoring_scheme>(std::declval<configuration_t>()).scheme);
128 using scoring_scheme_alphabet_type =
typename scoring_scheme_type::alphabet_type;
131 align_cfg::score_type<int32_t>{}))>::type;
137 using alignment_result_type =
decltype(determine_alignment_result_type());
139 using matrix_index_type =
142 using matrix_coordinate_type =
143 lazy_conditional_t<is_vectorised, lazy<simd_matrix_coordinate, matrix_index_type>, matrix_coordinate>;
146 static constexpr size_t alignments_per_vector = []()
constexpr
148 if constexpr (is_vectorised)
149 return simd_traits<score_type>::length;
154 static constexpr bool compute_score = configuration_t::template exists<align_cfg::output_score>();
156 static constexpr bool compute_end_positions = configuration_t::template exists<align_cfg::output_end_position>();
158 static constexpr bool compute_begin_positions =
159 configuration_t::template exists<align_cfg::output_begin_position>();
161 static constexpr bool compute_sequence_alignment = configuration_t::template exists<align_cfg::output_alignment>();
163 static constexpr bool output_sequence1_id = configuration_t::template exists<align_cfg::output_sequence1_id>();
165 static constexpr bool output_sequence2_id = configuration_t::template exists<align_cfg::output_sequence2_id>();
167 static constexpr bool has_output_configuration = compute_score || compute_end_positions || compute_begin_positions
168 || compute_sequence_alignment || output_sequence1_id
169 || output_sequence2_id;
171 static constexpr bool requires_trace_information = compute_begin_positions || compute_sequence_alignment;
183template <
typename function_t>
184struct alignment_function_traits
187 using sequence_input_type =
typename function_traits<function_t>::template argument_type_at<0>;
189 using callback_type =
typename function_traits<function_t>::template argument_type_at<1>;
191 using alignment_result_type =
typename function_traits<callback_type>::template argument_type_at<0>;
Provides seqan3::detail::align_config_band.
Provides seqan3::align_cfg::detail::debug.
Provides global and local alignment configurations.
Provides seqan3::align_cfg::on_result.
Provides configuration for alignment output.
Provides seqan3::align_cfg::parallel configuration.
Provides seqan3::align_cfg::detail::result_type.
Provides alignment configuration seqan3::align_cfg::score_type.
Provides seqan3::align_cfg::scoring_scheme.
Provides seqan3::align_cfg::vectorised configuration.
Provides concepts needed internally for the alignment algorithms.
Provides utility functions for bit twiddling.
Provides seqan3::views::chunk.
Provides seqan3::configuration and utility functions.
Provides seqan3::detail::empty_type.
Provides various type traits for use on functions.
seqan::stl::views::zip zip
A view adaptor that takes several views and returns tuple-like values from every i-th element of each...
Definition zip.hpp:24
seqan::stl::views::chunk chunk
A view adaptor that divides a range into chunks. <dl class="no-api">This entity is not part of the Se...
Definition chunk.hpp:23
Provides lazy template instantiation traits.
Provides seqan3::detail::matrix_index, seqan3::detail::matrix_coordinate and associated strong types.
Provides type traits for working with templates.
Provides the declaration of seqan3::detail::trace_directions.
Provides seqan3::views::zip.