class UniformIntVertex extends VertexImpl<IntegerTensor, IntegerVertex> implements IntegerVertex, ProbabilisticInteger, SamplableWithManyScalars<IntegerTensor>, LogProbGraphSupplier {

    @Override
    public LogProbGraph logProbGraph() {
        IntegerPlaceholderVertex valuePlaceholder = new IntegerPlaceholderVertex(this.getShape());
        IntegerPlaceholderVertex minPlaceholder = new IntegerPlaceholderVertex(min.getShape());
        IntegerPlaceholderVertex maxPlaceholder = new IntegerPlaceholderVertex(max.getShape());

        return LogProbGraph.builder()
            .input(this, valuePlaceholder)
            .input(min, minPlaceholder)
            .input(max, maxPlaceholder)
            .logProbOutput(UniformInt.logProbOutput(valuePlaceholder, minPlaceholder, maxPlaceholder))
            .build();
    }

    public  UniformIntVertex(@LoadShape long[] shape,
                            @LoadVertexParam(MIN_NAME) Vertex<IntegerTensor, ?> min,
                            @LoadVertexParam(MAX_NAME) Vertex<IntegerTensor, ?> max);
    public  UniformIntVertex(long[] shape, int min, int max);
    public  UniformIntVertex(long[] shape, IntegerTensor min, IntegerTensor max);
    public  UniformIntVertex(long[] shape, Vertex<IntegerTensor, ?> min, int max);
    public  UniformIntVertex(long[] shape, int min, Vertex<IntegerTensor, ?> max);
    @ExportVertexToPythonBindings public  UniformIntVertex(Vertex<IntegerTensor, ?> min, Vertex<IntegerTensor, ?> max);
    public  UniformIntVertex(Vertex<IntegerTensor, ?> min, int max);
    public  UniformIntVertex(int min, Vertex<IntegerTensor, ?> max);
    public  UniformIntVertex(int min, int max);

}