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

    @Override
    public LogProbGraph logProbGraph() {
        final DoublePlaceholderVertex xPlaceholder = new DoublePlaceholderVertex(this.getShape());
        final DoublePlaceholderVertex xMinPlaceholder = new DoublePlaceholderVertex(xMin.getShape());
        final DoublePlaceholderVertex xMaxPlaceholder = new DoublePlaceholderVertex(xMax.getShape());
        final DoublePlaceholderVertex cPlaceholder = new DoublePlaceholderVertex(c.getShape());

        return LogProbGraph.builder()
            .input(this, xPlaceholder)
            .input(xMin, xMinPlaceholder)
            .input(xMax, xMaxPlaceholder)
            .input(c, cPlaceholder)
            .logProbOutput(Triangular.logProbOutput(xPlaceholder, xMinPlaceholder, xMaxPlaceholder, cPlaceholder))
            .build();
    }

    public  TriangularVertex(@LoadShape long[] tensorShape,
                            @LoadVertexParam(X_MIN_NAME) Vertex<DoubleTensor, ?> xMin,
                            @LoadVertexParam(X_MAX_NAME) Vertex<DoubleTensor, ?> xMax,
                            @LoadVertexParam(C_NAME) Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(long[] tensorShape, Vertex<DoubleTensor, ?> xMin, Vertex<DoubleTensor, ?> xMax, double c);
    public  TriangularVertex(long[] tensorShape, Vertex<DoubleTensor, ?> xMin, double xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(long[] tensorShape, Vertex<DoubleTensor, ?> xMin, double xMax, double c);
    public  TriangularVertex(long[] tensorShape, double xMin, Vertex<DoubleTensor, ?> xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(long[] tensorShape, double xMin, double xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(long[] tensorShape, double xMin, double xMax, double c);
    @ExportVertexToPythonBindings public  TriangularVertex(Vertex<DoubleTensor, ?> xMin, Vertex<DoubleTensor, ?> xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(Vertex<DoubleTensor, ?> xMin, Vertex<DoubleTensor, ?> xMax, double c);
    public  TriangularVertex(Vertex<DoubleTensor, ?> xMin, double xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(Vertex<DoubleTensor, ?> xMin, double xMax, double c);
    public  TriangularVertex(double xMin, Vertex<DoubleTensor, ?> xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(double xMin, double xMax, Vertex<DoubleTensor, ?> c);
    public  TriangularVertex(double xMin, double xMax, double c);

}