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

    @Override
    public LogProbGraph logProbGraph() {
        final DoublePlaceholderVertex xPlaceholder = new DoublePlaceholderVertex(this.getShape());
        final DoublePlaceholderVertex alphaPlaceholder = new DoublePlaceholderVertex(alpha.getShape());
        final DoublePlaceholderVertex betaPlaceholder = new DoublePlaceholderVertex(beta.getShape());

        return LogProbGraph.builder()
            .input(this, xPlaceholder)
            .input(alpha, alphaPlaceholder)
            .input(beta, betaPlaceholder)
            .logProbOutput(InverseGamma.logProbOutput(xPlaceholder, alphaPlaceholder, betaPlaceholder))
            .build();
    }

    public  InverseGammaVertex(@LoadShape long[] tensorShape,
                              @LoadVertexParam(ALPHA_NAME) Vertex<DoubleTensor, ?> alpha,
                              @LoadVertexParam(BETA_NAME) Vertex<DoubleTensor, ?> beta);
    @ExportVertexToPythonBindings public  InverseGammaVertex(Vertex<DoubleTensor, ?> alpha, Vertex<DoubleTensor, ?> beta);
    public  InverseGammaVertex(Vertex<DoubleTensor, ?> alpha, double beta);
    public  InverseGammaVertex(double alpha, Vertex<DoubleTensor, ?> beta);
    public  InverseGammaVertex(double alpha, double beta);
    public  InverseGammaVertex(long[] tensorShape, Vertex<DoubleTensor, ?> alpha, double beta);
    public  InverseGammaVertex(long[] tensorShape, double alpha, Vertex<DoubleTensor, ?> beta);
    public  InverseGammaVertex(long[] tensorShape, double alpha, double beta);

}