
    Vhw                     &   d Z ddlmZ ddlmZ ddlZddlZddlZddl	m
Z
mZ ddlmZ ej        ee
f         Z G d d	e          Zd
edefdZ G d d          Z G d de          Z G d de          Z G d d          Z G d d          ZdS )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                       e Zd ZdS )ModelLoadingErrorN)__name__
__module____qualname__     Q/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/repo.pyr
   r
      s        Dr   r
   pathchecksumc                 `   t                      }t          | d          5 }	 |                    d          }|sn|                    |           .	 d d d            n# 1 swxY w Y   |                                d t          |                   }||k    rt          d|  d| d|           d S )NrbTi   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 JJsOOO		 	               mmoons8}}n5O("" !QT !Q !Q,4!Q !Q?N!Q !Q R R 	R #"s   0AA #A c                   2    e Zd ZdZdedefdZdedefdZdS )ModelOnlyRepoz)Base class for all model only repos.
    sigreturnc                     t                      NNotImplementedErrorselfr!   s     r   	has_modelzModelOnlyRepo.has_model.       !###r   c                     t                      r$   r%   r'   s     r   	get_modelzModelOnlyRepo.get_model1   r*   r   N)	r   r   r   __doc__strboolr)   r   r,   r   r   r   r    r    +   sb         $S $T $ $ $ $$S $U $ $ $ $ $ $r   r    c                   T    e Zd Zdej        eef         fdZdedefdZdede	fdZ
dS )
RemoteRepomodelsc                     || _         d S r$   _models)r(   r2   s     r   __init__zRemoteRepo.__init__6   s    r   r!   r"   c                     || j         v S r$   r4   r'   s     r   r)   zRemoteRepo.has_model9       dl""r   c                     	 | j         |         }n!# t          $ r t          d| d          w xY wt          j                            |dd          }t          |          S )Nz2Could not find a pre-trained model with signature .cpuT)map_location
check_hash)r5   KeyErrorr
   torchhubload_state_dict_from_urlr   )r(   r!   urlpkgs       r   r,   zRemoteRepo.get_model<   s    	a,s#CC 	a 	a 	a#$_Y\$_$_$_```	ai00e 1 6 6#    .N)r   r   r   tpDictr.   r6   r/   r)   r   r,   r   r   r   r1   r1   5   s~        rwsCx0    #S #T # # # #S U      r   r1   c                   @    e Zd ZdefdZd ZdedefdZdede	fdZ
dS )		LocalReporootc                 <    || _         |                                  d S r$   )rI   scan)r(   rI   s     r   r6   zLocalRepo.__init__G   s    			r   c                 ,   i | _         i | _        | j                                        D ]k}|j        dk    r^d|j        v r(|j                            d          \  }}|| j        |<   n|j        }|| j         v rt          d| d          || j         |<   ld S )Nz.th-z0Duplicate pre-trained model exist for signature z. Please delete all but one.)r5   
_checksumsrI   iterdirsuffixstemsplitr
   )r(   r   xp_sigr   s       r   rK   zLocalRepo.scanK   s    I%%'' 	, 	,D{e##$)##'+ys';';$FH.6DOF++!YFT\))+56 5 5 56 6 6 (,V$	, 	,r   r!   r"   c                     || j         v S r$   r4   r'   s     r   r)   zLocalRepo.has_model[   r8   r   c                     	 | j         |         }n!# t          $ r t          d| d          w xY w|| j        v rt	          || j        |                    t          |          S )Nz0Could not find pre-trained model with signature r:   )r5   r>   r
   rN   r   r   )r(   r!   r   s      r   r,   zLocalRepo.get_model^   s    	_<$DD 	_ 	_ 	_#$]WZ$]$]$]^^^	_$/!!4!5666$rD   N)r   r   r   r   r6   rK   r.   r/   r)   r   r,   r   r   r   rH   rH   F   s        T    , , , #S #T # # # # S  U            r   rH   c                   H    e Zd ZdZdedefdZd Zdede	fdZ
dedefd	Zd
S )BagOnlyRepoziHandles only YAML files containing bag of models, leaving the actual
    model loading to some Repo.
    rI   
model_repoc                 J    || _         || _        |                                  d S r$   )rI   rX   rK   )r(   rI   rX   s      r   r6   zBagOnlyRepo.__init__l   s!    	$		r   c                     i | _         | j                                        D ]}|j        dk    r|| j         |j        <   d S )Nz.yaml)_bagsrI   rO   rP   rQ   )r(   r   s     r   rK   zBagOnlyRepo.scanq   sL    
I%%'' 	- 	-D{g%%(,
49%	- 	-r   namer"   c                     || j         v S r$   )r[   )r(   r\   s     r   r)   zBagOnlyRepo.has_modelw   s    tz!!r   c                 F    	  j         |         }n # t          $ r t          | d          w xY wt          j        t          |                    }|d         } fd|D             }|                    d          }|                    d          }t          |||          S )Nz: is neither a single pre-trained model or a bag of models.r2   c                 D    g | ]}j                             |          S r   )rX   r,   ).0r!   r(   s     r   
<listcomp>z)BagOnlyRepo.get_model.<locals>.<listcomp>   s)    GGGS$/++C00GGGr   weightssegment)r[   r>   r
   yaml	safe_loadr   getr   )r(   r\   	yaml_filebag
signaturesr2   rb   rc   s   `       r   r,   zBagOnlyRepo.get_modelz   s    	8
4(II 	8 	8 	8#t %7 %7 %7 8 8 8	8 nT)__--]
GGGGJGGG'')$$'')$$67G444s    .N)r   r   r   r-   r   r    r6   rK   r.   r/   r)   r   r,   r   r   r   rW   rW   h   s         T }    
- - -"c "d " " " "5c 5k 5 5 5 5 5 5r   rW   c                   >    e Zd ZdedefdZdedefdZdede	fdZ
dS )	AnyModelReporX   bag_repoc                 "    || _         || _        d S r$   )rX   rl   )r(   rX   rl   s      r   r6   zAnyModelRepo.__init__   s    $ r   name_or_sigr"   c                 j    | j                             |          p| j                            |          S r$   )rX   r)   rl   r(   rn   s     r   r)   zAnyModelRepo.has_model   s.    ((55]9P9PQ\9]9]]r   c                     | j                             |          r| j                             |          S | j                            |          S r$   )rX   r)   r,   rl   rp   s     r   r,   zAnyModelRepo.get_model   sF    ?$$[11 	8?,,[999=**;777r   N)r   r   r   r    rW   r6   r.   r/   r)   AnyModelr,   r   r   r   rk   rk      s        != !K ! ! ! !^S ^T ^ ^ ^ ^8S 8X 8 8 8 8 8 8r   rk   )r-   hashlibr   pathlibr   typingrE   r?   rd   applyr   r   statesr   Unionrr   RuntimeErrorr
   r.   r   r    r1   rH   rW   rk   r   r   r   <module>rz      s   
                   % % % % % % % %       8E;&'	 	 	 	 	 	 	 	R R R R R R$ $ $ $ $ $ $ $       "               D5 5 5 5 5 5 5 5@8 8 8 8 8 8 8 8 8 8r   