class RandomFunction extends Scalar<Double, Void> {

    public static final String NAME = "random";

    public static void register(Functions.Builder module) {
        module.add(
            scalar(
                NAME,
                DataTypes.DOUBLE.getTypeSignature()
            ).withFeatures(EnumSet.of(Feature.NON_NULLABLE)),
            RandomFunction::new
        );
    }

    private final Random random = new Random();

    public RandomFunction(Signature signature, BoundSignature boundSignature) {
        super(signature, boundSignature);
    }

    @Override
    public Symbol normalizeSymbol(Function symbol, TransactionContext txnCtx, NodeContext nodeCtx) {<FILL_FUNCTION_BODY>}


    @Override
    @SafeVarargs
    public final Double evaluate(TransactionContext txnCtx, NodeContext nodeCtx, Input<Void> ... args) {
        assert args.length == 0 : "number of args must be 0";
        return this.random.nextDouble();
    }
}

        /* There is no evaluation here, so the function is executed
           per row. Else every row would contain the same random value*/
        assert symbol.arguments().size() == 0 : "function's number of arguments must be 0";
        return symbol;
    
<methods>public BoundSignature boundSignature() ,public Scalar<java.lang.Double,java.lang.Void> compile(List<io.crate.expression.symbol.Symbol>, java.lang.String, io.crate.role.Roles) ,public transient abstract java.lang.Double evaluate(io.crate.metadata.TransactionContext, io.crate.metadata.NodeContext, Input<java.lang.Void>[]) ,public io.crate.expression.symbol.Symbol normalizeSymbol(io.crate.expression.symbol.Function, io.crate.metadata.TransactionContext, io.crate.metadata.NodeContext) ,public io.crate.metadata.functions.Signature signature() <variables>public static final Set<io.crate.metadata.Scalar.Feature> DETERMINISTIC_AND_COMPARISON_REPLACEMENT,public static final Set<io.crate.metadata.Scalar.Feature> DETERMINISTIC_ONLY,public static final Set<io.crate.metadata.Scalar.Feature> NO_FEATURES,protected final non-sealed BoundSignature boundSignature,protected final non-sealed io.crate.metadata.functions.Signature signature