
    &Vf}                         d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlm	Z	  eddg           G d	 d
e                      Z
d ZddZddZ	 	 	 	 ddZd ZdS )    )backend)ops)tree)keras_export)KerasSaveable)	auto_namez
keras.Losszkeras.losses.Lossc                   J    e Zd ZdZd
dZddZd Zd Zed             Z	d	 Z
dS )Lossa_  Loss base class.

    To be implemented by subclasses:

    * `call()`: Contains the logic for loss calculation using `y_true`,
        `y_pred`.

    Example subclass implementation:

    ```python
    class MeanSquaredError(Loss):
        def call(self, y_true, y_pred):
            return ops.mean(ops.square(y_pred - y_true), axis=-1)
    ```
    Nsum_over_batch_sizec                     |pt          | j        j                  | _        t	          |          | _        |pt          j                    | _        d S N)	r   	__class____name__namestandardize_reduction	reductionr   floatxdtype)selfr   r   r   s       R/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/losses/loss.py__init__zLoss.__init__   sB    >Idn&=>>	.y99.gn..


    c                     t          |dd           }t          j         j                  5  t	          j         fd|          }t	          j         fd|          }                     ||          }t          |dd           }||||z  }n||}n||}nd }t          ||| j         j	                  cd d d            S # 1 swxY w Y   d S )N_keras_maskc                 :    t          j        | j                  S Nr   r   convert_to_tensorr   xr   s    r   <lambda>zLoss.__call__.<locals>.<lambda>%       #/DDD r   c                 :    t          j        | j                  S r   r   r    s    r   r"   zLoss.__call__.<locals>.<lambda>(   r#   r   )sample_weightmaskr   r   )
getattrr   
name_scoper   r   map_structurecallreduce_weighted_valuesr   r   )r   y_truey_predr%   in_masklossesout_maskr&   s   `       r   __call__zLoss.__call__    sM   &-66^DI&& 	 	'DDDDf F 'DDDDf F YYvv..Fv}d;;H"x';)$%)+.j  )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   BCCCc                     t           r   )NotImplementedError)r   r,   r-   s      r   r*   z	Loss.call?   s    !!r   c                      | j         | j        dS )Nr   r   r5   r   s    r   
get_configzLoss.get_configB   s    	???r   c                      | di |S )N r9   )clsconfigs     r   from_configzLoss.from_configE   s    s}}V}}r   c                     dS )Nr
   r9   r6   s    r   	_obj_typezLoss._obj_typeI   s    vr   )Nr   Nr   )r   
__module____qualname____doc__r   r1   r*   r7   classmethodr<   r>   r9   r   r   r
   r
   	   s          / / / /
   >" " "@ @ @   [    r   r
   c                 @    h d}| |vrt          d| d|            | S )N>   Nsumnoner   z8Invalid value for argument `reduction`. Expected one of z. Received: reduction=)
ValueError)r   alloweds     r   r   r   M   sQ    :::G%&% %"% %
 
 	

 r   Tc                    t          | j                  }t          |j                  }||k    r| |fS ||dz   k    rF| j        d         dk    r5|dk    r|rt          j        |d          }nt          j        | d          } ||dz   k    rF|j        d         dk    r5|dk    r|rt          j        | d          } nt          j        |d          }| |fS )zCSqueeze/expand last dim if ranks differ from expected by exactly 1.   )axis)lenshaper   expand_dimssqueeze)x1x2expand_rank_1x1_rankx2_ranks        r   squeeze_or_expand_to_same_rankrU   X   s    "(mmG"(mmG'2v'A+8B<1!|||_Rb111["---'A+8B<1!|||_Rb111["---r6Mr   r   c           
      X   |6|dk    s0t          | j                  dk    st          | j                  dk    r| S t          j        |           }|dk    rU|t          j        t          j        t          j        t          j        |           d                    |j                  z  }|S )NrE   r9   )r   r   int32r   )tuplerM   r   rD   castprodr   r   )valuesr   losss      r   reduce_valuesr]   m   s    "$$$&&76??D)))HS*39V+<+<GLLLMMJ
 
 	
 Kr   Nc                 h   t          |          }t          j        | |          } |t          j        ||          }|t          j        ||          }t          ||| j        |          }|2t          j        || j                  }t          | |          \  } }| |z  } t          | |          }|S )Nr   )r   r   )r   r   r   
apply_maskr   rY   rU   r]   )r[   r%   r&   r   r   r\   s         r   r+   r+   ~   s     &i00I"6777F -m5III$T777 t6<9  M  == >M!
 !
 -' ++DKr   c           	         |t          j        ||          }|dk    r}t          j        t          j        t          j        t          j        |          d                    |          }t          j        |          }|||t          j                    z   z  z  }| /t          j        | |          } t          ||           \  }} | |z  } n|} | S )z2Applies any mask on predictions to sample weights.Nr   r   rW   )	r   rY   rZ   r   rM   rD   r   epsilonrU   )r%   r&   r   r   totalvalids         r   r_   r_      s    xE***--- H.sygNNNOO E GDMMEEUW_%6%6677D$H]%@@@M"@m# #D- T!MM Mr   )T)r   )NNr   N)	keras.srcr   r   r   keras.src.api_exportr   keras.src.saving.keras_saveabler   keras.src.utils.namingr   r
   r   rU   r]   r+   r_   r9   r   r   <module>rh      s4                     - - - - - - 9 9 9 9 9 9 , , , , , , |0122@ @ @ @ @= @ @ 32@F     *   & 	#
   B    r   