class LaplaceVertex 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 betaPlaceholder = new DoublePlaceholderVertex(beta.getShape());

        return LogProbGraph.builder()
            .input(this, xPlaceholder)
            .input(mu, muPlaceholder)
            .input(beta, betaPlaceholder)
            .logProbOutput(Laplace.logProbOutput(xPlaceholder, muPlaceholder, betaPlaceholder))
            .build();
    }

    public  LaplaceVertex(@LoadShape long[] tensorShape,
                         @LoadVertexParam(MU_NAME) Vertex<DoubleTensor, ?> mu,
                         @LoadVertexParam(BETA_NAME) Vertex<DoubleTensor, ?> beta);
    public  LaplaceVertex(long[] shape, Vertex<DoubleTensor, ?> mu, double beta);
    public  LaplaceVertex(long[] shape, double mu, Vertex<DoubleTensor, ?> beta);
    public  LaplaceVertex(long[] shape, double mu, double beta);
    @ExportVertexToPythonBindings public  LaplaceVertex(Vertex<DoubleTensor, ?> mu,
                         Vertex<DoubleTensor, ?> beta);
    public  LaplaceVertex(Vertex<DoubleTensor, ?> mu, double beta);
    public  LaplaceVertex(double mu, Vertex<DoubleTensor, ?> beta);
    public  LaplaceVertex(double mu, double beta);

}