class HalfCauchyVertex extends CauchyVertex {

    @Override
    public LogProbGraph logProbGraph() {
        final DoublePlaceholderVertex xPlaceholder = new DoublePlaceholderVertex(this.getShape());
        final DoublePlaceholderVertex locationPlaceholder = new DoublePlaceholderVertex(getLocation().getShape());
        final DoublePlaceholderVertex scalePlaceholder = new DoublePlaceholderVertex(getScale().getShape());

        final DoubleVertex cauchyLogProbOutput = Cauchy.logProbOutput(xPlaceholder, locationPlaceholder, scalePlaceholder);

        final DoubleVertex result = cauchyLogProbOutput.plus(LOG_TWO);
        final DoubleVertex invalidMask = xPlaceholder.lessThanMask(LOC_ZERO);
        final DoubleVertex halfCauchyLogProbOutput = result.setWithMask(invalidMask, Double.NEGATIVE_INFINITY);

        // Set the value of locationPlaceholder since we know it's 0.
        locationPlaceholder.setValue(LOC_ZERO);

        return LogProbGraph.builder()
            .input(this, xPlaceholder)
            .input(getLocation(), locationPlaceholder)
            .input(getScale(), scalePlaceholder)
            .logProbOutput(halfCauchyLogProbOutput)
            .build();
    }

    public  HalfCauchyVertex(@LoadShape long[] tensorShape,
                            @LoadVertexParam(SCALE_NAME) Vertex<DoubleTensor, ?> scale);
    public  HalfCauchyVertex(long[] tensorShape, double scale);
    @ExportVertexToPythonBindings public  HalfCauchyVertex(Vertex<DoubleTensor, ?> scale);
    public  HalfCauchyVertex(double scale);

}