///|
/// Calculates Inverse Probability Weights for Average Treatment Effect (ATE).
pub fn ipw_weights_ate(
  treatments : Array[Bool],
  propensity_scores : Array[Double],
) -> Array[Double] {
  let n = if treatments.length() < propensity_scores.length() {
    treatments.length()
  } else {
    propensity_scores.length()
  }
  let weights = Array::new(capacity=n)
  for i in 0.. Array[Double] {
  let n = if treatments.length() < propensity_scores.length() {
    treatments.length()
  } else {
    propensity_scores.length()
  }
  let weights = Array::new(capacity=n)
  for i in 0..