def _nevergrad_ask_tell(optimizer, ob_func, no_bias=False):
    """Exposes the Nevergrad Optimizer ask and tell interface

    Parameters
    ----------
    optimizer: nevergrad.Optimizer
        Nevergrad Optimizer instance to perform optimization routine
    ob_func: nevergrad.MultiobjectiveFunction
        Nevergrad MultiobjectiveFunction instance to be optimized
    no_bias: bool, optional
        Whether or nor to calculate hyper-volume from objective
        function value and return to optimizer

    Returns
    -------
    x: nevergrad.Parameter
        Parameter values determining input point to be calculated
    value: float
        Output value calculated from objective function
    """

    # Ask the optimizer for a new value
    x = optimizer.ask()

    # Calculate the optimizer objective score values
    value = ob_func.multiobjective_function(*x.args)

    # Update the objective function with the new value and
    # compute the hyper-volume. If no_bias is enforced, then
    # do not report any information to both optimizer or
    # objective function
    if no_bias:
        volume = 0
    else:
        volume = ob_func.compute_aggregate_loss(
            value, *x.args, **x.kwargs
        )

    # Tell hyper-volume information to the optimizer
    optimizer.tell(x, volume)

    # Return reference to both input and output values
    return x, value