///|
/// Reuse experiment structure only. All rows are initially empty and every
/// observation is obtained from the new experiment. Prefix closure is explicit.
fn ActiveTable::initialize_from(
self : ActiveTable,
seed : Machine,
) -> Unit raise {
if seed.alphabet != self.alphabet {
raise InvalidArgument("historical model alphabet order mismatch")
}
let model = seed.minimize()
let suffixes = model.characterizing_set(max_work=1000000)
for (_, word) in model.access_sequences() {
for end in 1..<=word.length() {
self.add_prefix(word[:end].to_owned())
}
}
for suffix in suffixes {
if !suffix.is_empty() && !self.suffixes.contains(suffix) {
self.suffixes.push(suffix.copy())
}
}
if self.suffixes.length() > self.max_cells {
raise LimitExceeded("seed-table-cells")
}
}