Creates a penalized acquisition function using 'hammer' functions around the points collected in the batch

        .. Note:: the penalized acquisition is always mapped to the log space. This way gradients can be computed additively and are more stable.

def _penalized_acquisition(self, x,  model, X_batch, r_x0, s_x0):
        '''
        Creates a penalized acquisition function using 'hammer' functions around the points collected in the batch

        .. Note:: the penalized acquisition is always mapped to the log space. This way gradients can be computed additively and are more stable.
        '''
        fval = -self.acq.acquisition_function(x)[:,0]

        if self.transform=='softplus':
            fval_org = fval.copy()
            fval[fval_org>=40.] = np.log(fval_org[fval_org>=40.])
            fval[fval_org<40.] = np.log(np.log1p(np.exp(fval_org[fval_org<40.])))
        elif self.transform=='none':
            fval = np.log(fval+1e-50)

        fval = -fval
        if X_batch is not None:
            h_vals = self._hammer_function(x, X_batch, r_x0, s_x0)
            fval += -h_vals.sum(axis=-1)
        return fval