#![doc = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/README.md"))]
#![warn(clippy::all, clippy::pedantic)]
#![allow(
clippy::module_name_repetitions,
clippy::similar_names,
clippy::wildcard_imports,
clippy::enum_glob_use,
clippy::comparison_chain,
stable_features
)]
#![cfg_attr(test, feature(test))]
#![feature(portable_simd, try_trait_v2, cold_path, int_format_into, doc_cfg)]
#![feature(const_fn_floating_point_arithmetic, let_chains, lazy_cell, slice_as_chunks)]
#![forbid(incomplete_features)]
#![warn(rustdoc::broken_intra_doc_links)]
pub mod math;
pub mod alignment;
pub mod composition;
pub mod data;
pub mod distance;
pub mod kmer;
pub mod search;
#[cfg(feature = "rand")]
pub(crate) mod generate;
pub mod iter_utils;
pub mod prelude {
pub use crate::{
alignment::{AsSeqSrc, IntoSeqSrc, PairwiseSequence, ProfileSets, SeqSrc},
composition::{AlignmentComposition, CreateConsensus, GcContent, NucleotideCounts, ToBaseCounts},
data::{
StdForSequences,
err::OrFail,
records::{
fasta::FastaReader,
fastq::{FastQ, FastQReader, FastQView, FastQViewMut},
},
types::{
amino_acids::{AminoAcids, AminoAcidsView, AminoAcidsViewMut},
nucleotides::{
CheckNucleotides, GetCodons, GetCodonsMut, IsValidDNA, Nucleotides, NucleotidesView, NucleotidesViewMut,
RecodeDNAStrat, RecodeNucleotides, RefineDNAStrat, RetainNucleotides, Translate,
},
phred::{QualityScores, QualityScoresView, QualityScoresViewMut, QualityStats},
},
views::{
AsView, AsViewMut, DataView, DataViewMut, Len, Restrict, Slice, SliceCopy, SliceMut, ToOwnedData, ToView,
},
},
kmer::{EncodedKmerCollection, FindKmers, FindKmersInSeq, KmerCounter, KmerEncoder, KmerSet},
search::{ByteSubstring, ByteSubstringMut},
};
#[cfg(feature = "rand")]
pub use crate::generate::rand_sequence;
}
pub(crate) use crate::data::extension::simd;
mod private {
#[cfg(feature = "dev-phmm")]
use crate::alignment::phmm::{
DomainPhmm, GlobalPhmm, LocalPhmm, SemiLocalPhmm,
views::{
DomainPhmmView, DomainPhmmViewMut, GlobalPhmmView, GlobalPhmmViewMut, LocalPhmmView, LocalPhmmViewMut,
SemiLocalPhmmView, SemiLocalPhmmViewMut,
},
};
use crate::{
data::{
cigar::{Cigar, CigarView, CigarViewMut},
sam::{SamData, SamDataView, SamDataViewMut},
},
prelude::*,
};
use std::{
hash::BuildHasher,
simd::{Simd, SimdElement},
};
#[cfg(feature = "dev-generic-fasta")]
use crate::data::views::{AssocViewMutType, AssocViewType};
macro_rules! sealed {
($($t:ty),* $(,)?) => { $( impl Sealed for $t {} )* };
}
pub trait Sealed {}
sealed!(String, &String, &str, str);
impl<T> Sealed for Vec<T> {}
impl Sealed for Box<[u8]> {}
impl<T> Sealed for [T] {}
impl<T> Sealed for &[T] {}
impl<T> Sealed for &mut [T] {}
impl<T, const N: usize> Sealed for &[T; N] {}
impl<T, const N: usize> Sealed for [T; N] {}
impl<Q: ?Sized> Sealed for crate::search::RangeSearch<'_, Q> {}
impl<T: SimdElement, const N: usize> Sealed for Simd<T, N> {}
impl<const MAX_LEN: usize, E: KmerEncoder<MAX_LEN>, S: BuildHasher> Sealed for KmerCounter<MAX_LEN, E, S> {}
impl<const MAX_LEN: usize, E: KmerEncoder<MAX_LEN>, S: BuildHasher> Sealed for KmerSet<MAX_LEN, E, S> {}
#[cfg(feature = "dev-generic-fasta")]
sealed!(
crate::data::fasta::generic::Taxon,
crate::data::fasta::generic::TaxonView<'_>,
crate::data::fasta::generic::TaxonViewMut<'_>,
);
#[cfg(feature = "dev-generic-fasta")]
impl<S> Sealed for crate::data::fasta::generic::Fasta<S> {}
#[cfg(feature = "dev-generic-fasta")]
impl<S: AssocViewType> Sealed for crate::data::fasta::generic::FastaView<'_, S> {}
#[cfg(feature = "dev-generic-fasta")]
impl<S: AssocViewMutType> Sealed for crate::data::fasta::generic::FastaViewMut<'_, S> {}
#[cfg(feature = "dev-generic-fasta")]
impl<M, S> Sealed for crate::data::fasta::generic::FastaAnnot<M, S> {}
#[cfg(feature = "dev-generic-fasta")]
impl<M: AssocViewType, S: AssocViewType> Sealed for crate::data::fasta::generic::FastaAnnotView<'_, M, S> {}
#[cfg(feature = "dev-generic-fasta")]
impl<M: AssocViewMutType, S: AssocViewMutType> Sealed for crate::data::fasta::generic::FastaAnnotViewMut<'_, M, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for GlobalPhmm<T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for GlobalPhmmView<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for GlobalPhmmViewMut<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for LocalPhmm<T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for LocalPhmmView<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for LocalPhmmViewMut<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for SemiLocalPhmm<T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for SemiLocalPhmmView<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for SemiLocalPhmmViewMut<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for DomainPhmm<T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for DomainPhmmView<'_, T, S> {}
#[cfg(feature = "dev-phmm")]
impl<T, const S: usize> Sealed for DomainPhmmViewMut<'_, T, S> {}
sealed!(
AminoAcids,
AminoAcidsView<'_>,
AminoAcidsViewMut<'_>,
Nucleotides,
NucleotidesView<'_>,
NucleotidesViewMut<'_>,
FastQ,
FastQView<'_>,
FastQViewMut<'_>,
QualityScores,
QualityScoresView<'_>,
QualityScoresViewMut<'_>,
Cigar,
CigarView<'_>,
CigarViewMut<'_>,
SamData,
SamDataView<'_>,
SamDataViewMut<'_>,
);
sealed!(f32, f64, u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize);
}
const DEFAULT_SIMD_LANES: usize = 32;