
    &Vfj                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d Zd Zd Zd	 Zd
 Zd Zd Zd Zd7dZd Zd Zd8dZd Zd9dZd:dZd:dZd Zd Z	 	 	 d;dZ	 	 	 d;dZd Z	 	 	 	 d<d!Z 	 	 	 	 d<d"Z!	 	 	 	 d<d#Z"	 	 	 	 	 d=d$Z#d>d'Z$d>d(Z%d) Z&d?d*Z'd?d+Z(d@d,Z)dAd-Z*d. Z+d/ Z,	 dBd1Z-	 dCd2Z.	 	 	 	 	 dDd5Z/d6 Z0dS )E    N)backend)#compute_conv_transpose_output_shape)cast)convert_to_tensorc                 @    t           j                            |           S N)tfnnreluxs    \/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/tensorflow/nn.pyr   r          5::a==    c                 @    t           j                            |           S r   )r	   r
   relu6r   s    r   r   r      s    5;;q>>r   c                 V    | }t           j                            |           }||_        |S r   )r	   r
   sigmoid_keras_logits)r   logitsoutputs      r   r   r      s'    FU]]1F!FMr   c                 @    t           j                            |           S r   )r	   r
   tanhr   s    r   r   r      r   r   c                 @    t           j                            |           S r   )r	   mathsoftplusr   s    r   r   r   !   s    7Ar   c                 @    t           j                            |           S r   )r	   r
   softsignr   s    r   r   r   %   s    5>>!r   c                 @    t           j                            |           S r   )r	   r
   silur   s    r   r    r    )   r   r   c                 @    t           j                            |           S r   )r	   r   log_sigmoidr   s    r   r"   r"   -   s    7q!!!r   皙?c                 D    t           j                            | |          S )N)alpha)r	   r
   
leaky_relu)r   negative_slopes     r   r&   r&   1   s    5A^444r   c                     t          |           } t          | t          j        d| j                  z             t          j        d| j                  z  S )Ng      @g      @)r   r   r	   constantdtyper   s    r   hard_sigmoidr+   5   sC    !AR[ag...//"+c172K2KKKr   c                 &    | t          |           z  S r   )r+   r   s    r   	hard_silur-   :   s    |Ar         ?c                     t           j                            |           }|dk    r|S t          j        | dk    |||z            S )N   r   )r	   r
   eluwhere)r   r%   ress      r   r1   r1   >   s=    
%))A,,Czz
xAsECK000r   c                 @    t           j                            |           S r   )r	   r
   selur   s    r   r5   r5   F   r   r   Tc                 b    t          |           } t          j                            | |          S )N)approximate)r   r	   r
   gelu)r   r7   s     r   r8   r8   J   s'    !A5::a[:111r   c                    | }|_t          j        | dg          }t           j                            |d          }t          j        |t          j        |                     }n!t           j                            | |          }||_        |S Nr9   axis)r	   reshaper
   softmaxshaper   )r   r=   r   r   s       r   r?   r?   O   sw    F| At$$vB//FBHQKK00qt,,!FMr   c                    |^t          j        | dg          }t           j                            |d          }t          j        |t          j        |                     S t           j                            | |          S r;   )r	   r>   r
   log_softmaxr@   )r   r=   r   s      r   rB   rB   ]   sk    | At$$""6"33z&"(1++...5QT***r   c                    t          | j                  dz
  }|dk    rt          j        | d          } nP|dk    rt          j        | d          } n4|dk    rt          j        | d          } nt	          d| j         d          | S )	N   r0   r   rD   r0   )r   rD      r0   rF   )r   rD   rF      r0   zePooling inputs's shape must be 3, 4 or 5, corresponding to 1D, 2D and 3D inputs. But received shape: .)lenr@   r	   	transpose
ValueError)inputsnum_spatial_dimss     r   _transpose_spatial_inputsrN   g   s    6<((1, 1fi00	Q		fl33	Q		fo66B28,B B B
 
 	
 Mr   c                     t          | j                  dz
  }|dk    rt          j        | d          } n7|dk    rt          j        | d          } n|dk    rt          j        | d          } | S )NrD   r0   rE   )r   rF   r0   rD   rF   )r   rG   r0   rD   rF   )rI   r@   r	   rJ   )outputsrM   s     r   _transpose_spatial_outputsrQ   y   st    7=))A-1,w	22	Q		,w55	Q		,w88Nr   validc                 @   t          j        |          }||n|}|                                }t          dt	          | j                            }|dk    rt          |           } t          j        	                    | ||||          }|dk    rt          |          }|S Nchannels_lastchannels_first)r   standardize_data_formatupper_convert_data_formatrI   r@   rN   r	   r
   max_poolrQ   rL   	pool_sizestridespaddingdata_formattf_data_formatrP   s          r   rZ   rZ           1+>>K"?iiGmmooG)/3v|;L;LMMN&&& +622enn G &&&,W55Nr   c                 @   t          j        |          }||n|}|                                }t          dt	          | j                            }|dk    rt          |           } t          j        	                    | ||||          }|dk    rt          |          }|S rT   )r   rW   rX   rY   rI   r@   rN   r	   r
   avg_poolrQ   r[   s          r   average_poolrd      ra   r   c                     | dk    r+|dk    rdS |dk    rdS |dk    rdS t          d| d	          | d
k    r+|dk    rdS |dk    rdS |dk    rdS t          d| d	          t          d|  d          )NrU   rF   NWCrG   NHWC   NDHWCzInput rank not supported: z. Expected values are [3, 4, 5]rV   NCWNCHWNCDHWzInvalid data_format: z9. Expected values are ["channels_first", "channels_last"])rK   )r_   ndims     r   rY   rY      s    o%%1995QYY6QYY70T 0 0 0   
(	(	(1995QYY6QYY70T 0 0 0  
 FK F F F
 
 	
r   r0   c                      fdt          j        d          fd            }t          j                  dk    r j        d         }n j        d         }|j        d         k    r
 |            S              S )	Nc                      t          t          j                            } t          j                                                            |           S )Nr_   	dilations)rY   rI   r@   r	   r
   convolutionrX   )r`   r_   dilation_raterL   kernelr^   r]   s    r   _convzconv.<locals>._conv   sU    -k3v|;L;LMMu  MMOO&# ! 
 
 	
r   T)jit_compilec                                    S r    )ru   s   r   	_conv_xlazconv.<locals>._conv_xla   s    uwwr   rU   r9   r0   )r	   functionr   rW   r@   )	rL   rt   r]   r^   r_   rs   ry   channelsru   s	   ``````  @r   convr}      s    	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 [T"""    #" 1+>>Ko%%<#<?6<### y{{577Nr   c                    t          j        |          }t          | j                  dz
  }|dk    rt	          d          t          |d          }|                                }t          |t                    r|f|z  }t          |t                    r|f|z  }|dk    r|dk    rd|dz  z   dz   }d}n
d|dz  z   }d}t          j
        | |          } t          j
        |d	          }|d nd|z   }t          j                            | |||||
          }	t          j        |	|g          S |dk    rd|z   dz   }d}nd|z   }d}t          j                            | |||||
          S )NrD   zJ`inputs` rank must be 3 (1D conv) or 4 (2D conv). Received: {inputs.ndim}.rG   r0   rU   r0   r0   r0   r   r<   rp   )r   rW   rI   r@   rK   rY   rX   
isinstanceintr	   expand_dimsr
   depthwise_conv2dsqueeze)
rL   rt   r]   r^   r_   rs   rM   r`   spatial_start_dimrP   s
             r   depthwise_convr     s    1+>>K6<((1,!
 
 	
 *+q99NmmooG'3 0*//-%% <&(+;;1/))Wq[(4/G !w{*G !(9::Q/// - 54-;O%((&# ) 
 
 z'$5#6777o%%.4'7"5!!" "   r   c           	         t          j        |          }t          | j                  dz
  }|dk    rt	          d| d          t          |d          }|                                }t          |t                    r|f|z  }t          |t                    r|f|z  }|dk    r|dk    rd|dz  z   dz   }d}	n
d|dz  z   }d}	t          j
        | |	          } t          j
        |d	
          }t          j
        |d	
          }|d nd|z   }t          j                            | ||||||          }
t          j        |
|	g          S |dk    r	d|z   dz   }nd|z   }t          j                            | ||||||          S )NrD   z>`num_spatial_dims` must be 1 or 2. Received: num_spatial_dims=rH   rG   r0   rU   r   r   r   r<   rp   )r   rW   rI   r@   rK   rY   rX   r   r   r	   r   r
   separable_conv2dr   )rL   depthwise_kernelpointwise_kernelr]   r^   r_   rs   rM   r`   r   rP   s              r   separable_convr   @  s    1+>>K6<((1,!4 04 4 4
 
 	
 *+q99NmmooG'3 0*//-%% <&(+;;1/))Wq[(4/G !w{*G !(9::>*:CCC>*:CCC - 54-;O%((&# ) 
 
 z'$5#6777o%%.4'7"5!!" "   r   c           
         t          j        |          }t          |t          | j                            }|j        d d         }|j        d         }	t          | j                  }
t          j        |           }t          |
          D ]\  }}|||         |
|<   t          |
||	|||||          }t          j	        
                    | ||||                                ||          S )Nrz   )r^   r_   rq   )r   rW   rY   rI   r@   listr	   	enumerater   r
   conv_transposerX   )rL   rt   r]   r^   output_paddingr_   rs   r`   kernel_sizefiltersinput_shapesymbolic_shapeieoutput_shapes                  r   r   r     s     1+>>K)+s6<7H7HIIN,ss#Kl2Gv|$$KXf%%N+&& / /19+A.KN6	 	L 5"     r   float32Fc                    t          | d          } |d}|r3|dk     r|t          | j                  z   dz   }t          j        | j                  t          j        | f          }t          j        t          j        |d          |          }d | j        D             }t          j	        |ddi}|
                    |t          j        | d                     fd	|D             }d
 |D             }t          j        |d          }t          | j                  }|
                    ||           t          j        |||          S t          j        | |||          S )Nint64r*   r   r   r0   c                 6    g | ]}t          j        |          S rx   )r	   range).0dims     r   
<listcomp>zone_hot.<locals>.<listcomp>  s     444S28C==444r   indexingijc                 >    g | ]}t          j        |d f          S r   )r	   r>   )r   avalues_counts     r   r   zone_hot.<locals>.<listcomp>  s*    EEE2:a,!233EEEr   c                 L    g | ]!}t          j        |t           j                  "S rx   )r	   r   r   )r   r   s     r   r   zone_hot.<locals>.<listcomp>  s&    999A271bh''999r   r<   )r=   r*   )r   rI   r@   r   prodr	   r>   r   greater_equalmeshgridinsertmaximumconcatr   SparseTensorone_hot)	r   num_classesr=   r*   sparsevaluesindicesr@   r   s	           @r   r   r     sg   !7+++A} 7 !88#ag,,&*Dy))A// )&!44EBBB44AG444+w666tRZ1--...EEEEWEEE99999)G!,,,QWT;'''w666:a4u====r   c                    t          |           } t          | j                  dk    rdnd}t          t	          | d          ||||          }|r"t
          j                            ||d          S t          j        ||          S )Nr0   r   int32)r=   r*   r   T)r=   output_is_sparser<   )r   rI   r@   r   r   r	   r   
reduce_max)r   r   r=   r*   r   reduction_axisone_hot_outputss          r   	multi_hotr     s    !Aag,,**QQNQ+Df  O  
y##.4 $ 
 
 	
 =~>>>>r   c                    | }|}t          | d          }|r	| j        }d}t          | d          o;t          | t          j        j        t          j        f           o| j        j        |k    o| }|r3t          | j        j
                  dk    sJ | j        j
        d         }d}|r!|s|rt          j        d| d| dd	
           ||fS )zCRetrieves logits tensor from maybe-softmax or maybe-sigmoid tensor.r   Topr0   r   z"`zK` received `from_logits=True`, but the `output` argument was produced by a zB activation and thus does not represent logits. Was this intended?rD   )
stacklevel)hasattrr   r   r	   __internal__EagerTensorVariabler   typerI   rL   warningswarn)r   from_logitsop_typefn_nameoutput_from_logits_has_keras_logitsfrom_expected_op_types           r   _get_logitsr     s(   GLv77 & 	 	&6BO$?#MNNN	&INg% 
	    69#$$)))))"1% 
( 
,A 
! ! !7>! ! ! 	
 	
 	
 	
 L  r   c                 l   t          j        |           } t          j        |          }t          | j                  dk     rt	          d| j         d|j                   t          | j                  t          |j                  k    rt	          d| j         d|j                   t          | j        |j                  D ].\  }}|'|%||k    rt	          d| j         d|j                   /t          ||dd          \  }}|r"t           j                            | ||	          S |t          j	        ||d
          z  }t          j
        |t          j                    dt          j                    z
            }t          j	        | t           j                            |          z  |           S )a  Categorical crossentropy between an output tensor and a target tensor.

    Args:
        target: A tensor of the same shape as `output`.
        output: A tensor resulting from a softmax
            (unless `from_logits` is `True`, in which
            case `output` is expected to be the logits).
        from_logits: Boolean, whether `output` is the
            result of a softmax, or is a tensor of logits.
        axis: Int specifying the channels axis. `axis=-1` corresponds to data
            format `channels_last`, and `axis=1` corresponds to data format
            `channels_first`.

    Returns:
        Output tensor.

    Example:

    >>> a = tf.constant([1., 0., 0., 0., 1., 0., 0., 0., 1.], shape=[3,3])
    >>> print(a)
    tf.Tensor(
      [[1. 0. 0.]
       [0. 1. 0.]
       [0. 0. 1.]], shape=(3, 3), dtype=float32)
    >>> b = tf.constant([.9, .05, .05, .05, .89, .06, .05, .01, .94],
    ...                 shape=[3, 3])
    >>> print(b)
    tf.Tensor(
      [[0.9  0.05 0.05]
       [0.05 0.89 0.06]
       [0.05 0.01 0.94]], shape=(3, 3), dtype=float32)
    >>> loss = categorical_crossentropy(a, b)
    >>> print(np.around(loss, 5))
    [0.10536 0.11653 0.06188]
    >>> loss = categorical_crossentropy(a, a)
    >>> print(np.around(loss, 5))
    [0. 0. 0.]
    r0   zPArguments `target` and `output` must be at least rank 1. Received: target.shape=, output.shape=WArguments `target` and `output` must have the same rank (ndim). Received: target.shape=NQArguments `target` and `output` must have the same shape. Received: target.shape=Softmaxcategorical_crossentropy)labelsr   r=   Tkeepdimsr.   )r	   r   rI   r@   rK   zipr   r
   !softmax_cross_entropy_with_logits
reduce_sumclip_by_valuer   epsilonr   log)targetr   r   r=   e1e2s         r   r   r     s   N !&))F!&))F
6<1H"LH H9?H H
 
 	

 6<C----H"LH H9?H H
 
 	

 flFL11  B>bnrL &L L=C\L L   &Y(B FK  
u66&t 7 
 
 	
 bmFD4@@@@F !!3):):#: F M&27;;v#6#66====r   c                 P   |dk    r-|t          |j                  dz
  k    rt          d|           t          ||dd          \  }}t	          j        |           } t	          j        | d          } t	          j        |          }t          | j                  t          |j                  k    r'| j        d         dk    rt	          j        | d          } t          |j                  dk     rt          d	|j                   t          | j                  t          |j        d
d                   k    rt          d| j         d|j                   t          | j        |j        d
d                   D ].\  }}|'|%||k    rt          d| j         d|j                   /|sZt	          j	        |t          j                    dt          j                    z
            }t          j                            |          }t          j                            | |          }|S )aN  Categorical crossentropy with integer targets.

    Args:
        target: An integer tensor.
        output: A tensor resulting from a softmax
            (unless `from_logits` is True, in which
            case `output` is expected to be the logits).
        from_logits: Boolean, whether `output` is the
            result of a softmax, or is a tensor of logits.
        axis: Int specifying the channels axis. `axis=-1` corresponds to data
            format `channels_last`, and `axis=1` corresponds to data format
            `channels_first`.

    Returns:
        Output tensor.
    r9   r0   z4Only axis=-1 is currently supported. Received: axis=r   sparse_categorical_crossentropyr   r   r<   zBArgument `output` must be at least rank 1. Received: output.shape=NzRArgument `output` must have rank (ndim) `target.ndim - 1`. Received: target.shape=r   zcArguments `target` and `output` must have the same shape up until the last dimension: target.shape=r   r   )rI   r@   rK   r   r	   r   r   r   r   r   r   r   r   r   r
   (sparse_softmax_cross_entropy_with_logits)r   r   r   r=   r   r   results          r   r   r   E  si   " rzzdc&,//!333I4II
 
 	
 &Y(I FK !&))FWV7+++F!&))F
6<C----&,r2Ba2G2GF,,,
6<1+"L+ +
 
 	

 6<CSbS 12222H"LH H9?H H
 
 	

 flFL"$566  B>bnrL &L L=C\L L    %!GO%%q7?+<+<'<
 
 V$$U;;f <  F Mr   c                    t          j        |           } t          j        |          }t          | j                  t          |j                  k    rt	          d| j         d|j                   t          | j        |j                  D ].\  }}|'|%||k    rt	          d| j         d|j                   /t          ||dd          \  }}|r!t           j                            | |          S t          j	        |t          j                    dt          j                    z
            }| t           j                            |          z  }|d	| z
  t           j                            d	|z
            z  z  }| S )
ap  Binary crossentropy between an output tensor and a target tensor.

    Args:
        target: A tensor with the same shape as `output`.
        output: A tensor.
        from_logits: Whether `output` is expected to be a logits tensor.
            By default, we consider that `output`
            encodes a probability distribution.

    Returns:
        A tensor.
    r   r   Nr   Sigmoidbinary_crossentropyr   r.   r0   )r	   r   rI   r@   rK   r   r   r
   !sigmoid_cross_entropy_with_logitsr   r   r   r   r   )r   r   r   r   r   bces         r   r   r     s    !&))F!&))F
6<C----H"LH H9?H H
 
 	

 flFL11  B>bnrL &L L=C\L L   &Y(= FK  
u66& 7 
 
 	

 !!3):):#: F 27;;v&&
&CAJ"'++a&j1111C4Kr   c                    d}t          j        | j                  }|dv rd}t          | d          } |rt	          | ||          \  }}nt          | ||          \  }}|rt          j        |t          j        j	        t          j        j
                  }t          j        |t          j        j	        t          j        j
                  }t          ||          }t          ||          }||fS )NF)float16bfloat16Tr   )r   standardize_dtyper*   r   _compute_moments_sync_compute_momentsr	   r   r   minmax)r   axesr   synchronized	need_cast	ori_dtypemeanvariances           r   momentsr     s     I)!'22I+++	I =.q$AAhh)!T8<<h -bjnbjnEE#HbjnbjnMMD)$$),,>r   c                 n   t           j                                        }|st          | ||          S t          j        | d          }t          j        | |d          }t          j        t          j        |           |d          }t          j        ||d          }|                    t           j        j        j	        |          }|                    t           j        j        j	        |          }|                    t           j        j        j	        |          }	t           j
                            ||	          }
t           j
                            ||	          }t          j        |t          j        |
          z
  d          }|s*t          j        |
|          }
t          j        ||          }|
|fS )Ncount)nameT)r=   r   g        )r	   
distributeget_replica_contextr   	ones_liker   square
all_reduceReduceOpSUMr   divide_no_nanr   r   )r   r   r   replica_ctxlocal_count	local_sumlocal_squared_sumy_sumy_squared_sum	count_sumr   y_squared_meanr   s                r   r   r     so   -3355K 34222,qw///KadT:::IbillMMM-$FFFK ""2=#9#=yIIE**
"$5 M &&r}'='A;OOI7  	22DW**=)DDNz.29T??:C@@H .z$%%:h-->r   c                 F    t           j                            | ||          S )Nr   )r	   r
   r   )r   r   r   s      r   r   r     s    5==D8=444r   MbP?c                 X   |dk    rdgt          | j                  z  }|j        d         ||<   t          j        ||          }t          j        ||          }|t          j        ||          }|t          j        ||          }t          j                            | |||||          S )Nr9   r0   r   )r   r   r   offsetscalevariance_epsilon)rI   r@   r	   r>   r
   batch_normalization)r   r   r   r=   r  r  r   r@   s           r   r  r    s     rzzc!'ll"jmdz$&&:h..Z..FJue,,E5$$
  %   r   c                 P   t          |           } t          |          }t          j        | d          } t          j        |j        d          }|dk    rdn|}t          j        ||          }t          j                            | ||||d          }t          j        ||          S )Nr   r   r   float64F)r   r   label_lengthlogit_lengthblank_indexlogits_time_major)r   r	   r   r   result_typer*   r
   ctc_loss)r   r   target_lengthoutput_length
mask_indexresult_dtypecompute_dtypelosss           r   r  r    s     v&&Fv&&FWV7+++F &v|Y??L!-!:!:IIMWV]++F5>>""   D 74&&&r   greedyd   c                    t          |           } t          j        |           }|d         |d         }	}t          j        | d          } t	          j        | j        d          }
t          j        | |
          } t          |d          }|dk    r't          j        	                    | |||          \  }}n@|d	k    r't          j        
                    | |||
          \  }}nt          d| d          g }|D ]X}t          j        |j        |j        ||	f          }|                    t          j                            |d                     Yt          j        |d          }t          j        |d          }||fS )Nr   r0   )r0   r   rD   r   r   r   r   )rL   sequence_lengthmerge_repeatedr  beam_search)rL   r#  
beam_width	top_pathszInvalid strategy z2. Supported values are 'greedy' and 'beam_search'.r9   )sp_inputdefault_valuer<   )r   r	   r@   rJ   r   r  r*   r   r
   ctc_greedy_decoderctc_beam_search_decoderrK   r   r   r   appendr   to_densestack)rL   r#  strategyr&  r'  r$  r  r   num_samples	num_stepsr*   decodedscoresdecoded_densests                  r   
ctc_decoder6  #  s    v&&F(6""K(^[^K\&),,Fi88EWVU##F'wGGGO8E44+)"	 5 
 
&& 
]	"	"E99+!	 : 
 
&& * * * *
 
 	
 M P P_RZ[)4LMMRY//2/NNOOOOH]333MGM733M&  r   c                 *   ddl m} | j        |j        k    r t          d| j         d|j         d          t	          ||j                  }t          j        t          j        | |z
                      }d ||          z  d ||          z  z
  }|S )	Nr   )log10zInput shapes z and z" must match for PSNR calculation. r      
   )	"keras.src.backend.tensorflow.numpyr8  r@   rK   r   r*   r	   reduce_meanr   )x1x2max_valr8  msepsnrs         r   rA  rA  S  s    888888	x28+BH + +28 + + +
 
 	

  rx888G
.27++
,
,CgeeCjj0DKr   )r#   )r.   )T)r9   )NrR   N)r0   rR   Nr0   )r0   rR   NNr0   )r9   r   F)Fr9   )F)FF)NNr  )r   )r   r!  r0   TN)1r   r   
tensorflowr	   	keras.srcr   &keras.src.backend.common.backend_utilsr   !keras.src.backend.tensorflow.corer   r   r   r   r   r   r   r   r    r"   r&   r+   r-   r1   r5   r8   r?   rB   rN   rQ   rZ   rd   rY   r}   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r6  rA  rx   r   r   <module>rF     s                    3 2 2 2 2 2 ? ? ? ? ? ?              " " "5 5 5 5L L L
  1 1 1 1  2 2 2 2
   + + + +  $	 	 	    >    8
 
 
F " " " "P ; ; ; ;D < < < <D % % % %P> > > >4? ? ? ? !  !  !FP> P> P> P>f< < < <~- - - -`   .  @5 5 5
 ?C   8 ' ' ' '@ -! -! -! -!`    r   