
    2VhC                     X    d dl mZ d dlmZ ddZddZd ZddZddZ	d	 Z
	 	 	 	 dd
Zy)    )backend)
tensorflowNc                    t        | t        j                        r| }nwt        | t        j                  j                        r| j
                  }nFt        | d      r9t        | d      r-t        j                  | j                  | j                  |      }ny|s|S |j                  }|j                  |j                  dk(  r|S |j                         }d|d<   t        j                  |      }||_        |S )z?Returns a `TensorSpec` given a single `Tensor` or `TensorSpec`.shapedtype)r   r   nameNr   )
isinstancetfTypeSpec__internal__CompositeTensor
_type_spechasattr
TensorSpecr   r   rankas_listTensorShape_shape)tdynamic_batchr   specr   
shape_lists         H/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/utils/tf_utils.pyget_tensor_specr      s    !R[[!	Ar66	7||	G	G!4}}177!''EJJEzzUZZ1_JJqMNN:&EDKK    c                 t   t        | t        j                  t        j                  t        j                  f      sWt        j
                         dk(  r*t        j                  |       rt        j                  |       } t        j                  | |      } |%| j                  |k7  rt        j                  | |      } | S )z<Ensures the input is a Tensor, SparseTensor or RaggedTensor.torch)r	   r
   TensorSparseTensorRaggedTensorr   	is_tensorconvert_to_numpyconvert_to_tensorr   cast)inputsr   s     r   ensure_tensorr&      s    fryy"//2??KL??'G,=,=f,E--f5F%%fe4V\\U2'Mr   c                 .    dt        t        |             v S )Nzragged_tensor.RaggedTensor)strtype)xs    r   is_ragged_tensorr+   +   s    '3tAw<77r   c                 F   t         j                  j                  | |||d|      }t        j                  ||      }| j                  j
                  dk(  r|f}nt        j                  |      d   }||f}t        j                  |j                  |j                  |      }|S )zFApply binary or count encoding to an input and return a sparse tensor.)weights	minlength	maxlengthaxisbinary_output   r   )indicesvaluesdense_shape)	r
   sparsebincountr$   r   r   r   r4   r5   )r%   depthr2   r   count_weightsresultoutput_shape
batch_sizes           r   sparse_bincountr>   /   s    YY#   F WWVU#F||AxXXf%a(
"E*__v}},F Mr   c           	      X   t         j                  j                  | ||||d|      }| j                  j                  dk(  r'|j                  t        j                  |f             |S | j                  j                         d   }|j                  t        j                  ||f             |S )z+Apply binary or count encoding to an input.r-   )r.   r/   r0   r   r1   r2   r3   r   )r
   mathr8   r   r   	set_shaper   r   )r%   r9   r2   r   r:   r;   r=   s          r   dense_bincountrB   E   s    WW#  F ||A12 M \\))+A.
U(;<=Mr   c                     t        | t        j                        r t        j                  j	                  | |      S t        j                  | |      S )z0Expand dims on sparse, ragged, or dense tensors.)r	   r
   r   r7   expand_dims)r%   r1   s     r   rD   rD   X   s8    &"//*yy$$VT22>>&$''r   c           	      "   |dk(  r)t        j                  t        j                  | |            S | j                  }| j                  j                  dk(  rt        | d      } |dk(  r| j                  d   dk7  rt        | d      } | j                  j                  dkD  r)t        d| d| d	| j                  j                   d
      |dv }|rt        | ||||      }	nt        | ||||      }	t        j                  |	|      }	|dk7  r|	S |t        d| d|       |r_t        j                  ||	j                  dddf         }
t        j                  |	j                  |
|	j                  z  |	j                        S t        j                  |	|      S )zeEncodes categorical inputs according to output_mode.

    Faster method that relies on bincount.
    intr   r-   one_hotr3      zZWhen output_mode is not `'int'`, maximum supported output rank is 2. Received output_mode z and input shape z$, which would result in output rank .)	multi_hotrG   tf_idfNzTWhen output mode is `'tf_idf'`, idf_weights must be provided. Received: output_mode=z and idf_weights=)r
   identityr$   r   r   rD   
ValueErrorr>   rB   gatherr4   r   r5   r6   multiply)r%   output_moder9   r   r7   r:   idf_weightsoriginal_shaper2   	bincountsvalue_weightss              r   tf_encode_categorical_inputsrU   _   s    e{{27765122\\N||AVR(i<<q  ,F||1**56G 1171B1B0C1F
 	
  #;;M#E=%
	 #E=%
	 	5)Ih%%0M1B;-Q
 	

 		+y/@/@B/GHI,,,!!
 	
 {{9k22r   )FN)N)float32FNN)	keras.srcr   keras.src.utils.module_utilsr   r
   r   r&   r+   r>   rB   rD   rU    r   r   <module>rZ      s<     94	8,&( >3r   