
    &`it$                        d dl Z d dlZd dlmZ d dlZd dlZd dlmZ d dl	mc m
Z d dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ  ej                    Zd Zd	 Z G d
 dej                  Z d Z!d"deddfdZ"d#dZ#e$dk    rd dl%Z% e%j&                    Z'e'(                    ddd           e'(                    ddd           e')                                \  Z*Z+e*j,        r" ej-        d            e#ddd d            dS  ej-        e*j.                    e#ddd !           dS dS )$    N)Dict)FileLock)random_split)tune)
Checkpoint)ASHASchedulerc                    t          j        t          j                    t          j        dd          g          }t	          t
          j                            d                    5  t          j	        
                    | dd|          }t          j	        
                    | dd|          }d d d            n# 1 swxY w Y   ||fS )N)gHPs?gec]?g~jt?)gۊe?ggDio?g|?5^?z~/.data.lockT)roottraindownload	transformF)
transformsComposeToTensor	Normalizer   ospath
expandusertorchvisiondatasetsCIFAR10)data_dirr   trainsettestsets       u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/examples/cifar10_pytorch.py	load_datar      s   "57OPP$  I 
"'$$^44	5	5 L L'//	 0 K K &.. / L L	L L L L L L L L L L L L L L L Ws   'AB::B>B>c                      t           j                            dddt          j                              } t           j                            dddt          j                              }| |fS )N   )       r    
   )num_classesr      )r   r   FakeDatar   r   )r   r   s     r   load_test_datar%   1   so    #,,[bJ4G4I4I -  H "++
KR:3F3H3H ,  G W    c                   &     e Zd Zd fd	Zd Z xZS )Netx   T   c                    t          t          |                                            t          j        ddd          | _        t          j        dd          | _        t          j        ddd          | _        t          j	        d|          | _
        t          j	        ||          | _        t          j	        |d          | _        d S )Nr            r#     r!   )superr(   __init__nnConv2dconv1	MaxPool2dpoolconv2Linearfc1fc2fc3)selfl1l2	__class__s      r   r1   zNet.__init__>   s    c4!!###Yq!Q''
LA&&	Yq"a((
9Z,,9R$$9R$$r&   c                    |                      t          j        |                     |                              }|                      t          j        |                     |                              }|                    dd          }t          j        |                     |                    }t          j        |                     |                    }|                     |          }|S )Nr/   )	r6   Frelur4   r7   viewr9   r:   r;   )r<   xs     r   forwardzNet.forwardG   s    IIafTZZ]]++,,IIafTZZ]]++,,FF2z""F488A;;F488A;;HHQKKr&   )r)   r*   )__name__
__module____qualname__r1   rF   __classcell__)r?   s   @r   r(   r(   =   sL        % % % % % %      r&   r(   c           	      
   t          | d         | d                   }d}t          j                                        r8d}t          j                                        dk    rt          j        |          }|                    |           t          j                    }t          j
        |                                | d         d          }t          j                    rt          j                    }|                                5 }t          j        t           j                            |d	                    \  }}|                    |           |                    |           d d d            n# 1 swxY w Y   | d
         rt)                      \  }	}
nt+          t,                    \  }	}
t/          t1          |	          dz            }t3          |	|t1          |	          |z
  g          \  }}t          j        j                            |t/          | d                   d| d
         rdnd          }t          j        j                            |t/          | d                   d| d
         rdnd          }t;          d          D ]}d}d}t=          |          D ]\  }}|\  }}|                    |          |                    |          }}|                                  ||          } |||          }|                                  |!                                 ||"                                z  }|dz  }|dz  dk    r tG          d|dz   |dz   ||z  fz             d}d}d}d}d}t=          |d          D ]\  }}t          j$                    5  |\  }}|                    |          |                    |          }} ||          }t          j%        |j        d          \  }}||&                    d          z  }|||k    '                                "                                z  } |||          }||(                                )                                z  }|dz  }d d d            n# 1 swxY w Y   	tU          j+                    5 }t           j                            |d	          } t          j,        |-                                |-                                f|            t]          j/        |          }!t          j0        ||z  ||z  d|!           d d d            n# 1 swxY w Y   tG          d           d S )Nr=   r>   cpucuda:0   lrg?)rO   momentumcheckpoint.pt
smoke_testg?
batch_sizeTr      rS   shufflenum_workersr!   g        i  i  z[%d, %5d] loss: %.3f)lossaccuracy)
checkpointzFinished Training)1r(   torchcudais_availabledevice_countr2   DataParalleltoCrossEntropyLossoptimSGD
parametersr   get_checkpointas_directoryloadr   r   joinload_state_dictr%   r   DATA_DIRintlenr   utilsdata
DataLoaderrange	enumerate	zero_gradbackwardstepitemprintno_gradmaxsizesumrL   numpytempfileTemporaryDirectorysave
state_dictr   from_directoryreport)"confignetdevice	criterion	optimizerloaded_checkpointloaded_checkpoint_dirmodel_stateoptimizer_stater   r   test_abstrain_subset
val_subsettrainloader	valloaderepochrunning_lossepoch_stepsirn   inputslabelsoutputsrX   val_loss	val_stepstotalcorrect_	predictedtemp_checkpoint_dirr   rZ   s"                                     r   train_cifarr   S   s   
fTlF4L
)
)CFz   ':""$$q((/#&&CFF6NNN#%%I	#..**vd|cJJJI  7 /11++-- 	71F+0:2ODD, ,(K ,,,%%o666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 l 0*,,''%h//'3x==3&''H+8S]]X56 8  8L* +"--vl+,,-4AA1	 .  K  ++vl+,,-4AA1	 ,  I r : : -- 	# 	#GAt!NFF#YYv..		&0A0AFF !!! c&kkG9Wf--DMMOOONN DIIKK'L1K4x4,	1q50<{0J0L L M M M" 	 A.. 	 	GAt  !%!'6!2!2FIIf4E4E#f++$yq999Q'I/4466;;=== y&11DHHJJ,,...Q	              $ (** 		.A7<< 3_EEDJ!!9#7#7#9#9:D   $23FGGJK"Y.Wu_MM%   		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 

s9   A E22E69E6CRR	R"BT==U	U	Fr   rZ   r   c                 .   t          | d         | d                   }t          j                                        rdnd}|                    |           |                                5 }t          j                            |d          }t          j	        |          \  }}|
                    |           d d d            n# 1 swxY w Y   |rt                      \  }	}
nt          t                    \  }	}
t          j        j                            |
ddd	          }d
}d
}t          j                    5  |D ]}|\  }}|                    |          |                    |          }} ||          }t          j        |j        d          \  }	}||                    d
          z  }|||k                                                                    z  }	 d d d            n# 1 swxY w Y   t-          d                    ||z                       d S )Nr=   r>   rM   rL   rQ      Fr.   rU   r   rN   z Best trial test set accuracy: {})r(   r[   r\   r]   r`   rf   r   r   rh   rg   ri   r%   r   rj   rm   rn   ro   rw   rx   ry   rz   ru   rv   format)r   rZ   rR   best_trained_modelr   checkpoint_dircheckpoint_pathr   r   r   r   
testloaderr   r   rn   imagesr   r   r   s                      r   test_best_modelr      sw   VD\6$<880022=XXF&!!!		 	 	"	" 8n',,~GG',z/'B'B$_**;7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8
  )#%%
77x((
7!,,Au! - = =J GE	 : : 	: 	:D!NFF#YYv..		&0A0AFF((00G 9W\155LAyV[[^^#E	V+002277999GG	:: : : : : : : : : : : : : : : 

,
3
3GeO
D
DEEEEEs&   (ACCC6B"G%%G),G)r!   r.   c           	         t          j        d           t          j        d           t          j        dd          t          j        g d          |d}t	          |dd	          }t          j        t          j        t          j        t                    d|d
          t          j	        dd| |          |          }|
                                }|                    dd          }t          d                    |j                             t          d                    |j        d                              t          d                    |j        d                              t!          |j        |j        |           d S )Nc                 H    dt           j                            dd          z  S Nr.   	   nprandomrandintr   s    r   <lambda>zmain.<locals>.<lambda>       bi.?.?1.E.E)E r&   c                 H    dt           j                            dd          z  S r   r   r   s    r   r   zmain.<locals>.<lambda>   r   r&   g-C6?g?)r.   r   rT   r#   )r=   r>   rO   rS   rR   rN   r.   )max_tgrace_periodreduction_factor)rL   gpu)	resourcesrX   min)metricmodenum_samples	scheduler)tune_configparam_spacezBest trial config: {}z$Best trial final validation loss: {}z(Best trial final validation accuracy: {}rY   )rR   )r   sample_from
loguniformchoicer   Tunerwith_resourceswith_parametersr   
TuneConfigfitget_best_resultrv   r   r   metricsr   rZ   )	r   max_num_epochsgpus_per_trialrR   r   r   tunerresultsbest_results	            r   mainr      s   EEFFEEFFodD))k---00  F   I
 J --77	
 	
 	
 O#	
 
 
   E iikkG))&%88K	
!
(
();
<
<===	
0
7
7F#% % & & &	
4
;
;J') ) * * * K&(>:VVVVVVr&   __main__z--smoke-test
store_truezFinish quickly for testing)actionhelpz--ray-addressz:Address of Ray cluster for seamless distributed execution.)r   required)num_cpusrN   T)r   r   r   rR   )r   r   r   )F)r!   r!   r.   F)/r   r|   typingr   r{   r   r[   torch.nnr2   torch.nn.functional
functionalrB   torch.optimrb   r   torchvision.transformsr   filelockr   torch.utils.datar   rayr   ray.tuner   ray.tune.schedulersr   mkdtemprj   r   r%   Moduler(   r   r   r   rG   argparseArgumentParserparseradd_argumentparse_known_argsargsr   rR   initray_address r&   r   <module>r      s  
 
			                                      + + + + + +       ) ) ) ) ) ) 



             - - - - - - 8  &      ")   ,h h hZF FD Fl F F F FF"W "W "W "WP zOOO$X$&&F
|2N  P P P
I     %%''GD! B!1Q4PPPPPP!"""BqAAAAAA% r&   