
    Vh                        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j%        e&          Z' G d dej(                  Z)d Z*d Z+d Z,d"dZ-d"dZ. eddd          d             Z/d ej0        v r  eej0        d                    e/j        _1        e&d!k    r e/             dS dS )#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                   8     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} n# t          $ r t	          d          w xY w|                    d          | _        |                    d          | _        |d         | _         |di || _	        d S )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      R/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/train.pyr   zTorchHDemucsWrapper.__init__)   s    	cAAAAAAA 	c 	c 	cabbb	c **\22zz),,i()\33F33s	   * Ac                 6    | 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 R 	4 	4 	4 	4 \	4/ / / / / / /r+   r   c                 D   t          | j        j                  | j        j        | j        j        | j        p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    	)**),i*%>TY->)>	 E ,	 
 jE 
	dj 9 94	H	H	HBE  E R  ELr+   c                    t                      }g }g }|                                 D ]|\  }}t          |d          rg|                                }t          |d                   }|                    |          sJ |t          |          z  }|                    |           }|                                 D ]}	|	|vr|                    |	           |                    dd|i           |}
|j        j        dk    rMt          j        
                    |
|j        j        |j        j        |j        j        f|j        j                  S |j        j        dk    rMt          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113v;;&KMM%   !!## ' '##&&&
MM!h-...Jz6!!{z}:&
(890	   
 
 	
 
	W	$	${  z}:&
(890	 ! 
 
 	
 /1EFFFr+   c                    | j         j        rt          j        | j         j                   | j         j        rt          | j                   \  }}ng g }}| j         j        r[t          | j                   \  }}t          | j         j	                  dk    r#t          ||g          }t          ||g          }n|}|}| j         j        rt          | j         d          \  }}| j         j        }|Ht          |          }t          |          }t          dt          ||z  d|z  dz
  z                      }nd}t          |g|z  |gz             }| j         j        rg|Tt          |          }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   y 8$TY%6777y &5di@@	99!29	y} (+;DI+F+F(ty !!Q&&%y/&BCCI%y/&BCCII'I'Iy~ H+;DIv+N+N(&IAO$$Aq%AVa 899::DDD!9+"47H"HII	9 	H!	NNU6A:V#<==>>)ov F FG 		 *9o*FGG	y*!)TY-DEE	y>>>y>>>ir+   Fc                 $   t          j                     t          j        | j                   t          |           }| j        j        rt          	                    |           t          d |                                D                       dz  dz  }t          	                    d|           t          |d          r@|                    d          }t          	                    d|| j        j        z  dz             t!          j        d	           t          j                                        r|                                 t)          ||           }| j        t           j        z  d	k    sJ | xj        t           j        z  c_        |rt/          d |||           S t1          |           \  }}| j        j        j        rg }d
| j        j        v r3|                    | j        j                            d
                     nt                              d           | j        j        j        rtA          |fd
|i| j        j        }t          	                    dtC          |          tC          |                     t          j"        || j        d| j        j#        d          }	| j        j$        r#t          j"        |dd| j        j#                  }
n(t          j"        || j        d| j        j#        d          }
|	|
d}t/          ||||           S )Nc              3   >   K   | ]}|                                 V  d S r(   )numel).0ps     r&   	<genexpr>zget_solver.<locals>.<genexpr>   s*      77q777777r+   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      s   LNNN	di   dOOEy~ E77E$4$4$6$677777!;eCOR(((5.)) 	O&&q))EKK(%$)2F*F*MNNN z   

 eT**I?W//14444OO**OO 4dE9d333'--Iy|! [ty(((MM$)+11(;;<<<<NN2333<% 	[(ZZ6ZT\EYZZI
KK-s9~~s9~~NNN>dotI)T; ; ;L y ?~!U	-/ / / ~$/5	-? ? ? %|<<G '5)T222r+   c                    t          j                    }d }|                                r|j        }|                                 t
                              |           }|)|                                 |                    |           |                    d          5  t          |j
        |          cd d d            S # 1 swxY w Y   d S )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 j

			c	"	"B


			 . ."&*--. . . . . . . . . . . . . . . . . .s    CC	Cz../confconfigz1.1)config_pathconfig_nameversion_basec                    t           j                            t                    adD ]L}t	          | j        |          }|3t          | j        |t           j                            |                     Mdt          j        d<   dt          j        d<   | j	        j
        r$t                              t          j                   t                              dt          j                               t                              |            ddlm} t                               |            j                   t+          |           }|                                 d S )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55H, H Hdi&&?DItU[%A%A#%F%FGGG$'BJ !$'BJ !y '&&&
KK<bikkJJJ
LL
LLF
LLNNNNNr+   _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      so   ' &  				       



        / / / / / /                  * * * * * *       9 9 9 9 9 9 9 9                   % % % % % %                              		8	$	$/ / / / /") / / /*  $G G GD'  '  ' T53 53 53 53p. . . . 	xeLLL  ML. 
""D$5677DIM zDFFFFF r+   