pub struct Seq<A: Codec> { /* private fields */ }Expand description
A arbitrary length sequence of bit-packed symbols
Stored on the heap
Implementations§
Source§impl<A: Codec> Seq<A>
impl<A: Codec> Seq<A>
pub fn new() -> Self
Sourcepub fn trim_u8(v: &[u8]) -> Result<Self, ParseBioError>
pub fn trim_u8(v: &[u8]) -> Result<Self, ParseBioError>
Trim leading and trailing characters that don’t match bases/symbols
let seq = b"NNNNAGAATGATGGGGGGGGGGGCGNNNNNNNNNNN";
let trimmed: Seq<Dna> = Seq::trim_u8(seq).unwrap();
assert_eq!(trimmed, dna!("AGAATGATGGGGGGGGGGGCG"));§Errors
Will return an UnrecognisedBase error for non-leading or non-trailing end bases, just as
TryFrom<&[u8]> would.
pub fn with_capacity(len: usize) -> Self
pub fn bit_and(self, rhs: Seq<A>) -> Seq<A>
pub fn bit_or(self, rhs: Seq<A>) -> Seq<A>
pub fn push(&mut self, item: A)
pub fn clear(&mut self)
Sourcepub fn truncate(&mut self, len: usize)
pub fn truncate(&mut self, len: usize)
Truncate a sequence
let mut seq: Seq<Dna> = dna!("CCCCC").into();
seq.truncate(2);
assert_eq!(&seq, dna!("CC"));Sourcepub fn prepend(&mut self, other: &SeqSlice<A>)
pub fn prepend(&mut self, other: &SeqSlice<A>)
Prepend a slice
let mut seq: Seq<Dna> = dna!("CCCCC").into();
seq.prepend(dna!("TTTT"));
assert_eq!(&seq, dna!("TTTTCCCCC"));Sourcepub fn append(&mut self, other: &SeqSlice<A>)
pub fn append(&mut self, other: &SeqSlice<A>)
Append a slice
let mut seq: Seq<Dna> = dna!("CCCCC").into();
seq.append(dna!("TTTT"));
assert_eq!(&seq, dna!("CCCCCTTTT"));Sourcepub fn insert(&mut self, index: usize, other: &SeqSlice<A>)
pub fn insert(&mut self, index: usize, other: &SeqSlice<A>)
Insert a slice into a sequence
let mut seq: Seq<Dna> = dna!("AAAAA").into();
seq.insert(3, dna!("TTTT"));
assert_eq!(&seq, dna!("AAATTTTAA"));§Panics
Panics if index out of bounds
Sourcepub fn remove<R: RangeBounds<usize>>(&mut self, range: R)
pub fn remove<R: RangeBounds<usize>>(&mut self, range: R)
Remove a region of a sequence
let mut seq: Seq<Dna> = dna!("ACGTACGT").into();
seq.remove(2..5);
assert_eq!(&seq, dna!("ACCGT"));pub fn extend<I: IntoIterator<Item = A>>(&mut self, iter: I)
Sourcepub fn from_raw(len: usize, bits: &[usize]) -> Option<Self>
pub fn from_raw(len: usize, bits: &[usize]) -> Option<Self>
Experimental Decode sequence from raw usize array. This requires the exact length of the target sequence to be known.
let ints: [usize; 2] = [0b0101010101010101010101010101010111111111111111111111111111111111, 0b11100100];
let seq: Option<Seq<Dna>> = Seq::from_raw(36, &ints);
assert_eq!(seq.unwrap(), dna!("TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCACGT"));Sourcepub fn into_raw(&self) -> &[usize]
pub fn into_raw(&self) -> &[usize]
Experimental Access raw sequence data as &[usize]
let seq: Seq<Dna> = dna!("TTTTTTTTTTTTTTTTCCCCCCCCCCCCCCCCACGT").into();
let ints: Vec<usize> = seq.into_raw().iter().copied().collect();
assert_eq!(ints[0], 0b0101010101010101010101010101010111111111111111111111111111111111);
assert_eq!(ints[1], 0b11100100); // ACGTMethods from Deref<Target = SeqSlice<A>>§
pub fn chain( self: &'a SeqSlice<A>, second: &'a SeqSlice<A>, ) -> Chain<SeqIter<'a, A>, SeqIter<'a, A>>
pub fn iter(&'a self) -> SeqIter<'a, A> ⓘ
Sourcepub fn kmers<const K: usize>(&self) -> KmerIter<'_, A, K> ⓘ
pub fn kmers<const K: usize>(&self) -> KmerIter<'_, A, K> ⓘ
Iterate over sliding windows of length K
Sourcepub fn windows(&self, width: usize) -> SeqChunks<'_, A> ⓘ
pub fn windows(&self, width: usize) -> SeqChunks<'_, A> ⓘ
Iterate over the sequence in overlapping windows of a specified width
use bio_seq::prelude::*;
let seq: Seq<Dna> = "ACTGATCG".try_into().unwrap();
let windows: Vec<String> = seq.windows(3).map(String::from).collect();
assert_eq!(windows, vec!["ACT", "CTG", "TGA", "GAT", "ATC", "TCG"]);Sourcepub fn chunks(&self, width: usize) -> SeqChunks<'_, A> ⓘ
pub fn chunks(&self, width: usize) -> SeqChunks<'_, A> ⓘ
Iterate over the sequence in non-overlapping chunks of a specified width
The last incomplete chunk will be excluded if the sequence length is not divisible by the specified width.
use bio_seq::prelude::*;
let seq: Seq<Dna> = "ACTGATCG".try_into().unwrap();
let chunks: Vec<Seq<Dna>> = seq.chunks(3).collect();
assert_eq!(chunks, vec![dna!("ACT"), dna!("GAT")]);pub fn len(&self) -> usize
Sourcepub fn get(&self, i: usize) -> Option<A>
pub fn get(&self, i: usize) -> Option<A>
Get the ith element of a Seq. Returns None if index out of range.
pub fn is_empty(&self) -> bool
Trait Implementations§
Source§impl<A: Codec> AsRef<SeqSlice<A>> for Seq<A>
A Seq can be borrowed as a SeqSlice through generic constraints.
impl<A: Codec> AsRef<SeqSlice<A>> for Seq<A>
A Seq can be borrowed as a SeqSlice through generic constraints.
fn count_bases<S: AsRef<SeqSlice<Dna>>>(s: S) -> usize {
s.as_ref().len()
}
let seq: Seq<Dna> = dna!("CATCGATCGATC").into();
let count = count_bases(seq); // the AsRef implementation allows us to directly pass a Seq
assert_eq!(count, 12);Source§impl<A: Codec> Borrow<SeqSlice<A>> for Seq<A>
Borrow a Seq<A> as a SeqSlice<A>.
impl<A: Codec> Borrow<SeqSlice<A>> for Seq<A>
Borrow a Seq<A> as a SeqSlice<A>.
The Borrow trait to is used to obtain a reference to a SeqSlice from a Seq, allowing it to be used wherever a SeqSlice is expected.
use std::collections::HashMap;
use bio_seq::prelude::*;
let reference = dna!("ACGTTCGCATGCTACGACGATC");
let mut table: HashMap<Seq<Dna>, usize> = HashMap::new();
// Associate some kind of count with sequences as keys:
table.insert(dna!("ACGTT").into(), 1);
table.insert(dna!("ACACCCCC").into(), 0);
// The query is a short window in the reference `Seq`
let query: &SeqSlice<Dna> = &reference[..5];
if let Some(value) = table.get(query) {
// `SeqSlice` implements `Display`
println!("{query}: {value}");
}Source§impl<A: Codec> Clone for Seq<A>
Creates a deep copy of the sequence.
impl<A: Codec> Clone for Seq<A>
Creates a deep copy of the sequence.
#[macro_use]
let mut seq1: Seq<Dna> = dna!("CATCGATCGATC").into();
let seq2: Seq<Dna> = seq1.clone();
seq1.push(Dna::A);
assert_ne!(seq1, seq2);Source§impl<A: Codec + ComplementMut> Complement for Seq<A>
impl<A: Codec + ComplementMut> Complement for Seq<A>
Source§impl<A: Codec + ComplementMut> ComplementMut for Seq<A>
impl<A: Codec + ComplementMut> ComplementMut for Seq<A>
Source§impl<A: Codec> Deref for Seq<A>
Automatic dereferencing of Seq<A> to SeqSlice<A>.
impl<A: Codec> Deref for Seq<A>
Automatic dereferencing of Seq<A> to SeqSlice<A>.
fn count_bases(s: &SeqSlice<Dna>) -> usize {
s.len()
}
let seq: Seq<Dna> = dna!("CATCGATCGATC").into();
let count = count_bases(&seq);
assert_eq!(count, 12);Source§impl<'de, A: Codec> Deserialize<'de> for Seq<A>
impl<'de, A: Codec> Deserialize<'de> for Seq<A>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<A: Codec> Extend<A> for Seq<A>
impl<A: Codec> Extend<A> for Seq<A>
Source§fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T)
fn extend<T: IntoIterator<Item = A>>(&mut self, iter: T)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<A: Codec> From<&BitSlice> for Seq<A>
Unstable construct a Seq from a bitslice. This may change in the future.
impl<A: Codec> From<&BitSlice> for Seq<A>
Unstable construct a Seq from a bitslice. This may change in the future.
Source§impl<A: Codec> From<BitVec> for Seq<A>
Unstable construct a Seq from a bitvec. This may change in the future.
impl<A: Codec> From<BitVec> for Seq<A>
Unstable construct a Seq from a bitvec. This may change in the future.
Source§impl<A: Codec> FromIterator<A> for Seq<A>
impl<A: Codec> FromIterator<A> for Seq<A>
Source§fn from_iter<I: IntoIterator<Item = A>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = A>>(iter: I) -> Self
Source§impl<'a, A: Codec> IntoIterator for &'a Seq<A>
impl<'a, A: Codec> IntoIterator for &'a Seq<A>
Source§impl<A: Codec + MaskableMut> MaskableMut for Seq<A>
impl<A: Codec + MaskableMut> MaskableMut for Seq<A>
Source§impl<A: Ord + Codec> Ord for Seq<A>
impl<A: Ord + Codec> Ord for Seq<A>
Source§impl<A: PartialOrd + Codec> PartialOrd for Seq<A>
impl<A: PartialOrd + Codec> PartialOrd for Seq<A>
Source§impl<A: Codec + ComplementMut> ReverseComplement for Seq<A>
impl<A: Codec + ComplementMut> ReverseComplement for Seq<A>
fn to_revcomp(&self) -> <Self as ToOwned>::Owned
Source§impl<A: Codec + ComplementMut> ReverseComplementMut for Seq<A>
impl<A: Codec + ComplementMut> ReverseComplementMut for Seq<A>
impl<A: Eq + Codec> Eq for Seq<A>
impl<A: Codec> StructuralPartialEq for Seq<A>
Auto Trait Implementations§
impl<A> Freeze for Seq<A>
impl<A> RefUnwindSafe for Seq<A>where
A: RefUnwindSafe,
impl<A> Send for Seq<A>where
A: Send,
impl<A> Sync for Seq<A>where
A: Sync,
impl<A> Unpin for Seq<A>where
A: Unpin,
impl<A> UnwindSafe for Seq<A>where
A: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.