Matrices
PowerIO returns native Julia sparse matrices backed by Rust matrix construction. Matrix builders are a core API, not a transmission guide footnote.
The PowerIO C ABI transports common power system matrix entries as Arrow COO tables. Julia materializes those entries as SparseMatrixCSC values and stores matrix metadata in wrappers that are familiar to PowerModels users.
The shipped matrix API supports BalancedNetwork. Distribution system matrices belong in this API family once Rust exposes distribution matrix constructors.
Usage
net = parse_file("case14.m")
ybus = calc_admittance_matrix(net) # PowerIO.AdmittanceMatrix{ComplexF64}
Y = ybus.matrix
sm = calc_susceptance_matrix(net) # NOTE: PowerModels sign convention
B = sm.matrix
A = calc_incidence_matrix(net) # SparseMatrixCSC{Float64,Int}
Bp = calc_bprime_matrix(net).matrix # Rust B' positive Laplacian
Bpp = calc_bdoubleprime_matrix(net).matrixStructure
calc_admittance_matrix, calc_susceptance_matrix, calc_bprime_matrix, and calc_bdoubleprime_matrix return PowerIO.AdmittanceMatrix, which carries:
idx_to_bus: row index to external bus id.bus_to_idx: external bus id to row index.matrix: the sparse matrix.
The row and column index space is the dense matrix row index chosen by Rust. Use idx_to_bus and bus_to_idx when you need to translate between matrix rows and external bus ids.
Sign Convention
calc_susceptance_matrix(net).matrix follows the PowerModels sign convention. Rust's B' keeps the positive Laplacian convention, so:
calc_susceptance_matrix(net).matrix == -calc_bprime_matrix(net).matrixto_arrow remains available for lower level consumers that want COO tables directly:
coo = to_arrow(net, :ybus) # row_index, col_index, g, b