
    &`i                        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 d dl	m
Z d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ ej                            d
d          Z G d dej                  Z G d dej                  ZddZddZedk    rid dl Z  e j!                    Z"e"#                    ddd           e"$                                \  Z%Z&e%j'        r eddd            dS  eddd            dS dS )    N)load_dataset)FileLock)
functional)
DataLoader)Accuracy)
transforms)tune)TuneReportCheckpointCallbackPATH_DATASETS.c                   F     e Zd Zefdedef fdZd Zd	dZd Z	d Z
 xZS )
MNISTDataModule
batch_sizedata_dirc                     t                                                       || _        t          j        t          j                    t          j        dd          g          | _        || _        d| _	        d| _
        d S )N)g_)Ǻ?)gGr?)      r   
   )super__init__r   r   ComposeToTensor	Normalize	transformr   dimsnum_classes)selfr   r   	__class__s      t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/examples/mnist_ptl_mini.pyr   zMNISTDataModule.__init__   ss     #+#%%$Y	::
 
 %	    c                     t          t          j                            d                    5  t	          d| j                   d d d            d S # 1 swxY w Y   d S )N~/.data.lockylecun/mnist	cache_dir)r   ospath
expanduserr   r   r   s    r   prepare_datazMNISTDataModule.prepare_data!   s    bg((8899 	B 	B4=AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AAANc                      t          d j                  } fdfd|d         D              _        fd|d         D              _        d S )Nr#   r$   c                 J                         | d                   | d         fS )Nimagelabel)r   )sampler   s    r   transform_fnz+MNISTDataModule.setup.<locals>.transform_fn)   s"    NN6'?33VG_EEr    c                 &    g | ]} |          S  r2   .0r/   r0   s     r   
<listcomp>z)MNISTDataModule.setup.<locals>.<listcomp>,   s#    PPPVLL00PPPr    trainc                 &    g | ]} |          S r2   r2   r3   s     r   r5   z)MNISTDataModule.setup.<locals>.<listcomp>-   s#    MMM6,,v..MMMr    test)r   r   mnist_train	mnist_val)r   stagedatasetr0   s   `  @r   setupzMNISTDataModule.setup&   s}    ~GGG	F 	F 	F 	F 	F QPPPww?OPPPMMMMWV_MMMr    c                 8    t          | j        | j                  S N)r   )r   r9   r   r)   s    r   train_dataloaderz MNISTDataModule.train_dataloader/   s    $*tGGGGr    c                 8    t          | j        | j                  S r?   )r   r:   r   r)   s    r   val_dataloaderzMNISTDataModule.val_dataloader2   s    $.T_EEEEr    N)__name__
__module____qualname__r   intstrr   r*   r=   r@   rB   __classcell__r   s   @r   r   r      s        8E  3 #      B B B
N N N NH H HF F F F F F Fr    r   c                   >     e Zd Zd fd	Zd Zd Zd Zd Zd Z xZ	S )	LightningMNISTClassifierNc                    t          t          |                                            |pt          j                    | _        |d         | _        |d         |d         }}|d         | _        t          j	        
                    d|          | _        t          j	        
                    ||          | _        t          j	        
                    |d          | _        t          ddd	          | _        d S )
Nlrlayer_1layer_2r   i  r   
multiclassr   )taskr   top_k)r   rL   r   r&   getcwdr   rN   r   torchnnLinearrO   rP   layer_3r   accuracy)r   configr   rO   rP   r   s        r   r   z!LightningMNISTClassifier.__init__7   s    &--66888 /BIKK,!),fY.? . xw88xw88xw33 l!LLLr    c                 ^   |                                 \  }}}}|                    |d          }|                     |          }t          j        |          }|                     |          }t          j        |          }|                     |          }t          j        |d          }|S )Nr   )dim)sizeviewrO   rU   relurP   rX   log_softmax)r   xr   channelswidthheights         r   forwardz LightningMNISTClassifier.forwardE   s    ./ffhh+
HeVFF:r""LLOOJqMMLLOOJqMMLLOOaQ'''r    c                 r    t           j                            |                                 | j                  S )N)rN   )rU   optimAdam
parametersrN   r)   s    r   configure_optimizersz-LightningMNISTClassifier.configure_optimizersP   s)    { 1 1dg>>>r    c                     |\  }}|                      |          }t          j        ||          }|                     ||          }|                     d|           |                     d|           |S )Nzptl/train_losszptl/train_accuracy)rf   Fnll_lossrY   log)r   train_batch	batch_idxrb   ylogitslossaccs           r   training_stepz&LightningMNISTClassifier.training_stepS   sm    1az&!$$mmFA&&!4(((%s+++r    c                     |\  }}|                      |          }t          j        ||          }|                     ||          }||dS )N)val_lossval_accuracy)rf   rm   rn   rY   )r   	val_batchrq   rb   rr   rs   rt   ru   s           r   validation_stepz(LightningMNISTClassifier.validation_step\   sL    1az&!$$mmFA&& #666r    c                    t          j        d |D                                                       }t          j        d |D                                                       }|                     d|           |                     d|           d S )Nc                     g | ]
}|d          S )rx   r2   r4   rb   s     r   r5   zALightningMNISTClassifier.validation_epoch_end.<locals>.<listcomp>d   s    ???!*???r    c                     g | ]
}|d          S )ry   r2   r~   s     r   r5   zALightningMNISTClassifier.validation_epoch_end.<locals>.<listcomp>e   s    BBBQq0BBBr    ptl/val_lossptl/val_accuracy)rU   stackmeanro   )r   outputsavg_lossavg_accs       r   validation_epoch_endz-LightningMNISTClassifier.validation_epoch_endc   s    ;??w???@@EEGG+BB'BBBCCHHJJ***#W-----r    rC   )
rD   rE   rF   r   rf   rk   rv   r{   r   rI   rJ   s   @r   rL   rL   6   s        M M M M M M	 	 	? ? ?  7 7 7. . . . . . .r    rL   r   c           
         t           j                            d          }t          | |          }t	          t           j                            d                    5  t          || d                   }d d d            n# 1 swxY w Y   ddd}t          j        |t          j
        |          dt          |d	d
          g          }|                    ||           d S )Nz./datar"   r   )r   r   r   r   )rt   ru   Fvalidation_end)onsave_checkpoints)
max_epochsgpusenable_progress_bar	callbacks)r&   r'   abspathrL   r   r(   r   plTrainermathceilr
   fit)rZ   
num_epochsnum_gpusr   modeldmmetricstrainers           r   train_mnist_tuner   j   s1   wx((H$VX66E	"'$$^44	5	5 Q Qh6,;OPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q%.@AAGjYx  !(,u  

 
 
G KKrs   B  BBc                    t          j        g d          t          j        g d          t          j        dd          t          j        g d          d}t          j        t          ||          }t          j        t          j        |d|d	          t          j        d
d|           t          j        d          |          }|	                                }t          d|                                j                   d S )N)    @      )r   r      g-C6?g?)rO   rP   rN   r   )r   r   r   )cpugpu)	resourcesrt   min)metricmodenum_samples
tune_mnist)name)tune_config
run_configparam_spacez!Best hyperparameters found were: )r	   choice
loguniformwith_parametersr   Tunerwith_resources
TuneConfig	RunConfigr   printget_best_resultrZ   )r   r   gpus_per_trialrZ   	trainabletunerresultss          r   r   r   ~   s   ;}}}--;~~~..odD))k---00	 F $Z.  I JI>1R1RSSSO#
 
 

 >
 
 
   E iikkG	
-w/F/F/H/H/OPPPPPr    __main__z--smoke-test
store_truezFinish quickly for testing)actionhelpr   )r   r   r   )r   r   )r   r   r   )(r   r&   pytorch_lightningr   rU   datasetsr   filelockr   torch.nnr   rm   torch.utils.datar   torchmetricsr   torchvisionr   rayr	   &ray.tune.integration.pytorch_lightningr
   environgetr   LightningDataModuler   LightningModulerL   r   r   rD   argparseArgumentParserparseradd_argumentparse_known_argsargs_
smoke_testr2   r    r   <module>r      s    				      ! ! ! ! ! !       $ $ $ $ $ $ ' ' ' ' ' ' ! ! ! ! ! ! " " " " " "       O O O O O O
44 F  F  F  F  Fb,  F  F  FF1. 1. 1. 1. 1.r1 1. 1. 1.h   (Q Q Q Q8 zOOO$X$&&F
|2N     %%''GD! D
qQqAAAAAA
rbCCCCCC r    