Ë
    P/æjã  ã                   ó¸   — d Z ddlmZ ddlZddl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mZ ddlZd„ Zdd„Zdd	„Zdd
„Zdd„Zd„ Zdd„Zd„ Zed„ «       Zd„ Zy)z$
Utilities to save and load models.
é    )ÚcontextmanagerN)ÚPath)Ú	OmegaConf)Úfatalc                  óB   — 	 dd l } y # t        $ r t        d«       Y y w xY w)Nr   z‘Trying to use DiffQ, but diffq is not installed.
On Windows run: python.exe -m pip install diffq 
On Linux/Mac, run: python3 -m pip install diffq)ÚdiffqÚImportErrorr   )r   s    úP/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/demucs/states.pyÚ_check_diffqr      s+   € ðAÜøÜò AÜð @ö 	AðAús   ‚ ‡�c                 ó   — d}|j                   rDt        «        ddl m}  || |j                  |j                  ¬«      }|�|j                  |«       |S |j                  r/t        «        ddl m}  || |j                  |j                  ¬«      }|S )z4Return the quantizer given the XP quantization args.Nr   )ÚDiffQuantizer)Úmin_sizeÚ
group_size)ÚUniformQuantizer)Úbitsr   )r   r   r   r   r   Úsetup_optimizerÚqatr   )ÚmodelÚargsÚ	optimizerÚ	quantizerr   r   s         r
   Úget_quantizerr       s|   € à€IØ‡z‚zÜŒÝ'Ù!Ø˜DŸM™M°d·o±oôGˆ	àÐ Ø×%Ñ% iÔ0ð Ðð 
�ŠÜŒÝ*Ù$Ø˜DŸH™H¨t¯}©}ô>ˆ	àÐó    c                 ó(  — t        | t        «      r| }npt        | t        t        f«      rKt	        j
                  «       5  t	        j                  d«       | }t        j                  |d«      }ddd«       nt        d| › d�«      ‚d   }|d   }|d   }|r	 ||i |¤Ž}nWt        j                  |«      }t        |«      D ],  }	|	|j                  vsŒt	        j                  d	|	z   «       ||	= Œ.  ||i |¤Ž}|d
   }
t        ||
«       |S # 1 sw Y   Œ�xY w)zvLoad a model from the given serialized model, either given as a dict (already loaded)
    or a path to a file on disk.ÚignoreÚcpuNzInvalid type for ú.Úklassr   ÚkwargszDropping inexistant parameter Ústate)Ú
isinstanceÚdictÚstrr   ÚwarningsÚcatch_warningsÚsimplefilterÚtorchÚloadÚ
ValueErrorÚinspectÚ	signatureÚlistÚ
parametersÚwarnÚ	set_state)Úpath_or_packageÚstrictÚpackageÚpathr   r   r   r   ÚsigÚkeyr    s              r
   Ú
load_modelr6   2   s#  € ô �/¤4Ô(Ø!‰Ü	�O¤c¬4 [Ô	1Ü×$Ñ$Ó&ñ 	.Ü×!Ñ! (Ô+Ø"ˆDÜ—j‘j  uÓ-ˆG÷	.ð 	.ô
 Ð,¨_Ð,=¸QÐ?Ó@Ð@à�GÑ€EØ�6‰?€DØ�XÑ€FáÙ�tÐ&˜vÑ&‰ä×Ñ Ó&ˆÜ˜“<ò 	 ˆCØ˜#Ÿ.™.Ò(Ü—‘Ð>ÀÑDÔEØ˜3‘Kð	 ñ �tÐ&˜vÑ&ˆà�GÑ€Eäˆe�UÔØ€L÷1	.ð 	.ús   ¾.DÄDc           	      ó  — |€b|rt         j                  nd}| j                  «       j                  «       D ��ci c]#  \  }}||j                  j                  d|¬«      “Œ% }}}|S |j                  «       }d|d<   |S c c}}w )z½Get the state from a model, potentially with quantization applied.
    If `half` is True, model are stored as half precision, which shouldn't impact performance
    but half the state size.Nr   )ÚdeviceÚdtypeTÚ__quantized)r'   ÚhalfÚ
state_dictÚitemsÚdataÚtoÚget_quantized_state)r   r   r;   r9   ÚkÚpr    s          r
   Ú	get_staterC   S   s‚   € ð ÐÙ"”—
’
¨ˆØEJ×EUÑEUÓEW×E]ÑE]ÓE_×`¹T¸QÀ��A—F‘F—I‘I U°%�IÓ8Ñ8Ð`ˆÑ`ð €Lð ×-Ñ-Ó/ˆØ#ˆˆmÑØ€Lùó	 as   ¸(A<c                 ó²   — |j                  d«      r4|�|j                  | |d   «       |S t        «        ddlm}  || |«       |S | j	                  |«       |S )zSet the state on a given model.r:   Ú	quantizedr   )Úrestore_quantized_state)ÚgetrF   r   r   Úload_state_dict)r   r    r   rF   s       r
   r/   r/   `   s`   € à‡y�y�ÔØÐ Ø×-Ñ-¨e°U¸;Ñ5GÔHð €Lô ŒNÝ5Ù# E¨5Ô1ð €Lð 	×Ñ˜eÔ$Ø€Lr   c                 óV  — t        j                  «       }t        j                  | |«       t	        j
                  |j                  «       «      j                  «       dd }|j                  |j                  dz   |z   |j                  z   z  }|j                  |j                  «       «       y)z†Save the given value on disk, along with a sha256 hash.
    Should be used with the output of either `serialize_model` or `get_state`.Né   ú-)ÚioÚBytesIOr'   ÚsaveÚhashlibÚsha256ÚgetvalueÚ	hexdigestÚparentÚstemÚsuffixÚwrite_bytes)Úcontentr3   Úbufr4   s       r
   Úsave_with_checksumrY   n   sy   € ô �*‰*‹,€CÜ	‡J�Jˆw˜ÔÜ
�.‰.˜Ÿ™›Ó
(×
2Ñ
2Ó
4°R°aÐ
8€Cà�;‰;˜$Ÿ)™) c™/¨CÑ/°$·+±+Ñ=Ñ>€DØ×Ñ�S—\‘\“^Õ$r   c                 óŒ   — | j                   \  }}| j                  }t        | ||«      }||||t        j                  |d¬«      dœS )NT)Úresolve)r   r   r   r    Útraining_args)Ú_init_args_kwargsÚ	__class__rC   r   Úto_container)r   r\   r   r;   r   r   r   r    s           r
   Úserialize_modelr`   y   sN   € Ø×*Ñ*�L€Dˆ&Ø�O‰O€Eä�e˜Y¨Ó-€EàØØØÜ"×/Ñ/°ÀtÔLñð r   c                 óŽ   — | j                  «       D ��ci c]$  \  }}||j                  «       j                  «       “Œ& c}}S c c}}w ©N)r=   r   Úclone)r    rA   Úvs      r
   Ú
copy_statere   ‡   s1   € Ø+0¯;©;«=×9¡4 1 aˆAˆq�u‰u‹w�}‰}‹ÑÓ9Ð9ùÓ9s   ”)Ac              #   ó¼   K  — t        | j                  «       «      }| j                  |d¬«       	 d–— | j                  |«       y# | j                  |«       w xY w­w)zÎ
    Context manager that swaps the state of a model, e.g:

        # model is in old state
        with swap_state(model, new_state):
            # model in new state
        # model back to old state
    F)r1   N)re   r<   rH   )r   r    Ú	old_states      r
   Ú
swap_staterh   ‹   sR   è ø€ ô ˜5×+Ñ+Ó-Ó.€IØ	×Ñ˜%¨ÐÔ.ð)Ûà×Ñ˜iÕ(øˆ×Ñ˜iÕ(üs   ‚-A°A ´AÁAÁAc                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )Nc                 ó0   •— ||f| _          ‰| g|¢­i |¤Ž y rb   )r]   )Úselfr   r   Úinits      €r
   Ú__init__zcapture_init.<locals>.__init__ž   s!   ø€ à"&¨ ˆÔÙˆTÐ#�DÒ#˜FÓ#r   )Ú	functoolsÚwraps)rl   rm   s   ` r
   Úcapture_initrp   �   s%   ø€ Ü‡_�_�TÓó$ó ð$ð €Or   rb   )F)NT)Ú__doc__Ú
contextlibr   rn   rO   r*   rL   Úpathlibr   r$   Ú	omegaconfr   Údora.logr   r'   r   r   r6   rC   r/   rY   r`   re   rh   rp   © r   r
   ú<module>rw      sm   ðñõ &ã Û Û Û 	Ý Û å Ý Û òAóó$óB
óò%óò:ð ñ)ó ð)ó"r   