class MultivariateGaussianDistribution implements Distribution {

    @Override public double prob(Vector x) {
        Vector delta = x.minus(mean);
        Matrix ePower = delta.toMatrix(true)
            .times(invCovariance)
            .times(delta.toMatrix(false))
            .times(-0.5);
        assert ePower.columnSize() == 1 && ePower.rowSize() == 1;

        return Math.pow(Math.E, ePower.get(0, 0)) / normalizer;
    }

    public  MultivariateGaussianDistribution(Vector mean, Matrix covariance);

}