///|
fn checksum(dataset : Array[Array[Double]]) -> Double {
  let mut result = 0.0
  for row in dataset {
    for value in row {
      result += value
    }
  }
  result
}

///|
fn main {
  let dense = @diagnose.synthetic_matrix(200, 12, 17)
  let dataset = @diagnose.apply_missing_rate(dense, 0.2, 31)
  let rounds = 20
  println("MoonMissingness benchmark")
  println(
    "dataset_rows=200 dataset_columns=12 requested_missing_rate=0.2 rounds=20",
  )
  println("actual_missing_cells=\{@diagnose.missing_count(dataset)}")
  println("actual_missing_rate=\{@diagnose.missing_fraction(dataset)}")
  println("pattern_count=\{@diagnose.unique_pattern_count(dataset)}")
  println("quality_score=\{@diagnose.dataset_quality_score(dataset)}")
  let benchmark_pipeline = ["median", "knn", "mice"]
  println("knn_k=5")
  println("mice_iterations=3")
  println("benchmark_seed=17")
  println("strategies=\{Repr(benchmark_pipeline)}")
  let mut mean_checksum = 0.0
  for _ in 0.. row_total + number
          None => row_total
        }
      })
    })
  }
  println("mice_impute_checksum=\{mice_checksum}")
  let mask = @impute.deterministic_holdout_mask(dataset, 0.1, 17)
  let (masked, applied) = @impute.mask_observed_cells(dataset, mask)
  let validation = @impute.impute_median(masked).map(fn(row) {
    row.map(fn(value) { Some(value) })
  })
  println("holdout_cells=\{@impute.mask_count(applied)}")
  println(
    "holdout_mae=\{Repr(@impute.masked_mae(dataset, validation, applied))}",
  )
  println(
    "holdout_rmse=\{Repr(@impute.masked_rmse(dataset, validation, applied))}",
  )
  println("benchmark_complete=true")
  println("benchmark_reproducible=true")
}