#[macro_use]
extern crate trackable;
use gp::distributions::GaussianProcessPrior;
use gp::kernels::GaussianKernel;
use gp::means::ZERO_MEAN;
use rand;
use rand::distributions::Distribution;
use structopt::StructOpt;
#[derive(Debug, StructOpt)]
#[structopt(rename_all = "kebab-case")]
struct Opt {
#[structopt(long)]
xs: Vec<f64>,
#[structopt(long, default_value = "0.1")]
length_scale: f64,
}
fn main() -> trackable::result::TopLevelResult {
let opt = Opt::from_args();
let kernel = GaussianKernel::new(opt.length_scale);
let prior = track!(GaussianProcessPrior::new(&opt.xs, ZERO_MEAN, kernel))?;
let mut rng = rand::thread_rng();
let ys = prior.sample(&mut rng);
for (x, y) in opt.xs.iter().zip(ys.as_slice().iter()) {
println!("{} {}", x, y);
}
Ok(())
}