///|
/// SummarizedExperiment Demo.
fn main {
  println("=== SummarizedExperiment Demo ===\n")

  let assays = Map([
    ("counts", [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]),
  ])
  let row_ranges = [("chr1", 1, 100), ("chr1", 200, 300), ("chr2", 100, 200)]
  let col_data = [
    Map([("sample", "s1"), ("group", "A")]),
    Map([("sample", "s2"), ("group", "A")]),
    Map([("sample", "s3"), ("group", "B")]),
  ]
  let metadata = Map([("experiment", "RNA-seq"), ("platform", "Illumina")])

  println("1. Creating SummarizedExperiment...")
  let se = @src.summarized_experiment(assays, row_ranges, col_data, metadata)
  println("   Rows: \{@src.se_nrow(se)}")
  println("   Cols: \{@src.se_ncol(se)}")
  println("   Assays: \{@src.se_assay_names(se).join(", ")}")

  println("\n2. Getting row and column means...")
  let row_means = @src.se_row_means(se, "counts")
  let col_means = @src.se_col_means(se, "counts")
  let row_str = row_means.map(fn(x) { x.to_string() }).join(", ")
  let col_str = col_means.map(fn(x) { x.to_string() }).join(", ")
  println("   Row means: \{row_str}")
  println("   Col means: \{col_str}")

  println("\n3. Subsetting rows [0, 2]...")
  let se_sub = @src.se_subset_rows(se, [0, 2])
  println("   New rows: \{@src.se_nrow(se_sub)}")

  println("\n4. Subsetting columns [0, 1]...")
  let se_sub2 = @src.se_subset_cols(se, [0, 1])
  println("   New cols: \{@src.se_ncol(se_sub2)}")

  println("\n=== SummarizedExperiment Demo Complete ===")
}