///|
/// t-SNE Dimensionality Reduction Demo
///
/// This demo shows how to use the Rtsne module for
/// t-Distributed Stochastic Neighbor Embedding (t-SNE) analysis.
fn main {
  println("=== t-SNE Dimensionality Reduction Demo ===")
  println("")

  println("1. Default t-SNE configuration:")
  let config = @src.TsneConfig::new()
  println("   Perplexity: \{config.perplexity}")
  println("   Max iterations: \{config.max_iter}")
  println("   Dimensions: \{config.dims}")
  println("   Learning rate (eta): \{config.eta}")
  println("   Theta (Barnes-Hut): \{config.theta}")
  println("")

  println("2. Distance matrix calculation:")
  let sample_data = [[0.0, 0.0, 0.0], [3.0, 4.0, 0.0], [1.0, 1.0, 1.0]]
  let dist_matrix = @src.calc_distance_matrix(sample_data)
  println("   Samples: \{sample_data.length()}")
  println("   Features per sample: \{sample_data[0].length()}")
  println("   Distance matrix:")
  let mut i = 0
  while i < dist_matrix.length() {
    println("     \{Repr(dist_matrix[i])}")
    i = i + 1
  }
  println("")

  println("3. t-SNE on clustered test data:")
  let test_data = @src.create_tsne_test_data(20, 5)
  println("   Test data samples: \{test_data.length()}")
  println("   Test data features: \{test_data[0].length()}")
  println("   Data has 3 clusters")
  println("")

  println("4. Running t-SNE (reduced iterations for demo):")
  let test_config = @src.TsneConfig::new_custom(5.0, 200, 2, 42)
  let tsne_result = @src.tsne(test_data, test_config)
  println(
    "   Embedding shape: \{tsne_result.embedding.length()} x \{tsne_result.embedding[0].length()}",
  )
  println("   Iterations run: \{tsne_result.n_iter}")
  println("   Final cost: \{tsne_result.costs[tsne_result.costs.length() - 1]}")
  println("")

  println("5. First few embedding coordinates:")
  let mut j = 0
  while j < 5 && j < tsne_result.embedding.length() {
    println(
      "   Sample \{j}: [\{tsne_result.embedding[j][0]}, \{tsne_result.embedding[j][1]}]",
    )
    j = j + 1
  }
  println("")

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