use crate::errors::Result;
use crate::utils::normalize_vector;
use ndarray::{Array1, Array2};
pub fn baum_welch(
_observations: &Array2<f64>,
_start_prob: &mut Array1<f64>,
_transition_matrix: &mut Array2<f64>,
_emission_probs: &mut Array2<f64>,
max_iter: usize,
_tol: f64,
) -> Result<usize> {
Ok(max_iter)
}
pub fn compute_gamma(alpha: &Array2<f64>, beta: &Array2<f64>) -> Result<Array2<f64>> {
let n_samples = alpha.nrows();
let n_states = alpha.ncols();
let mut gamma = Array2::zeros((n_samples, n_states));
for t in 0..n_samples {
for i in 0..n_states {
gamma[[t, i]] = alpha[[t, i]] * beta[[t, i]];
}
let row = gamma.row(t).to_owned();
let normalized_row = normalize_vector(row);
for i in 0..n_states {
gamma[[t, i]] = normalized_row[i];
}
}
Ok(gamma)
}