this.{method_name} = function(features) {{
    var likelihoods = new Array(this.sigmas.length);

    for (var i = 0, il = this.sigmas.length; i < il; i++) {{
        var sum = 0.;
        for (var j = 0, jl = this.sigmas[0].length; j < jl; j++) {{
            sum += Math.log(2. * Math.PI * this.sigmas[i][j]);
        }}
        var nij = -0.5 * sum;
        sum = 0.;
        for (var j = 0, jl = this.sigmas[0].length; j < jl; j++) {{
            sum += Math.pow(features[j] - this.thetas[i][j], 2.) / this.sigmas[i][j];
        }}
        nij -= 0.5 * sum;
        likelihoods[i] = Math.log(this.priors[i]) + nij;
    }}

    var classIdx = 0;
    for (var i = 0, l = likelihoods.length; i < l; i++) {{
        classIdx = likelihoods[i] > likelihoods[classIdx] ? i : classIdx;
    }}
    return classIdx;
}};