///|
/// Demo for rrvgo module: GO term semantic redundancy reduction.
fn main {
  println("=== rrvgo Demo: GO Term Redundancy Reduction ===")
  println("")

  // Example 1: Build a small GO graph using gosemsim demo graph
  println("--- Step 1: Build GO Graph ---")
  let graph = @src.gosemsim_example_graph()
  let ids = graph.term_ids()
  println("GO terms count: " + ids.length().to_string())
  println("")

  // Example 2: Compute semantic similarity matrix (Wang method)
  println("--- Step 2: Semantic Similarity Matrix ---")
  let sims = @src.rvgo_sim_matrix(graph, ids)
  println(
    "Similarity matrix: " +
    sims.length().to_string() +
    " x " +
    sims[0].length().to_string(),
  )
  println("GO:0007165 vs GO:0023046 sim = " + sims[5][4].to_string())
  println("")

  // Example 3: Distance matrix
  println("--- Step 3: Distance Matrix ---")
  let dist = @src.rvgo_dist_matrix(sims)
  println("Dist range: [0.0, " + dist[5][4].to_string() + "]")
  println("")

  // Example 4: Hierarchical clustering
  println("--- Step 4: Hierarchical Clustering ---")
  let merges = @src.rvgo_hclust(dist)
  println("Merges: " + merges.length().to_string())
  println("")

  // Example 5: Cut into clusters
  println("--- Step 5: Cut Tree into Clusters ---")
  let clusters = @src.rvgo_cutree(merges, ids.length(), 0.7)
  println("Number of clusters: " + clusters.length().to_string())
  let cluster_sizes : Map[Int32, Int32] = Map([], capacity=clusters.length())
  for i in 0.. (" + x.to_string() + ", " + y.to_string() + ")",
    )
  }
  println("")

  println("=== rrvgo Demo Complete ===")
}