
    i	                    P    d dl mZ d dlZd dlZd dlmZ  G d d      ZddZ	ddZ
y)	    )annotationsNc                      e Zd ZdZd ZddZy)MLXStateDictMixinz<Mixin to add PyTorch-style state dict methods to MLX models.c                4    t        | j                               S )z6Return state dict (compatible with PyTorch interface).)dict
parameters)selfs    i/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/demucs_mlx/mlx_utils.py
state_dictzMLXStateDictMixin.state_dict   s    DOO%&&    c                &    | j                  |       y)z:Load state dict into model (PyTorch-compatible interface).N)update)r	   r   stricts      r
   load_state_dictz!MLXStateDictMixin.load_state_dict   s     	Jr   N)T)__name__
__module____qualname____doc__r   r    r   r
   r   r   	   s    F' r   r   c                   t        |t        j                        r|j                  d   }nt	        |      }| j                  d   |z
  }|dk  rt        d| d      |r#|dz  }| j                  d   ||z
  z
  }| d||f   } | S )Nr   z/tensor must be larger than reference. Delta is .   .)
isinstancemxarrayshapeint
ValueError)x	referenceref_sizedeltastartends         r
   center_trimr&      s    )RXX&??2&y>GGBK("EqyJ5'QRSTT
ggbkUU]+c59nHr   c                   | j                   ^ }}t        t        j                  ||z              }|dz
  |z  |z   }||z
  }|dkD  r-dgt	        |      z  d|fgz   }t        j                  | |d      } t        j                  |       } dg| j                  z  }	t        | j                  dz
  dd      D ]   }
|	|
dz      | j                   |
dz      z  |	|
<   " |	d d |dgz   }t        j                  | g ||||      S )	N   r   )r   r   constant)moder   r   )r   strides)r   r   mathceillenr   pad
contiguousndimrange
as_strided)r    kernel_sizestrider   lengthn_frames
tgt_lengthr/   padscurrent_stridesinew_stridess               r
   unfoldr=   $   s   WWNUF499Vf_-.HQ,&(;6J
v
C
Qwx#e*$Cz1FF1d, 	aA cAFFlO166A:r2&,QU3agga!enD ' "#2&&!4K==	--x-- r   )r    mx.arrayr!   ztp.Union[mx.array, int]returnr>   )r    r>   r4   r   r5   r   r?   r>   )
__future__r   r,   typingtpmlx.corecorer   r   r&   r=   r   r   r
   <module>rE      s%    "   
  
 %r   