Ë
    þÍ:jÏ  ã                   óˆ   — d dl mZ d dlZd dlmZ d dlmZ 	 ddedededeeef   fd	„Z	d
edeeef   defd„Z
dededefd„Zy)é    )ÚUnionN)ÚTensor)Ú_check_same_shapeÚpredsÚtargetÚepsilonÚreturnc                 óö   — t        | |«       t        j                  | |z
  «      }|t        j                  t        j                  |«      |¬«      z  }t        j                  |«      }|j                  «       }||fS )ac  Update and returns variables required to compute Mean Percentage Error.

    Check for same shape of input tensors.

    Args:
        preds: Predicted tensor
        target: Ground truth tensor
        epsilon: Specifies the lower bound for target values. Any target value below epsilon
            is set to epsilon (avoids ``ZeroDivisionError``).

    )Úmin)r   ÚtorchÚabsÚclampÚsumÚnumel)r   r   r   Úabs_diffÚabs_per_errorÚsum_abs_per_errorÚnum_obss          ú|/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torchmetrics/functional/regression/mape.pyÚ&_mean_absolute_percentage_error_updater      sc   € ô  �e˜VÔ$ä�y‰y˜ ™Ó(€HØœuŸ{™{¬5¯9©9°VÓ+<À'ÔJÑJ€MäŸ	™	 -Ó0Ðà�l‰l‹n€Gà˜gÐ%Ð%ó    r   r   c                 ó   — | |z  S )aF  Compute Mean Absolute Percentage Error.

    Args:
        sum_abs_per_error: Sum of absolute value of percentage errors over all observations
            ``(percentage error = (target - prediction) / target)``
        num_obs: Number of predictions or observations

    Example:
        >>> target = torch.tensor([1, 10, 1e6])
        >>> preds = torch.tensor([0.9, 15, 1.2e6])
        >>> sum_abs_per_error, num_obs = _mean_absolute_percentage_error_update(preds, target)
        >>> _mean_absolute_percentage_error_compute(sum_abs_per_error, num_obs)
        tensor(0.2667)

    © )r   r   s     r   Ú'_mean_absolute_percentage_error_computer   2   s   € ð  ˜wÑ&Ð&r   c                 ó8   — t        | |«      \  }}t        ||«      S )a  Compute mean absolute percentage error.

    Args:
        preds: estimated labels
        target: ground truth labels

    Return:
        Tensor with MAPE

    Note:
        The epsilon value is taken from `scikit-learn's implementation of MAPE`_.

    Example:
        >>> from torchmetrics.functional.regression import mean_absolute_percentage_error
        >>> target = torch.tensor([1, 10, 1e6])
        >>> preds = torch.tensor([0.9, 15, 1.2e6])
        >>> mean_absolute_percentage_error(preds, target)
        tensor(0.2667)

    )r   r   )r   r   r   r   s       r   Úmean_absolute_percentage_errorr   E   s%   € ô* "HÈÈvÓ!VÑÐ�wÜ2Ð3DÀgÓNÐNr   )g-`Àš¡³>)Útypingr   r   r   Útorchmetrics.utilities.checksr   ÚfloatÚtupleÚintr   r   r   r   r   r   ú<module>r"      s�   ðõ ã Ý å ;ð ñ&Øð&àð&ð ð&ð ˆ6�3ˆ;Ñó	&ð8'¸vð 'ÐPUÐVYÐ[aÐVaÑPbð 'Ðgmó 'ð&O¨&ð O¸&ð OÀVô Or   