use crate::{AlphabetId, OrdinalMap, SerialAlphabet, Series, SeriesTransform};
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum RelaxedInvariant {
SourceOrder,
SymbolIdentity,
AlphabetIdentity,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TransformCertificate<A: SerialAlphabet> {
pub source_alphabet: AlphabetId,
pub target_alphabet: AlphabetId,
pub aggregate_preserved: bool,
pub order_map: OrdinalMap,
pub inverse: Option<SeriesTransform<A>>,
pub relaxed_invariants: Vec<RelaxedInvariant>,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TransformedSeries<A: SerialAlphabet> {
pub series: Series<A>,
pub certificate: TransformCertificate<A>,
}