<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def truncated_normal_ll_gradient(params, low, high, data):
 """Return the gradient of the log likelihood of the truncated normal at the given position. Args: params: tuple with (mean, std), the parameters under which we evaluate the model low (float):
 the lower truncation bound high (float):
 the upper truncation bound data (ndarray):
 the one dimension list of data points for which we want to calculate the likelihood Returns: tuple: the gradient of the log likelihood given as a tuple with (mean, std) """

        if params[1] == 0:
            return np.array([np.inf, np.inf])

        return np.array([_TruncatedNormalFitter.partial_derivative_mu(params[0], params[1], low, high, data),
                         _TruncatedNormalFitter.partial_derivative_sigma(params[0], params[1], low, high, data)])