def METHOD_NAME(self, inputs, gc, dc):
    N, D, data, lambda1, lambda2 = inputs
    data = np.array(data, dtype=np.float32).reshape(N, D)
    lambda1 = np.array(lambda1, dtype=np.float32)
    lambda2 = np.array(lambda2, dtype=np.float32)
    # Bound data away from one. See comment in _inputs() above.
    base = data + lambda2
    data[(base > 1 - TOLERANCE) & (base < 1 + TOLERANCE)] += 2 * TOLERANCE
    def ref(data, lambda1, lambda2):
        dim_1 = data.shape[1]
        output = np.copy(data)
        if data.size <= 0:
            return [output]
        for i in range(dim_1):
            output[:, i] = data[:, i] + lambda2[i]
            output[:, i] = np.maximum(output[:, i], 1e-6)
            if lambda1[i] == 0:
                output[:, i] = np.log(output[:, i])
            else:
                output[:, i] =\
                    (np.power(output[:, i], lambda1[i]) - 1) / lambda1[i]
        return [output]
    for naive in [False, True]:
        op = core.CreateOperator(
            'BatchBoxCox',
            ['data', 'lambda1', 'lambda2'],
            ['output'],
            naive=naive,
            # Note examples above with D=5, 6, 7.
            # A zero value falls back to the naive implementation.
            min_block_size=0 if naive else 6
        )
        self.assertReferenceChecks(gc, op, [data, lambda1, lambda2], ref)