///|
/// scikit-bio composition (CoDA) demo: closure, clr/ilr/alr transforms and the
/// Aitchison arithmetic operations.

///|
fn main {
  let x = [0.1, 0.3, 0.4, 0.2]

  println("=== closure([2, 2, 6]) ===")
  println(Repr(@src.skbio_closure([2.0, 2.0, 6.0])))

  println("\n=== clr([0.1, 0.3, 0.4, 0.2]) ===")
  println(Repr(@src.skbio_clr(x)))

  println("\n=== ilr (default Gram-Schmidt basis) ===")
  let basis = @src.skbio_gram_schmidt_basis(4)
  let ilr = @src.skbio_ilr(x, basis)
  println(Repr(ilr))
  println("ilr_inv(ilr(x)) round-trips to closure(x):")
  println(Repr(@src.skbio_ilr_inv(ilr, basis)))

  println("\n=== alr (reference = component 0) ===")
  println(Repr(@src.skbio_alr([0.1, 0.3, 0.6], 0)))

  println("\n=== Aitchison arithmetic ===")
  println(
    "perturb([1/3,1/3,1/3], [1/2,1/2,1]) = \{Repr(@src.skbio_perturb([1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0], [0.5, 0.5, 1.0]))}",
  )
  println(
    "inner([.1,.3,.4,.2], [.2,.4,.2,.2])  = \{@src.skbio_inner(x, [0.2, 0.4, 0.2, 0.2])}",
  )

  println("\n=== multi_replace (zero imputation) ===")
  println(Repr(@src.skbio_multi_replace([0.2, 0.4, 0.4, 0.0])))
}