// losses.mbt

///|
/// Cross entropy for a two-dimensional logits tensor and integer class labels.
pub fn cross_entropy(logits : Tensor, labels : Tensor) -> Tensor {
  if logits.shape.length() != 2 || labels.shape.length() != 1 {
    panic()
  }
  let batch = logits.shape[0]
  let classes = logits.shape[1]
  if batch == 0 ||
    classes == 0 ||
    labels.shape[0] != batch ||
    labels.data.length() != batch {
    panic()
  }
  for label in labels.data {
    if label < 0.0 ||
      label >= classes.to_double() ||
      label != label.to_int().to_double() {
      panic()
    }
  }
  let mut total = 0.0
  for row in 0.. maximum {
        maximum = logits.data[offset + col]
      }
    }
    let mut denominator = 0.0
    for col in 0.. Tensor {
  if probabilities.shape != targets.shape || probabilities.data.length() == 0 {
    panic()
  }
  let mut total = 0.0
  for i in 0..= 1.0 {
      panic()
    }
    total = total - (t * ln(p) + (1.0 - t) * ln(1.0 - p))
  }
  let out = Tensor::new(
    [total / probabilities.data.length().to_double()],
    [],
    requires_grad=false,
  )
  out
}