packed_seq/
packed_n_seq.rs1use super::*;
2
3#[derive(Clone, Copy, Debug, MemSize, MemDbg)]
4#[cfg_attr(feature = "pyo3", pyo3::pyclass)]
5#[cfg_attr(feature = "epserde", derive(epserde::Epserde))]
6pub struct PackedNSeq<'s> {
7 pub seq: PackedSeq<'s>,
8 pub ambiguous: BitSeq<'s>,
9}
10
11#[derive(Clone, Debug, MemSize, MemDbg)]
12#[cfg_attr(feature = "pyo3", pyo3::pyclass)]
13#[cfg_attr(feature = "epserde", derive(epserde::Epserde))]
14pub struct PackedNSeqVec {
15 pub seq: PackedSeqVec,
16 pub ambiguous: BitSeqVec,
17}
18
19impl<'s> PackedNSeq<'s> {
21 pub fn to_revcomp(&self) -> PackedNSeqVec {
22 PackedNSeqVec {
23 seq: self.seq.to_revcomp(),
24 ambiguous: self.ambiguous.to_revcomp(),
25 }
26 }
27}
28
29impl PackedNSeqVec {
31 pub fn random(len: usize, n_frac: f32) -> Self {
32 let seq = PackedSeqVec::random(len);
33 let ambiguous = BitSeqVec::random(len, n_frac);
34 Self { seq, ambiguous }
35 }
36
37 pub fn as_slice(&self) -> PackedNSeq<'_> {
38 PackedNSeq {
39 seq: self.seq.as_slice(),
40 ambiguous: self.ambiguous.as_slice(),
41 }
42 }
43
44 pub fn from_ascii(seq: &[u8]) -> Self {
45 Self {
46 seq: PackedSeqVec::from_ascii(seq),
47 ambiguous: BitSeqVec::from_ascii(seq),
48 }
49 }
50}