
    miA                         d 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	Z	ddl
mc mZ ddlmZmZmZm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mZ  ej<                  e      Z d Z! G d de"      Z#y)zMain training loop.    N)get_xp)write_and_rename)LogProgressbold   )augmentdistribstates
pretrained)apply_model)ModelEMA)evaluatenew_sdr)svd_penalty)pull_metricEMAc                 N    dj                  d | j                         D              S )N | c              3   L   K   | ]  \  }}|j                          d |   yw)=N)
capitalize).0keyvals      G/var/www/stems/demucs_env/lib/python3.12/site-packages/demucs/solver.py	<genexpr>z_summary.<locals>.<genexpr>   s'     Rhc3)*!C51Rs   "$)joinitems)metricss    r   _summaryr       s    ::R'--/RRR    c                   L    e Zd Zd Zd Zd ZdedefdZdedefdZd Z	dd	Z
y
)Solverc           	      .   || _         || _        || _        || _        t	        j
                  | j                  |j                  | j                        | _        t        j                  |      | _
        t        t        | j                  j                                     j                  | _        g g d| _        | j                  j!                         D ]i  }t#        |j$                  |      }|dk(  r| j                  nd}|s/|D ]6  }| j                  |   j'                  t)        | j                  ||             8 k t+        j,                  t/        |j0                  j2                  |j0                  j4                  z        |j*                  j6                        g}	|j*                  j8                  r+|	t+        j:                         t+        j<                         gz  }	dD ]X  }
t#        |j*                  |
      }|j>                  s&|	j'                   t#        t*        |
jA                               di |       Z tC        jD                  jF                  |	 | _        tI               }|jJ                  | _%        |jJ                  dz  | _&        |jJ                  dz  | _'        tP        jS                  d	| jL                  jU                                d | _+        d
| _,        |jZ                  | _-        | jZ                  j\                  | _.        | j_                          y )N)batchepochr%   cpu)device)shiftsame)scaleremixcheckpoint.thzbest.thzCheckpoint will be saved to %sF )0argsloadersmodel	optimizerr
   get_quantizerquant	quantizerr	   wrapdmodelnextiter
parametersr(   emaskeysgetattremaappendr   r   Shiftintdset
samplerater)   
shift_sameflipFlipChannelsFlipSignprobar   torchnn
Sequentialr   foldercheckpoint_file	best_fileloggerdebugresolve
best_statebest_changedlinkhistory_reset)selfr0   r1   r2   r/   kinddecaysr(   decayaugmentsaugkwxps                r   __init__zSolver.__init__   sP   	
"--djj$**dnnUll5)4

 5 5 789@@
 !2.	IINN$ 	WDTXXt,F$(GOT[[F# WEIIdO**8DJJf+UVW		W MMDII,@,@499??,R(S'+||'>'>@ A<<--/1A1A1CDDH% 	JCs+Bxx B1A B HR HI	J xx**H5Xii!yy?:Y.5t7K7K7S7S7UV!GG	yy((r!   c                     i }| j                   j                         |d<   | j                  j                         |d<   | j                  |d<   | j                  |d<   | j
                  |d<   | j                  j                         D ]1  \  }}t        |      D ]  \  }}|j                         |d| d| <     3 t        | j                        5 }t        j                  ||       d d d        | j
                  j                  }|re|dz   |z  d	k(  rZ|dz   | j
                  j                  k7  r>t        | j                  d
|dz    dz        5 }t        j                  ||       d d d        | j                   rut        | j"                        5 }t%        j&                  | j                   | j
                        }| j                  |d<   t        j                  ||       d d d        d| _        y y # 1 sw Y   	xY w# 1 sw Y   xY w# 1 sw Y   +xY w)Nstater2   rU   rR   r/   ema__r   r   checkpoint_z.thF)r1   
state_dictr2   rU   rR   r/   r;   r   	enumerater   rM   rI   save
save_everyepochsrL   rS   rN   r
   serialize_model)	rW   r&   packagerX   r;   kr>   tmprh   s	            r   
_serializezSolver._serializeM   s   ::002#~~88:!\\	 $))))//+ 	>JD$#D/ >3-0^^-=$tfAaS)*>	> d223 	%sJJw$	% YY))
519
2a7EAIIYIY<Y!$+++eai[0L"LM )QT

7C() !$..1 )S 00TYYG#'?? 

7C() !&D 	% 	%
) )
) )s%   G+
G8
AH+G58HHc           	      8   | j                   j                         rt        j                  d| j                           t	        j
                  | j                   d      }| j                  j                  |d          | j                  j                  |d          |d   | j                  dd |d   | _
        | j                  j                         D ]2  \  }}t        |      D ]  \  }}|j                  |d| d	|           ! 4 y| j                  j                  rit!        j"                  | j                  j                  | j                  j$                  
      }| j                  j                  |j'                                y| j                  j(                  r d}| j*                  j,                  }|t/        | j                  j(                        z  |z  }	t        j                  d|	       t	        j
                  |	d      }|d   | _
        | j                  j0                  r!| j                  j                  |d   d       n | j                  j                  |d   d       | j                  j2                  r| j                  j                  |d          yyy)z8Reset state of the solver, potentially using checkpoint.zLoading checkpoint model: r'   ra   r2   rU   NrR   rb   rc   )namerepor-   zLoading from %sF)strict)rM   existsrO   inforI   loadr1   load_state_dictr2   rU   rR   r;   r   rf   r/   continue_pretrainedr   	get_modelpretrained_repore   continue_fromrL   parentstrcontinue_bestcontinue_opt)
rW   rk   rX   r;   rl   r>   r1   rp   rootcfs
             r   rV   zSolver._resetg   s   &&(KK4T5I5I4JKLjj!5!5u=GJJ&&ww'78NN**7;+?@%i0DLLO%l3DO"iioo/ D
d'o DFAs''$tfAaS0A(BCDD YY**((YY22YY..0E JJ&&u'7'7'9:YY$$"D;;%%DDII3344t;BKK)2.jjU+G%l3DOyy&&

**7<+@*O

**77+;E*Jyy%%..w{/CD & %r!   r   returnc                 t   t        |d   d      t        |d   d      d}d|v rt        |d   d      |d<   | j                  t        |d   d      |d<   d	|v rt        |d	   d      |d	<   d
|v rt        |d
   d      |d
<   d|v r|d   |d<   d|v rt        |d   d      |d<   d|v rt        |d   d      |d<   |S )z#Formatting for train/valid metrics.lossz.4freco)r   r   nsdr.3fmsz.2fgradbestbnamepenaltyhloss)formatr5   )rW   r   lossess      r   _format_trainzSolver._format_train   s     76?E276?E2
 W#GFOU;F6N>>%!'$-7F4LW#GFOU;F6NW#GFOU;F6Ng%g.F7O &wy'95 AF9g$WW%5u=F7Or!   c                    i }d|v rt        |d   d      |d<   d|v rt        |d   d      |d<   | j                  j                  D ]9  }d| }||v rt        ||   d      ||<   d| }||v s(t        ||   d      ||<   ; |S )zFormatting for test metrics.sdrr   r   sdr_nsdr_)r   r1   sources)rW   r   r   sourcer   s        r   _format_testzSolver._format_test   s    G"75>59F5MW#GFOU;F6Njj(( 	:F/Cg~$WS\59s&"Cg~$WS\59s	: r!   c                    | j                   rt        j                  d       t        | j                         D ]  \  }}| j	                  |d         }t        j                  t        d|dz    dt        |                    | j	                  |d         }t        j                  t        d|dz    dt        |                    d|v s| j                  |d         }|st        j                  t        d	|dz    dt        |                     d
}t        t        | j                         | j                  j                        D ]  }| j                  j                          i }t        j                  d       t        j                  d       | j                  |      |d<   | j	                  |d         }t        j                  t        d|dz    dt        |                    t        j                  d       t        j                  d       | j                  j                          t!        j"                         5  | j                  |d      }|}d}t%        j&                  | j                  j)                               }i |d<   ||d   d<   | j                  j*                  j,                  }| j.                  j1                         D ]  \  }	}
t        |
      D ]x  \  }}|j3                         5  | j                  |d      }d d d        d|	 d| }||d   |<   ||   }||   }|j5                  d      r| }| }||k  si|}|j6                  }|}z |d   j9                  |       ||d   d<    	 d d d        |d      }t;        | j<                  j                   d|       |gz   }|j5                  d      rt?        |      }ntA        |      }||d   d<   | j                  jB                  jD                  d
kD  rmtG        | j                  jB                        }|jI                  d       t!        j"                         5  tK        | j                  fddi|}d d d        |d   d<   | j	                  |d         }t        j                  t        d|dz    dt        |                    ||k(  s | j                  jL                  jN                  r@t        j                  t        d      |       t%        j&                        | _(        d| _)        |dz   | j                  j*                  jT                  z  d
k(  }|| j                  j                  dz
  k(  }|s|rBt        j                  d       t        j                  d       | j                  j*                  jV                  r| jP                  }n-t%        j&                  | j                  j)                               }| j                  j*                  jX                  xr |}t%        jZ                  | j                  |      5  t!        j"                         5  t]        | |      |d<   d d d        d d d        | j                  |d         }t        j                  t        d	|dz    dt        |                    | j<                  j_                  |       t`        jb                  d
k(  r?| je                  |       t        jg                  d| jh                  jk                                |s y  y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nz#Replaying metrics from previous runtrainzTrain Summary | Epoch r   r   validzValid Summary | Epoch testzTest Summary | Epoch r   zF----------------------------------------------------------------------zTraining...zCross validation...F)r   mainrb   rc   r   r   zvalid.r   r   exactTzNew best valid loss %.4fzEvaluating on the test set...)compute_sdrzCheckpoint saved to %s)6rU   rO   rt   rf   r   r   r    r   rangelenr/   ri   r1   r   _run_one_epochevalrI   no_gradr
   
copy_statere   r   metricr;   r   swap
startswithra   updater   rT   maxminsvdr   dictpopr   rB   train_validrR   rS   everyr   r   
swap_stater   push_metricsr	   rankrn   rP   rM   rQ   )rW   r&   r   	formattedr   bvalidr   ra   r   rX   r;   rl   r>   rp   ab
valid_lossmets	best_lossr]   r   should_evalis_lastr   s                           r   r   zSolver.train   s`   <<KK=>'5 
	cNE7**77+;<IKK-eai[HY<O;PQRT**77+;<IKK-eai[HY<O;PQRT  --gfo>	KK'<UQYKs8T]K^J_%` ab
	c 3t||,dii.>.>? d	EJJGKK!KK&#2259GG**77+;<IKK-eai[HY<O;PQRT KK!KK-.JJOO 6++E+?))$***?*?*AB#% +0 (iinn++"&))//"3 6JD$"+D/ )3 XXZ L$($7$7U$7$KEL!%dV1QC016(.!#J"3K>>&1!"A!"Aq5%*F$'IIE$(E) G$++F305GG$W-!664 !)#.Jtyy00F3%.AZLPD~~f%I	I	'0GGV$yy}}$$q($))--(y!]]_ H)$**GDGBGGH.5 +**77+;<IKK-eai[HY<O;PQRT Y&$))..*D*DD!;<jI"("3"3E":$(! !19		(<(<<AKtyy//!33G gH%;<99>>&& OOE"--djj.C.C.EFE"iinn00<W&&tzz59 R R*24[*QRR !--gfo>	D#83xPYGZF[!\]^II""7+||q &5t7K7K7S7S7UVId	2L L6 6HH HLR RR Rs[   B3\'5\	>\'0\'\4+] ]]\$\''\1	4\>	]
]]	c                    | j                   }|r| j                  d   n| j                  d   }t        j                  dkD  r|r|j                  j                  |       ddg|   }|d|dz    z   }t        |      }|j                  rt        ||j                        }t        t        ||| j                   j                  j                  |      }t               }	t        |      D ]E  \  }
}|j                  | j                         }|r$| j#                  |      }|j%                  d      }n|d d d	f   }|d d dd f   }|sN| j                   j&                  r8t)        | j*                  || j                   j,                  j.                  d	
      }n| j1                  |      }|r2t3        | j*                  d      r| j*                  j5                  ||      }|j6                  |j6                  k(  sJ |j6                  |j6                  f       t9        t;        d|j=                                     }|j>                  j@                  dk(  r;tC        jD                  ||d      }|jG                  |      jG                  d	      }|}n{|j>                  j@                  dk(  r@tC        jH                  ||d      }|jG                  |      }|dz  }|jG                  d	      }n"tK        d| j                   j@                         tM        jN                  |jP                        j                  |      }||z  j%                         |j%                         z  }d	}| jR                  | jR                  jU                         }|jV                  jX                  r||jV                  jX                  |z  z  }i }||z  j%                         |j%                         z  |d<   ||d<   |s{t[        ||j]                               jG                  d	      }d	}t_        | j*                  j`                  ||      D ]  \  }}}||d| <   |||z  z  } ||j%                         z  |d<   |rv|jb                  jd                  d	kD  r]tg        |jb                        }|ji                  d       tk        | j*                  fi |}||d<   ||jb                  jd                  |z  z  }||d<   t        | j*                  j`                        D ]  \  }}||   |d| <    |r|jm                          d	}g }| j*                  jo                         D ]^  }|jp                  ||jp                  jr                  ju                         dz  z  }|jw                  |jp                  jr                         ` |dz  |d<   |j>                  jx                  rVtL        jz                  j|                  j                  | j*                  jo                         |j>                  jx                         | j                   j                  dk(  r;| j*                  j                         D ]  \  }}|jp                  t        d|         | j                  j                          | j                  j                          | j                  d   D ]  }|j                            |	|      }| j                  |      }  |j                  d i |  ~~~~|j                  |
k(  r n8| j                   j                  r|r n| j                   j                  dk(  sF n |r$| j                  d   D ]  }|j                           t        j                  
dz         S )!Nr   r   r   ValidTrainz	 | Epoch )totalupdatesrp   )dimr   )splitoverlaptransform_target   l1none)	reductionmseg      ?zInvalid loss r   r   r   r   r   r   reco_r   unszno gradr%   rP   r&   r.   )Kr/   r0   r	   
world_sizesampler	set_epochr   max_batchesr   r   rO   misc
num_printsr   rf   tor(   r   sumvalid_applyr   r1   r   r   r7   hasattrr   shapetupler   r   optimr   Fl1_lossmeanmse_loss
ValueErrorrI   tensorweightsr5   
model_sizer4   diffqr   detachzipr   r   r   r   r   r   backwardr:   r   datanormr?   	clip_gradrJ   utilsclip_grad_norm_flagnamed_parametersprintr2   step	zero_gradr;   r   r   rP   average)!rW   r&   r   r/   data_loaderlabelrp   r   logprogaverageridxr   mixestimatedimsr   r   r   r   r   nsdrsr   r   wr]   r   rl   	grad_normgradspnr>   logss!                                    r   r   zSolver._run_one_epoch#  s1   yy/4dll7+$,,w:O!e))%0'"5)519+..K t//0Efk&*iinn&?&?dL5%g. _	LCjj-G,,w/kkak(adm!!QR%.TYY22&tzz3diinn>R>R\]^;;s+-?@**55c7C>>W]]2SX^^W]]4SS2q'++-01Dzz$&yy7fEyy++A.E)zz(GvFyySyyy| =0@!ABBll4<<033G<G7N'')GKKM9DB~~)^^..0zz

((2--F"Wn113gkkmCF6NF4L):;@@C'*4::+=+=ug'N &OFD!/3FU6(+,QX%E& "'!6v))A-$((^y!%djj7B7$+y!((722!F6N&tzz'9'9: 3	6+/7vh'(3 	..0 2Avv)!QVV[[%5%5%7%::	QVV[[12 "+c!1v::''HHNN22

--/

,,. 99>>U* $

 ; ; = 0166>!)Q/0 ##%((*99W- !CJJL!f%F%%f-DGNN"T"hb3&yy5yy~~(_	@ yy) 

vsQw//r!   N)T)__name__
__module____qualname__r_   rn   rV   r   r   r   r   r   r.   r!   r   r#   r#      sF    ,\&4E>T d ,D T  unr0r!   r#   )$__doc__loggingdorar   
dora.utilsr   dora.logr   r   rI   torch.nn.functionalrJ   
functionalr    r   r	   r
   r   applyr   r>   r   r   r   r   r   r   r   r   	getLoggerr   rO   r    objectr#   r.   r!   r   <module>r     sZ       ' &    2 2   '  #			8	$Sw0V w0r!   