o
    2h                    @   s
  d Z ddlZddlZddlmZ ddlmZ ddlm	Z
 eZeZeddd Zed	dddZeddddZeddddZeddddZeddddZeddddZedd d! Zed"d#d$ Zed%d&d' Zed(dd*d+Zed,dd-d.Zed/dd0d1Zed2	
	3	4	
dd5d6Zed7d8d9 Zed:d;d< Zed=dd>d?Zed@	3	4	
	ddAdBZedCdDdE ZedFddGdHZ edIddJdKZ!dLdM Z"ddNdOZ#dPdQ Z$dRdS Z%edT	ddVdWZ&edX	Y	U		YddZd[Z'ed\	Y	U		Ydd]d^Z(ed_	`	U		`ddadbZ)edcddde Z*edfdgdh Z+edidjdk Z,edldmdn Z-edoddrdsZ.edtddudvZ/edwddxdyZ0edz	Y	U		Ydd{d|Z1ed}d~d Z2eddddZ3eddd Z4eddddZ5eddd Z6eddd Z7eddd Z8eddddZ9eddddZ:eddd Z;eddddZ<eddddZ=eddd Z>eddd Z?eddd Z@eddd ZAeddd ZBeddd ZCeddd ZDeddd ZEeddd ZFeddddZGeddd ZHedÃddń ZIedƃddȄ ZJedɃddd˄ZKed̃ddd΄ZLedσddф ZMed҃dddԄZNedՃdddׄZOed؃ddڄ ZPedۃdd݄ ZQedރdd ZReddd ZSeddd ZTeddd ZUeddddZVeddddZWeddd ZXed	Y	U		ΐdddZYed	`	U		ΐdddZZeddd Z[eddddZ\eddddZ]eddddZ^ed	dddZ_ed	dd
dZ`eddddZaeddd ZbeddddZceddd Zdeddd Zeed	dddZfedd d! Zged"d#d$ Zhed%	
			
		
	
	pdd&d'Zied(d)d* Zjed+	Y	U		Ydd,d-Zked.d/d0 Zled1d2d3 Zmed4d5d6 Zned7d8d9 Zoed:d;d< Zped=dd>d?Zqed@dAdB ZredCdDdE ZsedF	ddGdHZtedIddKdLZuedMddOdPZvedQdRdS ZwedTdUdV ZxedWdXdY ZyedZdd[d\Zzed]dd^d_Z{ed`dadb Z|edcddddeZ}edfdgdh Z~edidjdk ZedlddmdnZedodpdq Zedrdsdt Zedudvdw ZedxddydzZed{d|d} Zed~dd Zeddd ZeddddZeddddZeddddZeddddZdS (  z#Legacy Keras 1/2 backend functions.    N)backend)keras_export)
tensorflowzkeras._legacy.backend.absc                 C   
   t | S DEPRECATED.)tfabsx r   S/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/legacy/backend.pyr	         
r	   zkeras._legacy.backend.allFc                 C      t | t j} t | ||S r   )r   castbool
reduce_allr   axiskeepdimsr   r   r   all      r   zkeras._legacy.backend.anyc                 C   r   r   )r   r   r   
reduce_anyr   r   r   r   any   r   r   zkeras._legacy.backend.argmaxc                 C      t | |S r   )r   argmaxr   r   r   r   r   r   #      r   zkeras._legacy.backend.argminc                 C   r   r   )r   argminr   r   r   r   r   )   r   r   zkeras._legacy.backend.arange   int32c                 C   s>   |du r
| dk r
d} t j| ||dd}|dkrt ||}|S )r   Nr   arange)limitdeltanamer!   )r   ranger   )startstopstepdtyperesultr   r   r   r"   /   s   r"   zkeras._legacy.backend.batch_dotc                 C   s  | j }|j }t|}t|}|dk s|dk r&tdt| d t| d |d }|d }|durJ|durJ||krJtdt| d t| d t|trS||g}|du rl|dkrd|d |d g}n|d |d g}td	d
 |D r}tdt| t|}|d dk r|d  |7  < |d dk r|d  |7  < d|v rtd|\}	}
||	 }||
 }|dur|dur||krtdt| d t| d t| d|d |d ||f  |}|}|dkrt	| d} |	d7 }	|d7 }|dkrt	|d}|d7 }|	|d kr,tt
|}t
|	|d D ]}||d  ||< q|	|d< t| |} |
dkrStt
|}t
|
ddD ]}||d  ||< q=|
|d< t||}|dkrxt | }|dd }t|d d|d g}t| |} d}nd}|dkrt |}|dd }t|d |d dg}t||}d}nd}t| |}t |}d}|rt|dd ||dd gd}d}|rt|dd |gd}d}|rt||}|dkrt|d}|S |dkrt|d}|S )r      zLCannot do batch_dot on inputs with rank < 2. Received inputs with tf.shapes z and .r   NzYCannot do batch_dot on inputs with different batch sizes. Received inputs with tf.shapes r    c                 s   s    | ]
}t |ttfV  qd S N)
isinstancelisttuple).0ar   r   r   	<genexpr>e   s    zbatch_dot.<locals>.<genexpr>zYMultiple target dimensions are not supported. Expected: None, int, (int, int), Provided: zCannot perform batch_dot over axis 0. If your inputs are not batched, add a dummy batch dimension to your inputs using K.expand_dims(x, 0)z-Cannot do batch_dot on inputs with tf.shapes z with axes=z(. x.shape[%d] != y.shape[%d] (%d != %d).r      TF)shapelen
ValueErrorstrr/   intpy_anyr0   r   expand_dimsr&   	transposestackreshapematmulconcatsqueeze)r   yaxesx_shapey_shapex_ndimy_ndimx_batch_sizey_batch_sizea0a1d1d2orig_x_ndimorig_y_ndimpatterni
x_mid_dimsx_squashed_shape
x_squashedy_trail_dimsy_squashed_shape
y_squashedr+   output_shape
do_reshaper   r   r   	batch_dot:   s   

	








r[   z#keras._legacy.backend.batch_flattenc              
   C   s,   t | t dtt | dd g} | S )r   r   r    N)r   r?   r>   prodr6   r
   r   r   r   batch_flatten   s   (r]   z%keras._legacy.backend.batch_get_valuec                 C   s   dd | D S )r   c                 S   s   g | ]}|  qS r   )numpyr2   r   r   r   r   
<listcomp>       z#batch_get_value.<locals>.<listcomp>r   )tensorsr   r   r   batch_get_value      rc   z%keras._legacy.backend.batch_set_valuec                 C   sB   t  st  r| D ]\}}tj||jjd}|| q
dS dS r   r*   N)r   executing_eagerlyinside_functionnpasarrayr*   r%   assign)tuplesr   valuer   r   r   batch_set_value   s   rn   z)keras._legacy.backend.batch_normalizationMbP?c                 C   s   t j| |||||S r   )r   nnbatch_normalization)r   meanvarbetagammar   epsilonr   r   r   rq         rq   zkeras._legacy.backend.bias_addc                 C   s   |du rt  }|dvrtd| |j}t|dkr7t|t| d kr7tdt| dt| d  dt|dkrS|dkrJtjj| |d	d
S tjj| |dd
S t| dv ry|dkrpd|d f|dd  }| t	|| S | t	|d|  S tj| |S )r   N   channels_lastchannels_firstUnknown data_format: r    zUnexpected bias dimensions z. Expected it to be 1 or z dimensionsrz   NCHW)data_formatNHWC)r5         r   r    )
r   image_data_formatr8   r6   r7   ndimr   rp   bias_addr?   )r   biasr}   
bias_shapebias_reshape_axisr   r   r   r      s*    
r   z)keras._legacy.backend.binary_crossentropyc                 C   s   t | } t |}|rt jj| |dS t t |j}t ||d| }| t j	|t   }|d|  t j	d| t   7 }| S )r   labelslogits      ?r    )
r   convert_to_tensorrp   !sigmoid_cross_entropy_with_logitsr   rv   r*   clip_by_valuemathlog)targetoutputfrom_logitsepsilon_bcer   r   r   binary_crossentropy  s   

$r   z/keras._legacy.backend.binary_focal_crossentropy      ?       @c                 C   sx   |rt |n|}| | d|  d|   }t d| |}t| ||d}	||	 }
|r:| | d|  d|   }||
 }
|
S )r   r    r   )r   r   r   )r   sigmoidpowr   )r   r   apply_class_balancingalpharu   r   	sigmoidalp_tfocal_factorr   	focal_bceweightr   r   r   binary_focal_crossentropy&  s   
r   zkeras._legacy.backend.castc                 C   r   r   )r   r   )r   r*   r   r   r   r   F  r   r   z$keras._legacy.backend.cast_to_floatxc                 C   s:   t | tjtjtjfrtj| t dS tj	| t dS )r   rf   )
r/   r   TensorVariableSparseTensorr   r   floatxri   rj   r
   r   r   r   cast_to_floatxL  s   r   z.keras._legacy.backend.categorical_crossentropyc                 C   s   t | } t |}| j|j |rt jj| ||dS |t ||d }t t |j	}t 
||d| }t | t j| | S )r   )r   r   r   Tr   )r   r   r6   assert_is_compatible_withrp   !softmax_cross_entropy_with_logits
reduce_sumr   rv   r*   r   r   r   )r   r   r   r   r   r   r   r   categorical_crossentropyT  s   

r   z4keras._legacy.backend.categorical_focal_crossentropyc                 C   s   t | } t |}| j|j |rt jj||d}|t j||dd }t t |j	}t 
||d| }|  t j| }t d| |}t ||}	t |	|}
t j|
|d}
|
S )r   r   Tr   r   r   )r   r   r6   r   rp   softmaxr   r   rv   r*   r   r   r   r   multiply)r   r   r   ru   r   r   r   ccemodulating_factorweighting_factor	focal_ccer   r   r   categorical_focal_crossentropyl  s   


r   zkeras._legacy.backend.clipc                 C   sT   t |ttfrt |ttfr||k r|}|du rtj }|du r#tj}t| ||S r   N)r/   r:   floatri   infr   r   )r   	min_value	max_valuer   r   r   clip  s   r   z!keras._legacy.backend.concatenatec                 C   s|   |dk rt | d }|r||; }nd}tdd | D r$tjj|| S tdd | D r3t| |S tdd | D |S )r   r   c                 s   s    | ]}t |V  qd S r.   )	is_sparser_   r   r   r   r4         zconcatenate.<locals>.<genexpr>c                 s   s    | ]	}t |tjV  qd S r.   )r/   r   RaggedTensorr_   r   r   r   r4     s    c                 S   s   g | ]}t |qS r   )to_denser_   r   r   r   r`     ra   zconcatenate.<locals>.<listcomp>)r   py_allr   compatv1sparse_concatrA   )rb   r   rankr   r   r   concatenate  s   
r   zkeras._legacy.backend.constantc                 C   s"   |du rt  }tj| |||dS )r   N)r*   r6   r%   )r   r   r   constant)rm   r*   r6   r%   r   r   r   r     s   r   c                 C      d}|dkrd}| |fS )NNWCrz   NCWr   r   r}   tf_data_formatr   r   r   _preprocess_conv1d_input     r   c                 C   s0   d}|dkr|rt | d} | |fS d}| |fS )Nr~   rz   r   r,   r5   r    r|   r   r=   )r   r}   force_transposer   r   r   r   _preprocess_conv2d_input  s   r   c                 C   r   )NNDHWCrz   NCDHWr   r   r   r   r   _preprocess_conv3d_input  r   r   c                 C   s.   | dkrd} | S | dkrd} | S t d|  )NsameSAMEvalidVALIDzInvalid padding: )r8   )paddingr   r   r   _preprocess_padding  s   r   zkeras._legacy.backend.conv1dr   c           	      C   s   |du rt  }|dvrtd| |j }|dkr-||d d  }t| |df} d}t|}t| |\} }tj	j
jj| |||||d} |d	krT|d
krTt| d} | S )r   Nrx   r{   causalr   r    r   inputfilterdilation_ratestridesr   r}   rz   r   )r   r,   r    )r   r   r8   r6   as_listtemporal_paddingr   r   r   r   r   rp   convolutionr=   )	r   kernelr   r   r}   r   kernel_shapeleft_padr   r   r   r   conv1d  s,   

r   zkeras._legacy.backend.conv2dr    r    c                 C   x   |du rt  }|dvrtd| t| |\} }t|}tjjjj	| |||||d} |dkr:|dkr:t
| d} | S )r   Nrx   r{   r   rz   r~   r   r5   r    r,   )r   r   r8   r   r   r   r   r   rp   r   r=   r   r   r   r   r}   r   r   r   r   r   conv2d  "   

r   z&keras._legacy.backend.conv2d_transposec           	      C   sh  |du rt  }|dvrtd| |dkr|dkrd}nd}t| ||\} }|dkr>|dkr>|d	 |d
 |d |d f}|d	 du rTt| d	 ft|dd  }t|ttfrbt	t|}t
|}|dkrqd| d }nd| }|dkrtjjjj| |||||d} n|d	 |d krtd| tjj| |||d	 |d} |dkr|dkrt| d} | S )r   Nrx   r{   rz   r   TFr~   r   r,   r5   r    r   r   r}   zmExpected the 2 dimensions of the `dilation_rate` argument to be equal to each other. Received: dilation_rate=)rater   r   )r   r   r8   r   r   r6   r1   r/   r0   r>   r   r   r   rp   conv2d_transposeatrous_conv2d_transposer=   )	r   r   rY   r   r   r}   r   r   r   r   r   r   r     sZ    
	r   zkeras._legacy.backend.conv3dr    r    r    c                 C   r   )r   Nrx   r{   r   rz   r   r   r   r    r,   r5   )r   r   r8   r   r   r   r   r   rp   r   r=   r   r   r   r   conv3db  r   r   zkeras._legacy.backend.cosc                 C   r   r   )r   cosr
   r   r   r   r     r   r   z"keras._legacy.backend.count_paramsc                 C   s   t | j S r   )ri   r\   r6   r   r
   r   r   r   count_params     r   z$keras._legacy.backend.ctc_batch_costc                 C   s   t t j|ddt j}t t j|ddt j}t t| |t j}t jt j|g ddt	  }t 
t jjjj|||ddS )r   r   r   r    r   r,   perm)inputsr   sequence_lengthr    )r   r   rB   r!   ctc_label_dense_to_sparser   r   r=   r   rv   r<   r   r   rp   ctc_loss)y_truey_predinput_lengthlabel_lengthsparse_labelsr   r   r   ctc_batch_cost  s   
r  z/keras._legacy.backend.ctc_label_dense_to_sparsec                    s@  t | }t |d g}t |d g  fdd}t t d|d gdt j}t jjj|||dd}|dddddf }t 	t 
t d|d ||}t jj||}t t 	t 
t d|d  t|d}	t jj|	|}
t t 	t|
|gdddd	g}t jj| |}t t |t j|t |t jS )
r   r   r    c                    s(   t t t | d dt  |k S )Nr    r   )r   r<   r&   r6   fill)	old_inputcurrent_inputmax_num_labels_tnsr   r   range_less_than  s   z2ctc_label_dense_to_sparse.<locals>.range_less_than)initializerparallel_iterationsNr   r,   r   )r   r6   r>   r   r  r   r   r   scanr?   tiler&   boolean_maskr=   reverser   	gather_ndr   int64)r   label_lengthslabel_shapenum_batches_tnsr	  init
dense_masklabel_array	label_indbatch_array	batch_indindicesvals_sparser   r  r   r     s6   
r   z keras._legacy.backend.ctc_decodeTd   c                 C   s   t | }|d |d }}t jt j| g ddt  } t |t j}|r3t j	j
| |d\}}	nt jjj	j| |||d\}}	g }
|D ]}t |j|j||f}|
t jj|dd qE|
|	fS )	r   r   r    r   r   )r   r   )r   r   
beam_width	top_pathsr   )sp_inputdefault_value)r   r6   r   r   r=   r   rv   r   r!   rp   ctc_greedy_decoderr   r   ctc_beam_search_decoderr   r  valuesappendsparser   )r   r   greedyr  r  input_shapenum_samples	num_stepsdecodedlog_probdecoded_densestr   r   r   
ctc_decode  s*   


r/  zkeras._legacy.backend.cumsumc                 C      t j| |dS r   r   )r   cumsumr   r   r   r   r2    rd   r2  zkeras._legacy.backend.cumprodc                 C      t jj| |dS r1  )r   r   cumprodr   r   r   r   r4    r   r4  z&keras._legacy.backend.depthwise_conv2dc                 C   s   |du rt  }|dvrtd| t| |\} }t|}|dkr)d| d }nd| }tjj| |||||d} |dkrG|dkrGt| d	} | S )
r   Nrx   r{   r~   r   r   r   r   	dilationsr}   rz   r   )	r   r   r8   r   r   r   rp   depthwise_conv2dr=   )r   depthwise_kernelr   r   r}   r   r   r   r   r   r7    s(   
r7  zkeras._legacy.backend.dotc           
      C   sl  t | durt | dkst |dkrg }t| jtt| D ]\}}|dur.|| q || q t|}g }t|jtt|D ]\}}|durT|| qF|| qFt|}ttt |}|	dg| }t
| d|d g}t
tj||d|d dg}t
t|||dd |dd  |dd  S t| rtj| |}	|	S t| |}	|	S )r   Nr,   r   r   )r   zipr6   r   unstackr%  r1   r0   r&   popr?   r=   r@   r   r&  sparse_dense_matmul)
r   rC   rE   rR   srF   y_permute_dimxtytoutr   r   r   dot  s2   $  ,rC  zkeras._legacy.backend.dropoutc                 C   s(   |du r
t jd}tjj| |||dS )r   N    cA)r   noise_shapeseed)ri   randomrandintr   rp   dropout)r   levelrE  rF  r   r   r   rI  5  s   rI  zkeras._legacy.backend.dtypec                 C   s
   | j jjS r   )r*   
base_dtyper%   r
   r   r   r   r*   =  r   r*   zkeras._legacy.backend.elur   c                 C   s.   t j| }|dkr|S t | dk||| S )r   r    r   )r   rp   eluwhere)r   r   resr   r   r   rL  C  s   rL  zkeras._legacy.backend.equalc                 C   r   r   )r   equalr   rC   r   r   r   rO  M  r   rO  zkeras._legacy.backend.evalc                 C   s   t t| S r   )	get_valuer   r
   r   r   r   evalS  r   rR  zkeras._legacy.backend.expc                 C   r   r   )r   expr
   r   r   r   rS  Y  r   rS  z!keras._legacy.backend.expand_dimsc                 C   r   r   )r   r<   r   r   r   r   r<   _  r   r<   zkeras._legacy.backend.eyec                 C   s0   |du rt  }t|}ttj| |d||S )r   Nrf   )r   r   r   as_dtypevariableeye)sizer*   r%   tf_dtyper   r   r   rV  e  s   
rV  zkeras._legacy.backend.flattenc                 C   s   t | dgS )r   r   r   r?   r
   r   r   r   flattenn  rd   rZ  zkeras._legacy.backend.foldlc                 C      t jjj| |||dS r   )r
  r%   )r   r   r   foldlfnelemsr
  r%   r   r   r   r]  t  rw   r]  zkeras._legacy.backend.foldrc                 C   r[  r\  )r   r   r   foldrr^  r   r   r   ra  z  rw   ra  zkeras._legacy.backend.gatherc                 C      t jj| |S r   )r   r   r   gather)	referencer  r   r   r   rc    r   rc  zkeras._legacy.backend.get_valuec                 C   s   t | s| S t  st| t jjr|  S t| dds6t jj	  |  W  d   S 1 s1w   Y  t 
  |  W  d   S 1 sIw   Y  dS )r   _in_graph_modeTN)r   	is_tensorrg   r/   __internal__EagerTensorr^   getattreager_context
eager_mode
init_scoper
   r   r   r   rQ    s   
 
$rQ  zkeras._legacy.backend.gradientsc                 C   s   t jjj| |ddS )r   T)colocate_gradients_with_ops)r   r   r   	gradients)loss	variablesr   r   r   rn    s   rn  zkeras._legacy.backend.greaterc                 C   r   r   r   greaterrP  r   r   r   rr    r   rr  z#keras._legacy.backend.greater_equalc                 C   r   r   )r   greater_equalrP  r   r   r   rs    r   rs  z"keras._legacy.backend.hard_sigmoidc                 C   sJ   t jd| jd}t jd| jd}t | |} t | |} t | dd} | S )r   g?rf   g      ?        r   )r   r   r*   r   addr   )r   	point_two
point_fiver   r   r   hard_sigmoid  s   rx  zkeras._legacy.backend.in_top_kc                 C   s   t jjj| ||S r   )r   r   r   r   in_top_k)predictionstargetskr   r   r   ry    s   ry  zkeras._legacy.backend.int_shapec                 C   s8   z| j }t|tst| }|W S  ty   Y dS w r   )r6   r/   r1   r   r8   r   r6   r   r   r   	int_shape  s   
r~  zkeras._legacy.backend.is_sparsec                 C   s,   t | dd}|durt|tjS t| tjS )r   
_type_specN)ri  r/   r   SparseTensorSpecr   )tensorspecr   r   r   r     s   r   z"keras._legacy.backend.l2_normalizec                 C   r3  r1  )r   linalgl2_normalizer   r   r   r   r    r   r  zkeras._legacy.backend.lessc                 C   r   r   r   lessrP  r   r   r   r    r   r  z keras._legacy.backend.less_equalc                 C   r   r   )r   
less_equalrP  r   r   r   r    r   r  zkeras._legacy.backend.logc                 C      t j| S r   )r   r   r   r
   r   r   r   r     r   r   zkeras._legacy.backend.map_fnc                 C   r[  )r   )r%   r*   )r   r   r   map_fn)r_  r`  r%   r*   r   r   r   r    rw   r  zkeras._legacy.backend.maxc                 C      t | ||S r   )r   
reduce_maxr   r   r   r   max  rd   r  zkeras._legacy.backend.maximumc                 C   r   r   )r   maximumrP  r   r   r   r    r   r  zkeras._legacy.backend.meanc                 C   s,   | j jtjkrt| t } t| ||S r   )r*   rK  r   r   r   r   r   reduce_meanr   r   r   r   rr     s   rr   zkeras._legacy.backend.minc                 C   r  r   )r   
reduce_minr   r   r   r   min  rd   r  zkeras._legacy.backend.minimumc                 C   r   r   )r   minimumrP  r   r   r   r    r   r  z+keras._legacy.backend.moving_average_updatec                 C   s2   t || j}t || j}| | | d|  S )r   r    )r   r   r*   
assign_sub)r   rm   momentumr   r   r   moving_average_update  s   r  z keras._legacy.backend.name_scopec                 C   r   r   )r   
name_scope)r%   r   r   r   r    r   r  zkeras._legacy.backend.ndimc                 C   s   | j jS r   )r6   r   r
   r   r   r   r     s   r   zkeras._legacy.backend.not_equalc                 C   r   r   )r   	not_equalrP  r   r   r   r  "  r   r  zkeras._legacy.backend.one_hotc                 C   s   t j| |ddS )r   r   )depthr   )r   one_hot)r  num_classesr   r   r   r  (  r   r  zkeras._legacy.backend.onesc                 C      t  4 |du rt }t |}t j| ||d}t|j r/t	|||dW  d   S |W  d   S 1 s;w   Y  dS r   N)r6   r*   r%   r*   r%   )
r   rl  r   r   rT  onesr   r6   r   rU  r6   r*   r%   rX  vr   r   r   r  .     

$r  zkeras._legacy.backend.ones_likec                 C      t j| ||dS r   r  )r   	ones_liker   r*   r%   r   r   r   r  ;  r   r  z(keras._legacy.backend.permute_dimensionsc                 C   r0  )r   r   r   )r   rQ   r   r   r   permute_dimensionsA  rd   r  zkeras._legacy.backend.pool2dc                 C   s  |du rt  }|dvrtd| t|dkrtdt|dkr'tdt| |\} }t|}|dkrCd| d }d| d }nd	| }d	| }|d
kr]tjjj	j
| ||||d} n|dkrotjjj	j| ||||d} ntdt| |dkr|dkrt| d} | S )r   Nrx   r{   r,   z*`pool_size` must be a tuple of 2 integers.(`strides` must be a tuple of 2 integers.r~   r   r   r  r   avgInvalid pooling mode: rz   r   )r   r   r8   r7   r   r   r   r   r   rp   max_poolavg_poolr9   r=   r   	pool_sizer   r   r}   	pool_moder   r   r   r   pool2dG  s6   




r  zkeras._legacy.backend.pool3dc                 C   s   |du rt  }|dvrtd| t| |\} }t|}|dkr/d| d }d| d }nd| }d| }|dkrGtjj| ||||d} n|d	krWtjj| ||||d} ntd
t	| |dkrm|dkrmt
| d} | S )r   Nrx   r{   r   r   r   r  r   r  r  rz   r   )r   r   r8   r   r   r   rp   
max_pool3d
avg_pool3dr9   r=   r  r   r   r   pool3ds  s.   


r  zkeras._legacy.backend.powc                 C   r   r   )r   r   )r   r3   r   r   r   r     r   r   zkeras._legacy.backend.prodc                 C   r  r   )r   reduce_prodr   r   r   r   r\     rd   r\   z&keras._legacy.backend.random_bernoullirt  c                 C   sX   |du rt  }|du rtjd}ttjj| ||d|ktj| |dtj	| |dS )r   NrD  r*   rF  rf   )
r   r   ri   rG  rH  r   rM  uniformr  zeros)r6   pr*   rF  r   r   r   random_bernoulli  s   r  z#keras._legacy.backend.random_normalc                 C   :   |du rt  }|du rtjd}tjj| ||||dS )r   NrD  )rr   stddevr*   rF  )r   r   ri   rG  rH  r   normalr6   rr   r  r*   rF  r   r   r   random_normal     
r  z,keras._legacy.backend.random_normal_variablec                 C   V   |du rt  }t|}|du rtjd}tjjj	||||d| }t
|||dS r   Ng    eAr  r  )r   r   r   rT  ri   rG  rH  r   r   random_normal_initializerrU  )r6   rr   scaler*   r%   rF  rX  rm   r   r   r   random_normal_variable  s   
r  z$keras._legacy.backend.random_uniformc                 C   r  )r   NrD  )minvalmaxvalr*   rF  )r   r   ri   rG  rH  r   r  )r6   r  r  r*   rF  r   r   r   random_uniform  r  r  z-keras._legacy.backend.random_uniform_variablec                 C   r  r  )r   r   r   rT  ri   rG  rH  r   r   random_uniform_initializerrU  )r6   lowhighr*   r%   rF  rX  rm   r   r   r   random_uniform_variable  s   
r  zkeras._legacy.backend.reshapec                 C   r   r   rY  r}  r   r   r   r?     r   r?   zkeras._legacy.backend.reluc                 C   s  t | dt }|dkr2|du r|dkrtjj| |dS |dkr*tj|  | }n
tj|  }nd}|du}|dkrJ| tjt| ||d } n|dkrWtj	| } d	}ntj| } |rvtj
|| jd}tj
d| jd}t| ||} |dkrtj
|| jd}| || 8 } | S )
r   r*   rt  Nr   )r   r    rf      F)ri  r   r   r   rp   
leaky_relurelur   rr  relu6r   r*   r   )r   r   r   	thresholdr*   negative_partclip_maxzeror   r   r   r    s.   r  zkeras._legacy.backend.repeatc                 C   s8   t | dksJ t| d} td|dg}t| |S )r   r,   r    )r   r   r<   r>   r  )r   nrQ   r   r   r   repeat  s   r  z%keras._legacy.backend.repeat_elementsc                    s   | j  }|| dur#tj| || |d} fdd|D }t||S |d }t | }tj| |d}tt| j d } ||< t	||}t
||} ||< tj|dd}||9 }t||}| j  }|| |S )	r   N)rm   num_or_size_splitsr   c                    s   g | ]}t  D ]}|qqS r   )r&   )r2   r>  _repr   r   r`   .  s    z#repeat_elements.<locals>.<listcomp>r    r   r!   rf   )r6   r   r   splitr   r<   ri   r  r7   r  deleter   r?   	set_shape)r   r  r   rE   splitsx_repauxiliary_axisrepsr   r  r   repeat_elements%  s&   




r  z#keras._legacy.backend.resize_imagesnearestc           
   	   C   sT  |dkr	d\}}n|dkrd\}}nt d| | j||d  }| r0tj| dd}nt| ||d  }|ttj||gdd9 }|dkrTt| g d	} tj	j
jtj	j
jtj	j
jtj	j
jtj	j
jtj	j
jtj	j
jtj	j
jd
}dd|  d }	||v rtj	j| ||| d} nt d|	 d| d|dkrt| g d} | S )r   rz   )r,   r5   ry   )r    r,   z Invalid `data_format` argument: r    r!   rf   r   )areabicubicbilineargaussianlanczos3lanczos5mitchellcubicr  "z", ")methodz+`interpolation` argument should be one of: z. Received: "z".r   )r8   r6   is_fully_definedr   r   r   ri   arrayr  imageResizeMethodAREABICUBICBILINEARGAUSSIANLANCZOS3LANCZOS5MITCHELLCUBICNEAREST_NEIGHBORjoinkeysresize)
r   height_factorwidth_factorr}   interpolationrowscols	new_shapeinterpolationsinterploations_listr   r   r   resize_imagesK  sH   


r  z$keras._legacy.backend.resize_volumesc                 C   sz   |dkrt | |dd}t ||dd}t ||dd}|S |dkr6t | |dd}t ||dd}t ||dd}|S td| )	r   rz   r,   r   r5   r   ry   r    zInvalid data_format: )r  r8   )r   depth_factorr  r  r}   r   r   r   r   resize_volumesz  s   r  zkeras._legacy.backend.reversec                 C      t |tr|g}t| |S r   )r/   r:   r   r  )r   rD   r   r   r   r       
r  zkeras._legacy.backend.rnnc           *   	      s  t jj sddd }|st j|		t j	}|d jd |d jd t |d d |D ]}|jd q4|dur_|j	t j
krNt |t j
}t|jdkrYt|}|s_||}du reg d4d	d
 |rsstdt}g }g }fdd}t j	rt j|	n|	f	fdd}|durLt |}r|  tD ]n}||}|| 
|t|t \}} 
|}|st|}n|d }t |||}t j|}t j|}t 
fdd|D }tdd t|||D }t j||}r|| || q|g}|g}q|d }|d }t |}rJt  |d ||t|}t  ||dd|t|}ntD ])}||}|t|t \}}rr|| || qP|g}|g}qP|d }|d }t |}nDt}tfddt|D tfddt|D t j	dd |D }|tt \} }!rƈndtfddtt j| D }"t jdddd}#du r}$nt }$fdd|$ddd }%|dur!rt|d}t jt j
d!d"|fd#d$ fd%d&n-tt jrLrAt jdd'}&t  |&d fd(d$nfd)d$d*d& nddurtd+d t j| D 	f	d,d-}'t j!j"j#d5|'|#|"f| d.|%}(|(dd }n"	fd/d-}'t j!j"j#d5|'|#|"f| d.|%}(|(dd }|(d }"td0d |"D }td1d |D }t j| |}t j| |}fd2d3})t j|)|}|st j||}|||fS )6r   Tc                 S   s.   t tt| j}d\|d< |d< t| |S )N)r    r   r   r    )r0   r&   r7   r6   r   r=   )input_trD   r   r   r   swap_batch_timestep  s   z rnn.<locals>.swap_batch_timestepr   r    r5   Nr,   c                 S   s   t j| rtd|  t j|rtd| t|jt| j }t|D ]}t | d} q(dg| |j |d   }t 	| |S )Nz)mask_t is expected to be tensor, but got z*input_t is expected to be tensor, but got r   r    )
r   nest	is_nestedr8   r7   r6   r&   r<   r   r  )mask_tr  	fixed_dim	rank_diffr  	multiplesr   r   r   _expand_mask  s   zrnn.<locals>._expand_maskz/Unrolling requires a fixed number of timesteps.c                    s   t | }  r|   | S r.   )r   r;  r  )r  go_backwardsr   r   _process_single_input_t  s   
z$rnn.<locals>._process_single_input_tc                    s     fddD }t j|S )Nc                    s   g | ]}|  qS r   r   )r2   t_timer   r   r`     ra   z2rnn.<locals>._get_input_tensor.<locals>.<listcomp>)r   r  pack_sequence_as)r  inp)r   processed_inputr  r   _get_input_tensor  s   zrnn.<locals>._get_input_tensorr   c                 3   s    | ]} |V  qd S r.   r   )r2   r>  r  r
  r   r   r4   	      

zrnn.<locals>.<genexpr>c                 s   $    | ]\}}}t |||V  qd S r.   r   rM  )r2   mr>  psr   r   r   r4     
    
r  c                 3   s,    | ]\}}t j|j d | dV  qdS )	input_ta_r*   rW  tensor_array_nameN)r   TensorArrayr*   )r2   rR   r  time_steps_tr   r   r4   @  s    
c                 3   s2    | ]\}} s| |n| t|d V  qdS )r   N)r;  r  )r2   tainput_r  r   r   r4   H  s    
c                 S   s   g | ]}|d  qS r   r   )r2   r  r   r   r   r`   U  ra   zrnn.<locals>.<listcomp>c                 3   s0    | ]\}}t j|j |jd | dV  qdS )
output_ta_)r*   rW  element_shaper#  N)r   r$  r*   r6   )r2   rR   rB  )output_ta_sizer   r   r4   ^  s    
r!   r  r  c                    s   |  k S r.   r   )r  r  r%  r   r   <lambda>p  s    zrnn.<locals>.<lambda>    )condmaximum_iterationsr  swap_memorymask_tar"  c                    s
     | S r.   readr  )r2  r   r   
masking_fn~  s   
zrnn.<locals>.masking_fnc                    s2   t  fdd|D }t dd t|||D S )Nc                 3   s$    | ]} |t jd V  qdS )r   N)r7   r6   r2   or  r   r   r4     s
    
5rnn.<locals>.compute_masked_output.<locals>.<genexpr>c                 s   r  r.   r  )r2   r  r7  fmr   r   r   r4     r  r1   r:  )r
  flat_out	flat_masktiled_mask_t)r  r
  r   compute_masked_output  s   
z"rnn.<locals>.compute_masked_outputr   c                       t  | S r.   r  r  )rev_input_lengthr   r   r5       c                    r@  r.   rq  r  )r   r   r   r5    rB  c                    s   t  fddt||D S )Nc                 3   s&    | ]\}}t jj ||V  qd S r.   )r   r   r   rM  )r2   r7  zor>  r   r   r4     s
    
r8  r:  )r
  r;  r<  r   r>  r   r?    s   c                 s   s    | ]}t |V  qd S r.   r   
zeros_liker6  r   r   r   r4     r  c                    s  t fddD }tj|}}	|t |t  \}}tj|}
r-ntj|}	|||	}
tj|}tj|}t||D ]\}}t|tjrZ||j	 qJ|||}tj||}rlnd t  fddt||
D }d |t |
ft | S )as  RNN step function.

                Args:
                    time: Current timestep value.
                    output_ta_t: TensorArray.
                    prev_output: tuple of outputs from time - 1.
                    *states: List of states.

                Returns:
                    Tuple: `(time + 1, output_ta_t, output) + tuple(new_states)`
                c                 3       | ]}|  V  qd S r.   r3  r2   r'  r  r   r   r4         %rnn.<locals>._step.<locals>.<genexpr>r   c                 3        | ]\}}|  |V  qd S r.   writer2   r'  rB  ta_index_to_writer   r   r4     
    

r    
r1   r   r  r  rZ  r:  r/   r   r  r6   )r  output_ta_tprev_outputstatesr  r
  r   
new_statesflat_outputflat_mask_outputflat_new_output
flat_stateflat_new_statestate	new_stateflat_final_state)	r?  	constantsflat_zero_outputinput_tar   r5  return_all_outputsstep_functionzero_output_for_maskrO  r  r   _step  sB   
zrnn.<locals>._step)body	loop_varsc                    s   t fddD }tj|}|t |t  \}}tj|}tj|}t||D ]\}}	t|	tjr@|	|j	 q0tj|}
rKnd t  fddt||
D }tj|}d |ft | S )a)  RNN step function.

                Args:
                    time: Current timestep value.
                    output_ta_t: TensorArray.
                    *states: List of states.

                Returns:
                    Tuple: `(time + 1,output_ta_t) + tuple(new_states)`
                c                 3   rF  r.   r3  rG  r  r   r   r4     rH  rI  r   c                 3   rJ  r.   rK  rM  rN  r   r   r4     rP  r    rQ  )r  rR  rT  r  r   rU  rY  rZ  r[  r\  rV  )r^  initial_statesr`  r   ra  rb  rd  r   re    s(   c                 s   s    | ]}|  V  qd S r.   )r>   r6  r   r   r   r4     r   c                 s   s    | ]}|d  V  qdS )r   Nr   r6  r   r   r   r4     r   c                    sB   t | tjr| j }r|d< nd|d<  |d< | | | S )Nr   r    )r/   r   r   r6   r   r  )output_r6   )batchra  
time_stepsr   r   r    s   


zrnn.<locals>.set_shaper   r   )$r   rg  tf2enabledr  map_structurerZ  r6   with_rank_at_leastr*   r   r   r7   r<   r8   r1   r	  r;  r  r&   rE  rM  r:  r  r%  r>   	enumerater   r  r$  r/   r   subtractr   r   
while_loop)*rb  r   rh  r  maskr^  unrollr   
time_majorrc  ra  r  flatted_inputsr(  rT  successive_statessuccessive_outputsr  r  	mask_listrR   r  r   rU  r=  rS  flat_statesflat_new_statesflat_final_stateslast_outputoutputsinput_time_zerooutput_time_zeror  	output_tar  max_iterationswhile_loop_kwargsmax_lenre  final_outputsr  r   )r  rj  r?  r^  r_  r  rh  r   r`  r   r
  r2  r5  r,  r  ra  rA  rb  rk  r&  rc  r   rnn  sL  





















5
"

r  zkeras._legacy.backend.roundc                 C   r   r   )r   roundr
   r   r   r   r  +  r   r  z&keras._legacy.backend.separable_conv2dc              	   C   s   |du rt  }|dvrtd| t|dkrtdt| |\} }t|}t|ts1t|}|dkr<d| d }nd| }tj	j
| ||||||d	} |d
kr[|dkr[t| d} | S )r   Nrx   r{   r,   r  r~   r   r   r5  rz   r   )r   r   r8   r7   r   r   r/   r1   r   rp   separable_conv2dr=   )r   r8  pointwise_kernelr   r   r}   r   r   r   r   r   r  1  s2   
	r  zkeras._legacy.backend.set_valuec                 C   s    t j|| jjd}| | dS re   )ri   rj   r*   r%   rk   )r   rm   r   r   r   	set_valueZ  s   r  zkeras._legacy.backend.shapec                 C   r   r   )r   r6   r
   r   r   r   r6   a  r   r6   zkeras._legacy.backend.sigmoidc                 C   s   t | }|S r   )r   r   )r   r   r   r   r   r   g  s   
r   zkeras._legacy.backend.signc                 C   r   r   )r   signr
   r   r   r   r  n  r   r  zkeras._legacy.backend.sinc                 C   r   r   )r   sinr
   r   r   r   r  t  r   r  zkeras._legacy.backend.softmaxc                 C   sr   | j jdkrtd|  t|trtjj| |d}nt| tj	| |dd }tj
||dd}|| }| |_|S )r   r    z=Cannot apply softmax to a tensor that is 1D. Received input: r   Tr   )r6   r   r8   r/   r:   r   rp   r   rS  r  r   _keras_logits)r   r   r   	numeratordenominatorr   r   r   r   z  s   
r   zkeras._legacy.backend.softplusc                 C   r  r   )r   r   softplusr
   r   r   r   r    r   r  zkeras._legacy.backend.softsignc                 C   r  r   )r   r   softsignr
   r   r   r   r    r   r  z5keras._legacy.backend.sparse_categorical_crossentropyc                 C   s  t | } t |}t| d} |s)t t |j}t ||d| }t j|}t	|j
ttfr7t|j
}n|j
j}|durb||; }||d krattt|t|d ||g}t j||d}n|dkrmtd|t 
|}| j
j}	|	duo|duo|	|d k}
|
rt| } t |d|d g}|durt | t|| j}| | } || }t jj| |d}|durt|dd d}t ||}t t |||}||_|S |
r|dkrt ||dd }|S )	r   r  r    Nr   r   zcCannot compute sparse categorical crossentropy with `axis={}` on an output tensor with unknown rankr   r5   )r   r   r   r   rv   r*   r   r   r   r/   r6   r1   r0   r7   ndims	itertoolschainr&   r=   r8   formatrZ  r?   r  rp   (sparse_softmax_cross_entropy_with_logits
scatter_ndrM  _keras_mask)r   r   r   r   ignore_classr   output_rankpermutationrY   target_rankupdate_shape
valid_maskrN  	res_shaper   r   r   sparse_categorical_crossentropy  sf   




r  z(keras._legacy.backend.spatial_2d_paddingr   r   c                 C   s   t |dksJ t |d dksJ t |d dksJ |du r$t }|dvr/td| |dkrFddgddgt|d t|d g}nddgt|d t|d ddgg}tjj| |S )r   r,   r   r    Nrx   r{   rz   )	r7   r   r   r8   r0   r   r   r   padr   r   r}   rQ   r   r   r   spatial_2d_padding  s   &$r  z(keras._legacy.backend.spatial_3d_paddingr   r   r   c                 C   s0  t |dksJ t |d dksJ t |d dksJ t |d dks&J |du r.t }|dvr9td| |dkrgddgddg|d d |d d g|d d |d d g|d d |d d gg}n)ddg|d d |d d g|d d |d d g|d d |d d gddgg}tjj| |S )	r   r5   r   r,   r    Nrx   r{   rz   )r7   r   r   r8   r   r   r   r  r  r   r   r   spatial_3d_padding  s,   	r  zkeras._legacy.backend.sqrtc                 C   s$   t d| j}t | |} t | S )r   rt  )r   r   r*   r  sqrt)r   r  r   r   r   r       
r  zkeras._legacy.backend.squarec                 C   r   r   )r   squarer
   r   r   r   r    r   r  zkeras._legacy.backend.squeezec                 C   s   t | |gS r   )r   rB   r   r   r   r   rB   #  rd   rB   zkeras._legacy.backend.stackc                 C   r0  r1  )r   r>   r   r   r   r   r>   )  rd   r>   zkeras._legacy.backend.stdc                 C   0   | j jtjkrt| t } tjj| ||dS r   r   )	r*   rK  r   r   r   r   r   r   
reduce_stdr   r   r   r   std/     r  z#keras._legacy.backend.stop_gradientc                 C   s$   t | ttfrttj| S t| S r   )r/   r0   r1   mapr   stop_gradient)rp  r   r   r   r  7  r  r  zkeras._legacy.backend.sumc                 C   r  r   )r   r   r   r   r   r   sum?  rd   r  zkeras._legacy.backend.switchc                    s8  | j tjkrt| d} t| }|s7tsfdd}n}t s* fdd}n }tjj| ||}|S tr> t rE   t}||kr[t	dt
| d t
| |dkr|| }tjt| dg| gd	d
}	t| |	} t}
|
|	 }t|d	k|
t|
}t| |} t|  }|S )r   r   c                          S r.   r   r   )then_expressionr   r   then_expression_fnN     z"switch.<locals>.then_expression_fnc                      r  r.   r   r   )else_expressionr   r   else_expression_fnU  r  z"switch.<locals>.else_expression_fnzuRank of `condition` should be less than or equal to rank of `then_expression` and `else_expression`. ndim(condition)=z, ndim(then_expression)=r    r   r   )r*   r   r   r   r   callabler   r   r/  r8   r9   rA   r6   r?   rM  r  r  )	conditionr  r  	cond_ndimr  r  r   	expr_ndim	ndim_diff
cond_shape
expr_shape
shape_diff
tile_shaper   )r  r  r   switchE  sR    
r  zkeras._legacy.backend.tanhc                 C   r   r   )r   tanhr
   r   r   r   r  }  r   r  z&keras._legacy.backend.temporal_paddingc                 C   s>   t |dksJ ddg|d |d gddgg}tjj| |S )r   r,   r   r    )r7   r   r   r   r  )r   r   rQ   r   r   r   r     s   r   zkeras._legacy.backend.tilec                 C   r  r   )r/   r:   r   r  )r   r  r   r   r   r    r  r  zkeras._legacy.backend.to_densec                 C   s   t | r
tj| S | S r   )r   r   r&  r   )r  r   r   r   r     s   r   zkeras._legacy.backend.transposec                 C   r   r   r   r
   r   r   r   r=     r   r=   z&keras._legacy.backend.truncated_normalc                 C   r  )r   NrD  r  )r   r   ri   rG  rH  r   truncated_normalr  r   r   r   r    r  r  zkeras._legacy.backend.updatec                 C   rb  r   )r   r   r   rk   )r   new_xr   r   r   update  r   r  z keras._legacy.backend.update_addc                 C   rb  r   )r   r   r   
assign_add)r   	incrementr   r   r   
update_add  r   r  z keras._legacy.backend.update_subc                 C   rb  r   )r   r   r   r  )r   	decrementr   r   r   
update_sub  r   r  zkeras._legacy.backend.varc                 C   r  r  )	r*   rK  r   r   r   r   r   r   reduce_variancer   r   r   r   rs     r  rs   zkeras._legacy.backend.variablec                 C   s   |du rt  }t| dr3|  }tt|jdt|jdfd}t	j
||j|jd}|j|_|S t	j| t	|||d}|S )r   Ntocoor    )r  r$  dense_shape)r*   r%   
constraint)r   r   hasattrr  ri   r   r<   rowcolr   r   datar6   _keras_shaper   rT  )rm   r*   r%   r  
sparse_coor  r  r   r   r   rU    s*   
rU  zkeras._legacy.backend.zerosc                 C   r  r  )
r   rl  r   r   rT  r  r   r6   r   rU  r  r   r   r   r    r  r  z keras._legacy.backend.zeros_likec                 C   r  r  rD  r  r   r   r   rE    r   rE  )NF)r   )Nr    r!   r.   )r   ro   )F)Fr   r   F)Fr   )r   r   Fr   )NNN)r    r   Nr    )r   r   Nr   )r   r   Nr   )Tr  r    r)  )NN)r   )r   r   Nr  )r   r   Nr  )rt  NN)rt  r   NN)rt  Nrt  )r  )FNNFNFFT)Fr   N)r  N)r  N)r   )__doc__r  r^   ri   	keras.srcr   keras.src.api_exportr   keras.src.utils.module_utilsr   r   r   r;   r   r   r	   r   r   r"   r[   r]   rc   rn   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r/  r2  r4  r7  rC  rI  r*   rL  rO  rR  rS  r<   rV  rZ  r]  ra  rc  rQ  rn  rr  rs  rx  ry  r~  r   r  r  r  r   r  r  r  rr   r  r  r  r  r   r  r  r  r  r  r  r  r   r\   r  r  r  r  r  r?   r  r  r  r  r  r  r  r  r  r  r6   r   r  r  r   r  r  r  r  r  r  r  rB   r>   r  r  r  r  r  r   r  r   r=   r  r  r  r  rs   rU  r  rE  r   r   r   r   <module>   sl   

 "




&


D



("

	
























+'
(%.   (H7