
    6bi                         S r SSKrSSKrSSKJs  Jr  SSKJr	  SSK
Jr   " S S\R                  R                  5      rg)z/Test related utilities for KPL + tf.distribute.    N)string_lookupc                   L    \ rS rSrSr/ SQrSS/rS rS rS r	S	 r
S
 rS rSrg)DistributeKplTestUtils   z&Utils for test of tf.distribute + KPL.)avengerironmanbatmanhulk	spidermankingkongwonder_womanyesnoc                    U(       a`  [         R                  " SS9nUR                  U R                  5        [         R                  " SSS9nUR                  U R                  5        O?[         R                  " U R                  SS9n[         R                  " U R                  SSS9n[
        R                  R                  S[        R                  S	S
S9nU" U5      n[
        R                  " SU0U5      n[
        R                  R                  S[        R                  SS9nU" U5      n[
        R                  " SU0U5      n	Xi4$ )aZ  Function that defines KPL used for unit tests of tf.distribute.

Args:
  use_adapt: if adapt will be called. False means there will be
    precomputed statistics.

Returns:
  feature_mapper: a simple keras model with one keras StringLookup layer
  which maps feature to index.
  label_mapper: similar to feature_mapper, but maps label to index.

   )num_oov_indicesr   N)r   
mask_token)
vocabularyr   )r   r   r      featureT)shapedtypenameraggedfeatures)r   labelr   r   r   )r   StringLookupadaptFEATURE_VOCABLABEL_VOCABkeraslayersInputtfstringModel)
self	use_adaptfeature_lookup_layerlabel_lookup_layerraw_feature_inputfeature_id_inputfeature_mapperraw_label_inputlabel_id_inputlabel_mappers
             [/home/james-whalen/.local/lib/python3.13/site-packages/tf_keras/src/utils/kpl_test_utils.pydefine_kpls_for_training/DistributeKplTestUtils.define_kpls_for_training(   s5    #0#=#=a#P  &&t'9'9:!.!;!; !d" $$T%5%56#0#=#=--q$  "/!;!;++Q4" "LL..biii / 
 00AB*+-=
  ,,,,biig - 
 ,O<{{G_#=~N++    c                 f  ^ ^^ U 4S jn[         R                  R                  R                  U[         R                  " S/[         R
                  5      [         R                  " S/[         R
                  5      S.S9R                  S5      R                  S5      nUR                  UU4S j5      nU$ )	a6  Function that generates dataset for test of tf.distribute + KPL.

Args:
  feature_mapper: a simple keras model with one keras StringLookup layer
    which maps feature to index.
  label_mapper: similar to feature_mapper, but maps label to index.

Returns:
  Generated dataset for test of tf.distribute + KPL.

c               3      >#     [         R                  " TR                  S5      n TR                  S   U ;   a  S/OS/nXS.v   MB  7f)Nr   r   r   r   r   r   )randomsampler!   )r   r   r)   s     r3   feature_and_label_gen@DistributeKplTestUtils.dataset_fn.<locals>.feature_and_label_gena   sJ     !==););Q?#'#5#5a#8H#D4&#+<< s   AAr   r   r9   )output_signatured       c                 4   > ST" U S   5      0T" U S   5      4$ )Nr   r    )xr/   r2   s    r3   <lambda>3DistributeKplTestUtils.dataset_fn.<locals>.<lambda>u   s%    ^AjM:;QwZ(r6   )	r&   dataDatasetfrom_generator
TensorSpecr'   shufflebatchmap)r)   r/   r2   r<   raw_datasettrain_datasets   ```   r3   
dataset_fn!DistributeKplTestUtils.dataset_fnT   s    	= GGOO**% "qc299 =]]A3		:" +  WS\U2Y 	 $
 r6   c                 x   [         R                  R                  S[        R                  SS9n[         R                  R                  [        U R                  5      S-   SS9" U5      n[        R                  " USS9n[         R                  R                  SS	S
9" U5      n[         R                  " SU0U5      nU$ )z/A simple model for test of tf.distribute + KPL.r   model_inputr         )	input_dim
output_dimr   axissigmoid)units
activationr   )r#   r$   r%   r&   int64	Embeddinglenr!   reduce_meanDenser(   )r)   rR   
emb_outputdense_outputmodels        r3   define_model#DistributeKplTestUtils.define_model|   s     ll((bhh] ) 

 \\++$,,-1b , 


 ^^JQ7
||))i)H
 Z5|Dr6   c                 H    [         R                  " SSU R                  SS9nU$ )z/Create string reverse lookup layer for serving.r   NT)r   r   r   invert)r   r   r"   )r)   label_inverse_lookup_layers     r3   define_reverse_lookup_layer2DistributeKplTestUtils.define_reverse_lookup_layer   s/     &3%?%?''	&
" *)r6   c                    ^ [         R                  U4S j5       nUTl        UTl        UR	                  [         R
                  " S[         R                  SS95      $ )z-Create serving signature for the given model.c                 J  > [         R                  " U SS9n TR                  U 5      nT" U5      n[         R                  " USS9n[         R                  " [         R
                  " US5      [         R                  5      nTR                  U5      n[         R                  " USS9$ )Nr   rW   g      ?)r&   expand_dimsr/   squeezecastgreaterr\   rh   )raw_featurestransformed_featuresoutputsdecoded_outputsrc   s       r3   serve_fnADistributeKplTestUtils.create_serving_signature.<locals>.serve_fn   s    >>,Q?L#(#7#7#E 01Gjjq1Gggbjj#6AG#>>wGO::oA66r6   r   exampler   )r&   functionr/   rh   get_concrete_functionrI   r'   )r)   rc   r/   rh   ru   s    `   r3   create_serving_signature/DistributeKplTestUtils.create_serving_signature   sT    
 
	7 
	7  .+E(--MM2999E
 	
r6   c                 R   U R                  XU5      n[        R                  " U R                  5       S9nUR	                  USSU0S9  [
        R                  R                  R                  R                  U5      R                  S   nU" [        R                  " / SQ5      5      S   nU R                  UR                  5       R                  S5      S5        U" [        R                  " / S	Q5      5      S   nU R                  UR                  5       R                  S5      S5        g
)zTest save/load/serving model.)dirr&   serving_default)save_format
signatures)r   r   r   output_0zUTF-8)r   r   )r   r   unknownN)rz   tempfilemkdtempget_temp_dirsaver#   savinglegacy
load_modelr   r&   constantassertInnumpydecode)	r)   rc   r/   rh   
serving_fnsaved_model_dirloaded_serving_fnprediction0prediction1s	            r3   test_save_load_serving_model3DistributeKplTestUtils.test_save_load_serving_model   s   
 22#=

 #**t/@/@/BC

):6 	 	
 "LL//44??

*&(
 (KK9:

 	k'')009=I'KK9:

 	k'')009=Ir6   rB   N)__name__
__module____qualname____firstlineno____doc__r!   r"   r4   rO   rd   ri   rz   r   __static_attributes__rB   r6   r3   r   r      s8    0M $-K*,X&P$	*
,Jr6   r   )r   r:   r   tensorflow.compat.v2compatv2r&   tf_keras.srcsrcr#   !tf_keras.src.layers.preprocessingr   testTestCaser   rB   r6   r3   <module>r      s6    6   ! !  ;sJRWW-- sJr6   