class LogNormalVertex extends VertexImpl<DoubleTensor, DoubleVertex> implements DoubleVertex, Differentiable, ProbabilisticDouble, SamplableWithManyScalars<DoubleTensor>, LogProbGraphSupplier {

    @Override
    public LogProbGraph logProbGraph() {
        final DoublePlaceholderVertex xPlaceholder = new DoublePlaceholderVertex(this.getShape());
        final DoublePlaceholderVertex muPlaceholder = new DoublePlaceholderVertex(mu.getShape());
        final DoublePlaceholderVertex sigmaPlaceholder = new DoublePlaceholderVertex(sigma.getShape());

        return LogProbGraph.builder()
            .input(this, xPlaceholder)
            .input(mu, muPlaceholder)
            .input(sigma, sigmaPlaceholder)
            .logProbOutput(LogNormal.logProbOutput(xPlaceholder, muPlaceholder, sigmaPlaceholder))
            .build();
    }

    public  LogNormalVertex(@LoadShape long[] tensorShape,
                           @LoadVertexParam(MU_NAME) Vertex<DoubleTensor, ?> mu,
                           @LoadVertexParam(SIGMA_NAME) Vertex<DoubleTensor, ?> sigma);
    public  LogNormalVertex(long[] tensorShape, Vertex<DoubleTensor, ?> mu, double sigma);
    public  LogNormalVertex(long[] tensorShape, double mu, Vertex<DoubleTensor, ?> sigma);
    public  LogNormalVertex(long[] tensorShape, double mu, double sigma);
    @ExportVertexToPythonBindings public  LogNormalVertex(Vertex<DoubleTensor, ?> mu, Vertex<DoubleTensor, ?> sigma);
    public  LogNormalVertex(double mu, Vertex<DoubleTensor, ?> sigma);
    public  LogNormalVertex(Vertex<DoubleTensor, ?> mu, double sigma);
    public  LogNormalVertex(double mu, double sigma);

}