use sprs::CsMat;
use crate::Result;
use crate::indexed::IndexedNetwork;
use super::BuildOptions;
use super::ybus::build_ybus;
pub fn build_lacpf(case: &IndexedNetwork, opts: &BuildOptions) -> Result<CsMat<f64>> {
let parts = build_ybus(case, opts)?;
let n = case.n();
let two_n = 2 * n;
let mut tri = sprs::TriMat::with_capacity((two_n, two_n), 2 * (parts.g.nnz() + parts.b.nnz()));
for (&v, (i, j)) in &parts.g {
tri.add_triplet(i, j, v); tri.add_triplet(n + i, n + j, -v); }
for (&v, (i, j)) in &parts.b {
tri.add_triplet(i, n + j, -v); tri.add_triplet(n + i, j, -v); }
Ok(tri.to_csr())
}