
    ]iw                        S r SSKJr  SSKJr  SSKrSSKrSSKrSSK	J
r
Jr  SSKJr  \R                  \\
4   r " S S	\5      rS
\S\4S jr " S S5      r " S S\5      r " S S\5      r " S S5      r " S S5      rg)zRepresents a model repository, including pre-trained models and bags of models.
A repo can either be the main remote repository stored in AWS, or a local repository
with your own models.
    )sha256)PathN   )BagOfModelsModel)
load_modelc                       \ rS rSrSrg)ModelLoadingError    N)__name__
__module____qualname____firstlineno____static_attributes__r       H/mnt/rpi/tmp/demucs-venv-sys/lib/python3.13/site-packages/demucs/repo.pyr
   r
      s    r   r
   pathchecksumc                 (   [        5       n[        U S5       n UR                  S5      nU(       d  OUR                  U5        M,  S S S 5        UR	                  5       S [        U5       nXQ:w  a  [        SU  SU SU 35      eg ! , (       d  f       ND= f)Nrbi   zInvalid checksum for file z, expected z	 but got )r   openreadupdate	hexdigestlenr
   )r   r   shafilebufactual_checksums         r   check_checksumr!      s    
(C	dD	T))E"CJJsO	  
 mmons8}5O""<TF C,,4:Y>O!Q R 	R # 
	s   .B
Bc                   <    \ rS rSrSrS\S\4S jrS\S\4S jr	Sr
g)	ModelOnlyRepo+   z)Base class for all model only repos.
    sigreturnc                     [        5       eNNotImplementedErrorselfr%   s     r   	has_modelModelOnlyRepo.has_model.       !##r   c                     [        5       er(   r)   r+   s     r   	get_modelModelOnlyRepo.get_model1   r/   r   r   N)r   r   r   r   __doc__strboolr-   r   r1   r   r   r   r   r#   r#   +   s-    $S $T $$S $U $r   r#   c                   d    \ rS rSrS\R
                  \\4   4S jrS\S\4S jr	S\S\
4S jrSrg	)

RemoteRepo5   modelsc                     Xl         g r(   _models)r,   r9   s     r   __init__RemoteRepo.__init__6   s    r   r%   r&   c                     XR                   ;   $ r(   r;   r+   s     r   r-   RemoteRepo.has_model9       ll""r   c                      U R                   U   n[        R                  R                  USSS9n[        U5      $ ! [         a    [        SU S35      ef = f)Nz2Could not find a pre-trained model with signature .cpuT)map_location
check_hash)r<   KeyErrorr
   torchhubload_state_dict_from_urlr   )r,   r%   urlpkgs       r   r1   RemoteRepo.get_model<   sm    	a,,s#C ii00e 1 6#	  	a#&XY\X]]^$_``	as	   ; Ar;   N)r   r   r   r   tpDictr4   r=   r5   r-   r   r1   r   r   r   r   r7   r7   5   sA    rwwsCx0 #S #T #S U r   r7   c                   L    \ rS rSrS\4S jrS rS\S\4S jr	S\S\
4S jrS	rg
)	LocalRepoF   rootc                 0    Xl         U R                  5         g r(   )rS   scan)r,   rS   s     r   r=   LocalRepo.__init__G   s    			r   c                 n   0 U l         0 U l        U R                  R                  5        H  nUR                  S:X  d  M  SUR
                  ;   a,  UR
                  R                  S5      u  p#X0R                  U'   OUR
                  nX R                   ;   a  [        SU S35      eXR                   U'   M     g )Nz.th-z0Duplicate pre-trained model exist for signature z. Please delete all but one.)r<   
_checksumsrS   iterdirsuffixstemsplitr
   )r,   r   xp_sigr   s       r   rU   LocalRepo.scanK   s    II%%'D{{e#$))#'+yys';$F.6OOF+!YYF\\)+J6( S5 56 6 (,V$ (r   r%   r&   c                     XR                   ;   $ r(   r;   r+   s     r   r-   LocalRepo.has_model[   rA   r   c                      U R                   U   nXR                  ;   a  [	        X R                  U   5        [        U5      $ ! [         a    [        SU S35      ef = f)Nz0Could not find pre-trained model with signature rC   )r<   rG   r
   rY   r!   r   )r,   r%   r   s      r   r1   LocalRepo.get_model^   si    	_<<$D //!4!56$	  	_#&VWZV[[\$]^^	_s   A A)rY   r<   rS   N)r   r   r   r   r   r=   rU   r4   r5   r-   r   r1   r   r   r   r   rQ   rQ   F   s9    T , #S #T # S  U  r   rQ   c                   T    \ rS rSrSrS\S\4S jrS rS\	S\
4S	 jrS\	S\4S
 jrSrg)BagOnlyRepoh   zaHandles only YAML files containing bag of models, leaving the actual
model loading to some Repo.
rS   
model_repoc                 <    Xl         X l        U R                  5         g r(   )rS   rg   rU   )r,   rS   rg   s      r   r=   BagOnlyRepo.__init__l   s    	$		r   c                     0 U l         U R                  R                  5        H-  nUR                  S:X  d  M  XR                   UR                  '   M/     g )Nz.yaml)_bagsrS   rZ   r[   r\   )r,   r   s     r   rU   BagOnlyRepo.scanq   s<    
II%%'D{{g%(,

499% (r   namer&   c                     XR                   ;   $ r(   )rk   )r,   rm   s     r   r-   BagOnlyRepo.has_modelw   s    zz!!r   c                 \    U R                   U   n[        R                  " [        U5      5      nUS   nU Vs/ s H  oPR                  R                  U5      PM     nnUR                  S5      nUR                  S5      n[        XgU5      $ ! [         a    [        U S35      ef = fs  snf )Nz: is neither a single pre-trained model or a bag of models.r9   weightssegment)
rk   rG   r
   yaml	safe_loadr   rg   r1   getr   )	r,   rm   	yaml_filebag
signaturesr%   r9   rq   rr   s	            r   r1   BagOnlyRepo.get_modelz   s    	8

4(I nnT)_-]
<FGJS//++C0JG'')$'')$6G44  	8#tf -7 %7 8 8	8
 Hs   B $B)B&)rk   rg   rS   N)r   r   r   r   r3   r   r#   r=   rU   r4   r5   r-   r   r1   r   r   r   r   re   re   h   sE    T } 
-"c "d "5c 5k 5r   re   c                   J    \ rS rSrS\S\4S jrS\S\4S jr	S\S\
4S jrS	rg
)AnyModelRepo   rg   bag_repoc                     Xl         X l        g r(   )rg   r}   )r,   rg   r}   s      r   r=   AnyModelRepo.__init__   s    $ r   name_or_sigr&   c                 |    U R                   R                  U5      =(       d    U R                  R                  U5      $ r(   )rg   r-   r}   r,   r   s     r   r-   AnyModelRepo.has_model   s,    ((5]9P9PQ\9]]r   c                     U R                   R                  U5      (       a  U R                   R                  U5      $ U R                  R                  U5      $ r(   )rg   r-   r1   r}   r   s     r   r1   AnyModelRepo.get_model   sA    ??$$[11??,,[99==**;77r   )r}   rg   N)r   r   r   r   r#   re   r=   r4   r5   r-   AnyModelr1   r   r   r   r   r{   r{      s>    != !K !^S ^T ^8S 8X 8r   r{   )r3   hashlibr   pathlibr   typingrN   rH   rs   applyr   r   statesr   Unionr   RuntimeErrorr
   r4   r!   r#   r7   rQ   re   r{   r   r   r   <module>r      s   
      %  88E;&'	 	R R R$ $ "   D5 5@8 8r   