
    &`iZ+                     ,   d Z ddlmZ ddlZddlZddlZddlZddlZddlZ	ddl
mZ ddlmZ ej        dk    r ej        d           n4ddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ dd	lm Z  dd
l!m"Z" ddl#m$Z$ d Z%d2dZ&d3dZ'd Z(d2dZ) G d dej*                  Z+e,dk    rddlZddl-m.Z.  ej/                    Z0e01                    ddd           e02                                \  Z3Z4e3j5        r ej6        d           dZ7 e.e7d d d d           Z8 ej9        e+ ej:        d!d"e3j5        rd#nd$i ej;        e7d%d&          '           ej<        e8d%d(dd)*          e3j5        d+d,d-d.d/d01          Z=e=>                                 dS dS )4zExample training a memory neural net on the bAbI dataset.

References Keras and is based off of https://keras.io/examples/babi_memnn/.
    )print_functionN)FileLock)tune)      )
LSTM
ActivationDenseDropout	EmbeddingInputPermuteaddconcatenatedot)Model
Sequential
load_model)RMSprop)pad_sequences)get_filec                 @    d t          j        d|           D             S )zReturn the tokens of a sentence including punctuation.

    >>> tokenize("Bob dropped the apple. Where is the apple?")
    ["Bob", "dropped", "the", "apple", ".", "Where", "is", "the", "apple", "?"]
    c                 b    g | ],}||                                 |                                 -S  )strip.0xs     w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/examples/pbt_memnn_example.py
<listcomp>ztokenize.<locals>.<listcomp>/   s2    LLL!AL!''))LAGGIILLL    z(\W+)?)resplit)sents    r   tokenizer%   )   s%     MLrx	488LLLLr!   Fc                 P  
 g }g 
| D ]}|                     d                                          }|                    dd          \  }}t          |          }|dk    rg 
d|v r|                    d          \  }}}t	          |          }|r6t          t          |                                          }
fd|D             }nd 
D             }|                    |||f           
                    d           t	          |          }	
                    |	           |S )zParse stories provided in the bAbi tasks format

    If only_supporting is true, only the sentences
    that support the answer are kept.
    zutf-8    	c                 &    g | ]}|d z
           S r(   r   )r   istorys     r   r    z!parse_stories.<locals>.<listcomp>F   s!    ===QE!a%L===r!   c                     g | ]}||S r   r   r   s     r   r    z!parse_stories.<locals>.<listcomp>I   s    222!2A222r!    )decoder   r#   intr%   mapappend)linesonly_supportingdatalinenidqa
supportingsubstoryr$   r-   s             @r   parse_storiesr=   2   s=    DE  {{7##))++JJsA&&	T#hh!88E4<<#zz$//Aq*A 3 j&6&6&8&899
====*=== 32u222KK1a()))LLD>>DLLKr!   c                 t    d t          |                                 |          }fd|D             }|S )zGiven a file name, read the file,
    retrieve the stories,
    and then convert the sentences into a single story.

    If max_length is supplied,
    any stories longer than max_length tokens will be discarded.
    c                 "    t          | g           S N)sum)r6   s    r   flattenzget_stories.<locals>.flatten[   s    4}}r!   )r5   c                 p    g | ]2\  }}}rt           |                    k     $ |          ||f3S r   len)r   r-   r9   answerrB   
max_lengths       r   r    zget_stories.<locals>.<listcomp>_   s]       E1f !00:== 
F#===r!   )r=   	readlines)fr5   rG   r6   rB   s     ` @r   get_storiesrJ   R   sc       HHHD     $  D
 Kr!   c                 F    g g g }}}|D ]c\  }}}	|                      fd|D                        |                      fd|D                        |                      |	                    dt          ||          t          ||          t          j        |          fS )Nc                      g | ]
}|         S r   r   r   wword_idxs     r   r    z%vectorize_stories.<locals>.<listcomp>j   s    222qx{222r!   c                      g | ]
}|         S r   r   rM   s     r   r    z%vectorize_stories.<locals>.<listcomp>k   s    333333r!   )maxlen)r3   r   nparray)
rO   story_maxlenquery_maxlenr6   inputsqueriesanswersr-   queryrF   s
   `         r   vectorize_storiesrZ   g   s    !2rWGF $ ) )uf2222E2223333333U333444x'((((f\222gl333
 r!   c                    	 t          dd          }n# t          $ r t          d            w xY wddd}d}||         }t          j        |          5 }t          |                    |                    d	                              }t          |                    |                    d
                              }d d d            n# 1 swxY w Y   | r|d d         }|d d         }||fS )Nzbabi-tasks-v1-2.tar.gzzBhttps://s3.amazonaws.com/text-datasets/babi_tasks_1-20_v1-2.tar.gz)originzError downloading dataset, please download it manually:
$ wget http://www.thespermwhale.com/jaseweston/babi/tasks_1-20_v1-2.tar.gz
$ mv tasks_1-20_v1-2.tar.gz ~/.keras/datasets/babi-tasks-v1-2.tar.gzz8tasks_1-20_v1-2/en-10k/qa1_single-supporting-fact_{}.txtz6tasks_1-20_v1-2/en-10k/qa2_two-supporting-facts_{}.txt)single_supporting_fact_10ktwo_supporting_facts_10kr]   traintest@   )r   	ExceptionprinttarfileopenrJ   extractfileformat)finish_fastpath
challengeschallenge_type	challengetartrain_storiestest_storiess           r   	read_datarp   t   sw   $*
 
 

    S	
 	
 	
 	'(%& J 2N>*I	d		 Ns#COOI4D4DW4M4M$N$NOO"3??93C3CF3K3K#L#LMMN N N N N N N N N N N N N N N  )%crc*#CRC(,&&s    /A+CCCc                   ,    e Zd Zd Zd Zd Zd Zd ZdS )
MemNNModelc                 &   t                      }| j        | j        z   D ]\  }}}|t          ||z   |gz             z  } t          |          }t	          |          dz   }t          d | j        | j        z   D                       }t          d | j        | j        z   D                       }d t          |          D             }t          |||| j                  \  | _        | _	        | _
        t          |||| j                  \  | _        | _        | _        t          |f          }	t          |f          }
t                      }|                    t#          |d                     |                    t%          | j                            dd                               t                      }|                    t#          ||                     |                    t%          | j                            dd                               t                      }|                    t#          |d|	                     |                    t%          | j                            dd                                ||	          } ||	          } ||
          }t+          ||gd
          } t-          d          |          }t!          ||g          } t/          d          |          }t1          ||g          } t3          d          |          } t%          | j                            dd                    |          } t5          |          |          } t-          d          |          }t7          |	|
g|          }|S )z$Helper method for creating the modelr(   c              3   <   K   | ]\  }}}t          |          V  d S r@   rD   )r   r   _s      r   	<genexpr>z)MemNNModel.build_model.<locals>.<genexpr>   .      XXgaA3q66XXXXXXr!   c              3   <   K   | ]\  }}}t          |          V  d S r@   rD   )r   ru   r   s      r   rv   z)MemNNModel.build_model.<locals>.<genexpr>   rw   r!   c                      i | ]\  }}||d z   S r+   r   )r   r,   cs      r   
<dictcomp>z*MemNNModel.build_model.<locals>.<dictcomp>   s"    :::AAq1u:::r!   ra   )	input_dim
output_dimdropout333333?)r|   r}   input_length)   r   )axessoftmax)r   r(       )setrn   ro   sortedrE   max	enumeraterZ   inputs_trainqueries_trainanswers_traininputs_testqueries_testanswers_testr   r   r   r   r   configgetr   r	   r   r   r   r
   r   )selfvocabr-   r9   rF   
vocab_sizerT   rU   rO   input_sequencequestioninput_encoder_minput_encoder_cquestion_encoderinput_encoded_minput_encoded_cquestion_encodedmatchresponsemodels                       r   build_modelzMemNNModel.build_model   s    $ 2T5F F 	/ 	/E1fSfX-...EEu ZZ!^
XX1CdFW1WXXXXXXX1CdFW1WXXXXX::5)9)9:::DUlL$2DE
 E
A4-t/A BSlL$2CB
 B
>$+T->
 //,)) %,,I
rJJJKKKGDKOOIs$C$CDDEEE %,,I
|TTTUUUGDKOOIs$C$CDDEEE &<<
rUUU	
 	
 	
 	WT[__Y%D%DEEFFF
 */.99)/.99++H55
 _&67fEEE%
9%%e,, O$
 
 #76??8,, h(89:: b&!! :C8899&AA"z""6**&I&&v.. ~x0&99r!   c                    t          t          j                            d                    5  t	          |d                   \  | _        | _        d d d            n# 1 swxY w Y   |                                 }t          | j	        
                    dd          | j	        
                    dd                    }|                    |dd	g
           || _        d S )Nz~/.tune.lockrh   lrgMbP?rho?)r   r   sparse_categorical_crossentropyaccuracy)	optimizerlossmetrics)r   osri   
expanduserrp   rn   ro   r   r   r   r   compiler   )r   r   r   rmsprops       r   setupzMemNNModel.setup   s"   bg((8899 	U 	U4=f]>S4T4T1D 1	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U 	U  ""{tT**s0K0K
 
 
 	2L 	 	
 	
 	

 


s   #AA #A c           	      X   | j                             | j        | j        g| j        | j                            dd          | j                            dd          | j        | j        g| j	        fd           | j         
                    | j        | j        g| j        d          \  }}d|iS )	N
batch_sizer   epochsr(   r   )r   r   validation_dataverbose)r   mean_accuracy)r   fitr   r   r   r   r   r   r   r   evaluate)r   ru   r   s      r   stepzMemNNModel.step   s    
 23{|R88;??8Q//".0ABDDUV 	 	
 	
 	
 j)) 23T5GQR * 
 
8  **r!   c                 D    |dz   }| j                             |           d S Nz/model)r   saver   checkpoint_dir	file_paths      r   save_checkpointzMemNNModel.save_checkpoint  s&    "X-	
	"""""r!   c                 <    | ` |dz   }t          |          | _         d S r   )r   r   r   s      r   load_checkpointzMemNNModel.load_checkpoint  s$    J"X-		**


r!   N)__name__
__module____qualname__r   r   r   r   r   r   r!   r   rr   rr      sc        N N N`  + + +# # #+ + + + +r!   rr   __main__)PopulationBasedTrainingz--smoke-test
store_truezFinish quickly for testing)actionhelpr   )num_cpusc                  B    t           j                            dd          S Nr   r(   rR   randomuniformr   r!   r   <lambda>r   $  s    ry00A66 r!   c                  H    dt           j                            dd          z  S )N
   ir   )rR   r   randintr   r!   r   r   r   %  s    "	 1 1#q 9 99 r!   c                  B    t           j                            dd          S r   r   r   r!   r   r   r   &  s    29,,Q22 r!   )r~   r   r   )perturbation_intervalhyperparam_mutationspbt_babi_memnntraining_iteration   d   r   )checkpoint_frequencycheckpoint_score_attributenum_to_keep)namestopcheckpoint_configr   T)	schedulermetricmodenum_samplesreuse_actorsr   r(   r   g{Gz?r   )rh   r   r   r~   r   r   )
run_configtune_configparam_space)F)FN)?__doc__
__future__r   argparser   r"   sysrd   numpyrR   filelockr   rayr   version_infoexittensorflow.keras.layersr   r	   r
   r   r   r   r   r   r   r   tensorflow.keras.modelsr   r   r   tensorflow.keras.optimizersr   'tensorflow.keras.preprocessing.sequencer   tensorflow.keras.utilsr   r%   r=   rJ   rZ   rp   	Trainablerr   r   ray.tune.schedulersr   ArgumentParserparseradd_argumentparse_known_argsargsru   
smoke_testinitr   pbtTuner	RunConfigCheckpointConfig
TuneConfigtunerr   r   r!   r   <module>r     s   
 & % % % % %  				 				 



                 wCHQKKKK                        FEEEEEEEEE333333EEEEEE//////M M M   @   *
 
 
#' #' #' #'Lv+ v+ v+ v+ v+ v+ v+ v+r zJJJ;;;;;;$X$&&F
|2N     %%''GD! !
!
!3669922
 
  C DJ!4>!&T_(E#F3d3%:+:  
 
 
 $DO"
 
 
  ?
 
%  E6 
IIKKKKKe r!   