
    &Vf                     H    d dl mZ d ZddZddZ	 	 	 	 ddZdd	Zdd
ZdS )    )
tensorflowc                     t          | t          j                  r t          j                            | |          S t          j        | |          S )z0Expand dims on sparse, ragged, or dense tensors.)
isinstancetfSparseTensorsparseexpand_dims)inputsaxiss     U/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/utils/tf_utils.pyr	   r	      s@    &"/** ,y$$VT222~fd+++    Nc                     t           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	maxlengthr   binary_output   r   )indicesvaluesdense_shape)	r   r   bincountcastshaperankr   r   r   )r
   depthr   dtypecount_weightsresultoutput_shape
batch_sizes           r   sparse_bincountr"      s    Y#    F WVU##F|AxXf%%a(
"E*_v},  F Mr   c           	      T   t           j                            | ||||d|          }| j        j        dk    r)|                    t          j        |f                     nH| j                                        d         }|                    t          j        ||f                     |S )z+Apply binary or count encoding to an input.r   )r   r   r   r   r   r   r   r   )r   mathr   r   r   	set_shapeTensorShapeas_list)r
   r   r   r   r   r   r!   s          r   dense_bincountr(   "   s    W#   F |A112222\))++A.
U(;<<===Mr   float32Fc           	         |dk    r't          j        t          j        | |                    S | j        }| j        j        dk    rt          | d          } |dk    r!| j        d         dk    rt          | d          } | j        j        dk    r#t          d| d| d	| j        j         d
          |dv }|rt          | ||||          }	nt          | ||||          }	|dk    r|	S |t          d| d|           |rLt          j	        ||	j
        dddf                   }
t          j        |	j
        |
|	j        z  |	j                  S t          j        t          j        |	|j                  |          S )z3Encodes categoical inputs according to output_mode.intr   r   one_hotr      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_hotr,   tf_idfNzTWhen output mode is `'tf_idf'`, idf_weights must be provided. Received: output_mode=z and idf_weights=)r   identityr   r   r   r	   
ValueErrorr"   r(   gatherr   r   r   r   multiplyr   )r
   output_moder   r   r   r   idf_weightsoriginal_shaper   	bincountsvalue_weightss              r   encode_categorical_inputsr:   5   s    e{276511222\N|AVR((i<q   ,,F |1F*5F FF F 281BF F F
 
 	
  #;;M 
#E=%
 
		 #E=%
 
	 hQ%0Q QCNQ Q
 
 	

  O	+y/@B/GHHI,,!
 
 	
 {279k.?@@+NNNr   c                    t          | t          j                  r| }nkt          | t          j        j                  r| j        }nDt          | d          r2t          | d          r"t          j        | j        | j	        |          }ndS |s|S |j        }|j
        |j
        dk    r|S |                                }d|d<   t          j        |          }||_        |S )z?Returns a `TensorSpec` given a single `Tensor` or `TensorSpec`.r   r   )r   r   nameNr   )r   r   TypeSpec__internal__CompositeTensor
_type_spechasattr
TensorSpecr   r   r   r'   r&   _shape)tdynamic_batchr<   specr   
shape_lists         r   get_tensor_specrH   r   s    !R[!! 	Ar6	7	7 |	G		 G!4!4 }17!'EEEt JEzUZ1__JJqMN:&&EDKKr   c                     t          | t          j        t          j        t          j        f          st          j        | |          } | | j        |k    rt          j        | |          } | S )z<Ensures the input is a Tensor, SparseTensor or RaggedTensor.)r   r   Tensorr   RaggedTensorconvert_to_tensorr   r   )r
   r   s     r   ensure_tensorrM      s[    fry"/2?KLL 5%fe44V\U22''Mr   )N)r)   FNN)FN)	keras.src.utils.module_utilsr   r   r	   r"   r(   r:   rH   rM    r   r   <module>rP      s    9 9 9 9 9 9, , ,   ,   . :O :O :O :Oz   4     r   