<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def psnr(data, ground_truth, use_zscore=False, force_lower_is_better=False):
 """Return the Peak Signal-to-Noise Ratio of ``data`` wrt ``ground_truth``. See also `this Wikipedia article <https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio>`_. Parameters data : `Tensor` or `array-like` Input data to compare to the ground truth. If not a `Tensor`, an unweighted tensor space will be assumed. ground_truth : `array-like` Reference to which ``data`` should be compared. use_zscore : bool If ``True``, normalize ``data`` and ``ground_truth`` to have zero mean and unit variance before comparison. force_lower_is_better : bool If ``True``, then lower value indicates better fit. In this case the output is negated. Returns ------- psnr : float FOM value, where a higher value means a better match. Examples -------- Compute the PSNR for two vectors: 13.010 If data == ground_truth, the result is positive infinity: inf With ``use_zscore=True``, scaling differences and constant offsets are ignored: True """

    if use_zscore:
        data = odl.util.zscore(data)
        ground_truth = odl.util.zscore(ground_truth)

    mse = mean_squared_error(data, ground_truth)
    max_true = np.max(np.abs(ground_truth))

    if mse == 0:
        result = np.inf
    elif max_true == 0:
        result = -np.inf
    else:
        result = 20 * np.log10(max_true) - 10 * np.log10(mse)

    if force_lower_is_better:
        return -result
    else:
        return result