o
    .wi                     @   s   d dl Z d dl mZ d dlmZmZ d dlmZ dedededed	ed
edeeeef fddZ	ded	ed
ededef
ddZ
ddedededefddZdS )    N)Tensor)_rmse_sw_compute_rmse_sw_update)_uniform_filterpredstargetwindow_sizermse_map
target_sumtotal_imagesreturnc                 C   sD   t | ||d||d\}}}|tjt|||d  dd7 }|||fS )a  Calculate the sum of RMSE map values for the batch of examples and update intermediate states.

    Args:
        preds: Deformed image
        target: Ground truth image
        window_size: Sliding window used for RMSE calculation
        rmse_map: Sum of RMSE map values over all examples
        target_sum: target...
        total_images: Total number of images

    Return:
        Intermediate state of RMSE map
        Updated total number of already processed images

    Nrmse_val_sumr	   r      r   )dim)r   torchsumr   )r   r   r   r	   r
   r   _ r   _/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/torchmetrics/functional/image/rase.py_rase_update   s
    
r   c                 C   sl   t d| |d\}} || }|d}d| tt| d d }t|d }t||| || f S )a  Compute RASE.

    Args:
        rmse_map: Sum of RMSE map values over all examples
        target_sum: target...
        total_images: Total number of images.
        window_size: Sliding window used for rmse calculation

    Return:
        Relative Average Spectral Error (RASE)

    Nr   r   d   r   )r   meanr   sqrtround)r	   r
   r   r   r   target_meanrase_map
crop_slider   r   r   _rase_compute0   s   
r      c                 C   s   t |trt |tr|dk rtd|jdd }tj||j|jd}tj||j|jd}tjd|jd}t	| |||||\}}}t
||||S )a  Compute Relative Average Spectral Error (RASE) (RelativeAverageSpectralError_).

    Args:
        preds: Deformed image
        target: Ground truth image
        window_size: Sliding window used for rmse calculation

    Return:
        Relative Average Spectral Error (RASE)

    Example:
        >>> from torch import rand
        >>> from torchmetrics.functional.image import relative_average_spectral_error
        >>> preds = rand(4, 3, 16, 16)
        >>> target = rand(4, 3, 16, 16)
        >>> relative_average_spectral_error(preds, target)
        tensor(5326.40...)

    Raises:
        ValueError: If ``window_size`` is not a positive integer.

       z<Argument `window_size` is expected to be a positive integer.N)dtypedeviceg        )r"   )
isinstanceint
ValueErrorshaper   zerosr!   r"   tensorr   r   )r   r   r   	img_shaper	   r
   r   r   r   r   relative_average_spectral_errorF   s   r*   )r   )r   r   %torchmetrics.functional.image.rmse_swr   r   #torchmetrics.functional.image.utilsr   r$   tupler   r   r*   r   r   r   r   <module>   s*   
 