
    mi                         d Z ddlZddlZddlmZ ddlZddlmZ ddlZddl	m
Z
 ddlmZ ddl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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jJ                  e&      Z' G d dejP                        Z)d Z*d Z+d Z,d!dZ-d!dZ. eddd      d        Z/dej`                  v r$ eej`                  d         e/j                  _1        e&d k(  r e/        yy)"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                   2     e Zd ZdZe fd       Zd Z xZS )TorchHDemucsWrapperzWrapper around torchaudio HDemucs implementation to provide the proper metadata
    for model evaluation.
    See https://pytorch.org/audio/stable/tutorials/hybrid_demucs_tutorial.htmlc                     t         |           	 ddlm} |j                  d      | _        |j                  d      | _        |d   | _         |di || _	        y # t        $ r t	        d      w xY w)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      F/var/www/stems/demucs_env/lib/python3.12/site-packages/demucs/train.pyr   zTorchHDemucsWrapper.__init__)   st    	cA !**\2zz),i()3F3  	cabb	cs   A A0c                 8    | j                   j                  |      S N)r!   forward)r"   mixs     r&   r)   zTorchHDemucsWrapper.forward5   s    !!))#..    )__name__
__module____qualname____doc__r   r   r)   __classcell__)r%   s   @r&   r   r   $   s"    R 	4 	4/r+   r   c                    t        | j                  j                        | j                  j                  | j                  j                  | j
                  xs d| j                  j                  z  d}t        t        t        t        d| j                     }t        j                  t        | | j                        d      } |di ||}|S )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kwr<   s        r&   	get_modelrC   9   s    		))*)),,ii**%%>TYY->->)>	E ,	
 jjE 
		djj 94	HB E R ELr+   c                    t               }g }g }| j                         D ]b  \  }}t        |d      s|j                         }t        |d         }|j	                  |      sJ |t        |      z  }|j                  |       d | j                         D ]  }	|	|vs|j                  |	        |j                  dd|i       |}
|j                  j                  dk(  rut        j                  j                  |
|j                  j                  |j                  j                  |j                  j                  f|j                  j                        S |j                  j                  dk(  rut        j                  j                  |
|j                  j                  |j                  j                  |j                  j                  f|j                  j                        S t!        d|j                  j"                        )Nmake_optim_groupparamsr   adam)lrbetasweight_decayadamwzInvalid optimizer %s)setnamed_moduleshasattrrE   
isdisjointappend
parametersinsertoptimtorchAdamrH   momentumbeta2rJ   AdamW
ValueError	optimizer)r<   r?   seen_paramsother_paramsgroupsnmodulegrouprF   paramrQ   s              r&   get_optimizerrb   K   s   %KLF((* !	66-.++-Ex)F$$[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                 ^   | j                   j                  r)t        j                  | j                   j                         | j                   j                  rt        | j                         \  }}ng g }}| j                   j                  rYt        | j                         \  }}t        | j                   j                        dk  rt        ||g      }t        ||g      }n|}|}| j                   j                  rt        | j                   d      \  }}| j                   j                  }|8t        |      }t        |      }t        dt        ||z  d|z  dz
  z              }nd}t        |g|z  |gz         }| j                   j                  rO|@t        |      }t!        t        ||z  d|z
  z              }	t        |t#        ||	      g      }nt        ||g      }| j                   j$                   t#        || j                   j$                        }t        |      sJ t        |      sJ ||fS )Nr2   wav2r	   )r9   backend
torchaudioset_audio_backend	use_musdbr   wavr   lenr   r   rd   wav2_weightmaxround
wav2_validintr   valid_samples)
r?   	train_set	valid_setextra_train_setextra_valid_setweightberepsn_kepts
             r&   get_datasetsrz   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%AVa 89:DD!9+"47H"HI	99!	NU6A:V#<=>)ov FG	 *9o*FG	yy*!)TYY-D-DE	y>>y>>ir+   c                    t        j                          t        j                  | j                         t        |       }| j                  j                  rt        j                  |       t        d |j                         D              dz  dz  }t        j                  d|       t        |d      rA|j                  d      }t        j                  d|| j                  j                  z  dz         t!        j"                  d	       t        j$                  j'                         r|j%                          t)        ||       }| j*                  t         j,                  z  d	k(  sJ | xj*                  t         j,                  z  c_        |rt/        d |||       S t1        |       \  }}| j2                  j4                  j6                  rg }d
| j                  j8                  v r5|j;                  | j                  j8                  j=                  d
             nt        j?                  d       | j2                  j4                  j6                  r"tA        |fd
|i| j2                  j4                  }t        j                  dtC        |      tC        |             t        jD                  || j*                  d| j                  jF                  d      }	| j                  jH                  r.t        jD                  |dd| j                  jF                        }
n8t        jD                  || j*                  d| j                  jF                  d      }
|	|
d}t/        ||||       S )Nc              3   <   K   | ]  }|j                           y wr(   )numel).0ps     r&   	<genexpr>zget_solver.<locals>.<genexpr>   s     7q7s   r2   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
   initrT   manual_seedseedrC   miscshowloggerinfosumrQ   rN   r   r9   r   sysexitcudais_availablerb   r   
world_sizer   rz   augmentrepitchprobar   rP   indexwarningr   rj   loaderr   full_cv)r?   
model_onlyr<   mbfieldrZ   rq   rr   r   train_loadervalid_loaderloaderss               r&   
get_solverr      sw   LLN	dii dOEyy~~E7E$4$4$677!;eCOR(5.)&&q)EKK(%$))2F2F*F*MN zz 

 eT*I??W///1444OO***OdE9d33'-Iy||!!tyy(((MM$))++11(;<NN23<<%%(Z6ZT\\EYEYZI
KK-s9~s9~N>>dootII))T;L yy~~!U		--/ ~~$//5		--? %|<G '5)T22r+   c                 r   t        j                         }d }|j                         r|j                  }|j	                          t
        j                  |       }|!|j	                          |j                  |       |j                  d      5  t        |j                  |      cd d d        S # 1 sw Y   y xY w)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   B--B6z../confconfigz1.1)config_pathconfig_nameversion_basec                    t         j                  j                  t              adD ]O  }t	        | j
                  |      }|t        | j
                  |t         j                  j                  |             Q dt        j                  d<   dt        j                  d<   | j                  j                  r#t        j                  t        j                         t        j                  dt        j                                 t        j#                  |        ddlm} t        j#                   |       j(                         t+        |       }|j-                          y )N)musdbri   metadata1OMP_NUM_THREADSMKL_NUM_THREADSz*For logs, checkpoints and samples check %sr   )get_xp)r   utilsto_absolute_path__file__r>   r9   setattrosenvironr   verboser   setLevelloggingDEBUGr   getcwddebugdorar   r   r   r   )r?   attrvalr   solvers        r&   r   r      s     {{++H5H, Hdii&?DIItU[[%A%A#%FGH
 %(BJJ !$'BJJ !yy&
KK<biikJ
LL
LLF
LLNr+   _DORA_TEST_PATH__main__)F)2r/   r   r   pathlibr   r   r   r   r   hydra.core.global_hydrar   	omegaconfr   rT   r   rf   torch.utils.datar    r
   ri   r   r   r4   r   r5   r   r6   r   r   r   r   r   statesr   r   r   	getLoggerr,   r   Moduler   rC   rb   rz   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+   