
    ]i                        S r SSKrSSKrSSKJr  SSKrSSKJr  SSKrSSK	J
r
  SSKJr  SSKrSSKJr  SSKrSSKJr  S	S
KJr  S	SKJrJr  S	SKJr  S	SKJr  S	SKJr  S	SKJr  S	SKJ r   S	SK!J"r"  S	SK#J$r$  \RJ                  " \&5      r' " S S\RP                  5      r)S r*S r+S r,S!S jr-S!S jr.\" SSSS9S 5       r/S\R`                  ;   a$  \" \R`                  S   5      \/R                  l1        \&S :X  a  \/" 5         gg)"z Main training script entry point    N)Path)
hydra_main)GlobalHydra)	OmegaConf)nn)ConcatDataset   )distrib)get_wav_datasetsget_musdb_wav_datasets)DemucsHDemucs)HTDemucs)RepitchedWrapper)Solver)capture_init)random_subsetc                   <   ^  \ rS rSrSr\U 4S j5       rS rSrU =r	$ )TorchHDemucsWrapper$   zWrapper around torchaudio HDemucs implementation to provide the proper metadata
for model evaluation.
See https://pytorch.org/audio/stable/tutorials/hybrid_demucs_tutorial.htmlc                    > [         TU ]  5          SSKJn  UR                  S5      U l        UR                  S5      U l        US   U l        U" S0 UD6U l	        g ! [         a    [	        S5      ef = f)Nr   r   zAPlease upgrade torchaudio for using its implementation of HDemucs
sampleratesegmentsources )
super__init__torchaudio.modelsr   ImportErrorpopr   r   r   torch_hdemucs)selfkwargsTorchHDemucs	__class__s      I/mnt/rpi/tmp/demucs-venv-sys/lib/python3.13/site-packages/demucs/train.pyr   TorchHDemucsWrapper.__init__)   st    	cA !**\2zz),i()3F3  	cabb	cs   A A1c                 8    U R                   R                  U5      $ N)r"   forward)r#   mixs     r'   r+   TorchHDemucsWrapper.forward5   s    !!))#..    )r   r   r   r"   )
__name__
__module____qualname____firstlineno____doc__r   r   r+   __static_attributes____classcell__)r&   s   @r'   r   r   $   s'    R 	4 	4/ /r.   r   c                    [        U R                  R                  5      U R                  R                  U R                  R                  U R
                  =(       d    SU R                  R                  -  S.n[        [        [        [        S.U R                     n[        R                  " [        X R                  5      SS9nU" S0 UDUD6nU$ )N   )r   audio_channelsr   r   )demucshdemucshtdemucsr"   T)resolver   )listdsetr   channelsr   model_segmentr   r   r   r   r   modelr   to_containergetattr)argsextraklasskwrA   s        r'   	get_modelrH   9   s    		))*)),,ii**%%>TYY->->)>	E ,	
 jjE 
		jj 94	HB E R ELr.   c                    [        5       n/ n/ nU R                  5        Hm  u  pV[        US5      (       d  M  UR                  5       n[        US   5      nUR	                  U5      (       d   eU[        U5      -  nUR                  U5        Mo     U R                  5        H  n	X;  d  M
  UR                  U	5        M     UR                  SSU05        Un
UR                  R                  S:X  ar  [        R                  R                  U
UR                  R                  UR                  R                  UR                  R                  4UR                  R                  S9$ UR                  R                  S:X  ar  [        R                  R                  U
UR                  R                  UR                  R                  UR                  R                  4UR                  R                  S9$ [!        SUR                  R"                  5      e)Nmake_optim_groupparamsr   adam)lrbetasweight_decayadamwzInvalid optimizer %s)setnamed_moduleshasattrrJ   
isdisjointappend
parametersinsertoptimtorchAdamrM   momentumbeta2rO   AdamW
ValueError	optimizer)rA   rD   seen_paramsother_paramsgroupsnmodulegrouprK   paramrV   s              r'   get_optimizerrg   K   s   %KLF((*	6-..++-Ex)F$$[11113v;&KMM%  + !!##& $ MM!h-.Jzz6!{{zz}}::&&

(8(8900	   
 	
 
		W	${{  zz}}::&&

(8(8900	 ! 
 	
 /1E1EFFr.   c                    U R                   R                  (       a*  [        R                  " U R                   R                  5        U R                   R                  (       a  [        U R                   5      u  pO/ / p!U R                   R                  (       aW  [        U R                   5      u  p4[        U R                   R                  5      S::  a  [        X/5      n[        X$/5      nOUnUnU R                   R                  (       a  [        U R                   S5      u  p4U R                   R                  nUb7  [        U5      n[        U5      n[        S[        Xv-  SU-  S-
  -  5      5      nOSn[        U/U-  U/-   5      nU R                   R                  (       aM  Ub>  [        U5      n[!        [        XV-  SU-
  -  5      5      n	[        U[#        XI5      /5      nO[        X$/5      nU R                   R$                  b  [#        X R                   R$                  5      n[        U5      (       d   e[        U5      (       d   eX4$ )Nr7   wav2r	   )r>   backend
torchaudioset_audio_backend	use_musdbr   wavr   lenr   r   ri   wav2_weightmaxround
wav2_validintr   valid_samples)
rD   	train_set	valid_setextra_train_setextra_valid_setweightberepsn_kepts
             r'   get_datasetsr   m   s   yy$$TYY%6%67yy5dii@	9!29yy}}+;DII+F(tyy  !Q&%y&BCI%y&BCI'I'Iyy~~+;DIIv+N(&&IAO$Aq%Va 89:DD!9+"47H"HI	99!	NU6:V#<=>)o FG	 *9*FG	yy*!)YY-D-DE	y>>>y>>>r.   c                    [         R                  " 5         [        R                  " U R                  5        [        U 5      nU R                  R                  (       a  [        R                  U5        [        S UR                  5        5       5      S-  S-  n[        R                  SU5        [        US5      (       a@  UR                  S5      n[        R                  SX@R                  R                  -  S-  5        [         R"                  " S	5        [        R$                  R'                  5       (       a  UR%                  5         [)        X 5      nU R*                  [         R,                  -  S	:X  d   eU =R*                  [         R,                  -  sl        U(       a  [/        S X%U 5      $ [1        U 5      u  pgU R2                  R4                  R6                  (       a  / nS
U R                  R8                  ;   a5  UR;                  U R                  R8                  R=                  S
5      5        O[        R?                  S5        U R2                  R4                  R6                  (       a"  [A        U4S
U0U R2                  R4                  D6n[        R                  S[C        U5      [C        U5      5        [         RD                  " X`R*                  SU R                  RF                  SS9n	U R                  RH                  (       a,  [         RD                  " USSU R                  RF                  S9n
O5[         RD                  " XpR*                  SU R                  RF                  SS9n
XS.n[/        XXP5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr*   )numel).0ps     r'   	<genexpr>get_solver.<locals>.<genexpr>   s     7$6q$6s   r7   i   zSize: %.1f MBvalid_lengthr	   zField: %.1f msi  r   vocalszNo vocal source foundztrain/valid set size: %d %dT)
batch_sizeshufflenum_workers	drop_lastF)r   r   r   )trainvalid)%r
   initrY   manual_seedseedrH   miscshowloggerinfosumrV   rS   r   r>   r   sysexitcudais_availablerg   r   
world_sizer   r   augmentrepitchprobar   rU   indexwarningr   ro   loaderr   full_cv)rD   
model_onlyrA   mbfieldr_   rv   rw   r   train_loadervalid_loaderloaderss               r'   
get_solverr      sk   LLN	dii dOEyy~~E7E$4$4$677!;eCOR(5.))&&q)EKK(%))2F2F*F*MN zz  

 e*I??W///1444OO***OdEd33'-I||!!tyy(((MM$))++11(;<NN23<<%%(Z6ZT\\EYEYZI
KK-s9~s9~N>>ootII))T;L yy~~!U		--/ ~~//5		--? %<G ')22r.   c                    [         R                  " 5       nS nUR                  5       (       a  UR                  nUR	                  5         [
        R                  U 5      nUb!  UR	                  5         UR                  U5        UR                  SS9   [        UR                  U5      sS S S 5        $ ! , (       d  f       g = f)NT)stack)r   instanceis_initializedhydraclearmainget_xp_from_sig
initializeenterr   cfg)sigr   insthydxps        r'   get_solver_from_sigr      s    !D
Cjj

			c	"B


		"&&*- 
		s   B11
B?z../confconfigz1.1)config_pathconfig_nameversion_basec                    [         R                  R                  [        5      qS HR  n[	        U R
                  U5      nUc  M  [        U R
                  U[         R                  R                  U5      5        MT     S[        R                  S'   S[        R                  S'   U R                  R                  (       a#  [        R                  [        R                  5        [        R                  S[        R                   " 5       5        [        R#                  U 5        SSKJn  [        R#                  U" 5       R(                  5        [+        U 5      nUR-                  5         g )N)musdbrn   metadata1OMP_NUM_THREADSMKL_NUM_THREADSz*For logs, checkpoints and samples check %sr   )get_xp)r   utilsto_absolute_path__file__rC   r>   setattrosenvironr   verboser   setLevelloggingDEBUGr   getcwddebugdorar   r   r   r   )rD   attrvalr   solvers        r'   r   r      s     {{++H5H,dii&?DIItU[[%A%A#%FG -
 %(BJJ !$'BJJ !yy&
KK<biikJ
LL
LLF
LLNr.   _DORA_TEST_PATH__main__)F)2r3   r   r   pathlibr   r   r   r   r   hydra.core.global_hydrar   	omegaconfr   rY   r   rk   torch.utils.datar    r
   rn   r   r   r9   r   r:   r   r;   r   r   r   r   r   statesr   r   r   	getLoggerr/   r   Moduler   rH   rg   r   r   r   r   r   dirr   r.   r'   <module>r      s    '  	  
   /     *  9    %     			8	$/")) /*$GD' T53p. 	xeL M. 

"$567DIIM zF r.   