
    GJj                     :    d dl mZ  G d d      Z G d de      Zy)    Nc                   :   e Zd ZU ej                  dz  ed<   ej                  dz  ed<   ej                  dz  ed<   eed<   dZd Zdej                  dej                  de	ej                  ej                  f   fd	Z
dd
ej                  dedej                  fdZy)ConformerCacheNkeysvaluesconvoffset   c                 <    d | _         d | _        d | _        d| _        y )Nr   )r   r   r   r   )selfs    \/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/parakeet_mlx/cache.py__init__zConformerCache.__init__   s    		    returnc                    | j                   }| j                  9| j                  -||j                  d   z   | j                  j                  d   kD  rV|j                  \  }}}}|j                  \  }}}}	| j                  |z   dz
  | j                  z  | j                  z  }
t        j                  |||
|f|j                        }t        j                  |||
|	f|j                        }| j                  | j                  ||c| _        | _        n|| j                  z  dk7  r6| j                  dd |d d f   | _        | j                  dd |d d f   | _        t        j                  | j                  |gd      | _        t        j                  | j                  |gd      | _        | xj                   |j                  d   z  c_         || j                  d|| j                   d d f<   || j                  d|| j                   d d f<   | j                  dd | j                   d d f   | j                  dd | j                   d d f   fS )N      r   .axis)	r   r   r   shapestepmxzerosdtypeconcatenate)r   r   r   prevBHSD_KEYS_D_VALUESS_CACHEnew_knew_vs                r   update_and_fetch_kvz"ConformerCache.update_and_fetch_kv   s    {{II{{"tzz!}$		(::"jjOAq!V &Aq!X		A)dii7499DGHHaGV4djjAEHHaGX6

CEyy DKK$7).&	4;$))#q( $		#uua- 8DI"&++c5D5!m"<DKNNDIIu+=AF	 nndkk5-AJtzz!}$04		#tdkk)1,-28C+Q./yymmQ./S-DKK-QR=R1SSSr   xpaddingc                    |dk(  r|S |j                   \  }}}| j                  (t        j                  |||f|j                        | _        t        ||      }|d d ||z
  |d d f   }||k  r5t        j                  | j                  d d |d d d f   |gd      | _        n|| _        t        j                  | j                  |gd      }t        j                  |dd|ff      }|S Nr   r   r   )r   r   )r   r   r   r   r   minr   pad	r   r&   r'   r   r   Dtokens_to_cachecache_updateresults	            r   update_and_fetch_convz$ConformerCache.update_and_fetch_conv2   s    a<H''1a99!Wa!'':DIgq/A/!3Q67W$1o.12LADI %DIAQ7!W 67r   r   )__name__
__module____qualname__r   array__annotations__intr   r   tupler%   r1    r   r   r   r      s    
((T/HHtO
((T/KDTHHT&(hhT	rxx!	"T@rxx # bhh r   r   c                        e Zd ZU eed<   eed<   ddedef fdZdej                  dej                  fdZdej                  dej                  fd	Z	dd
ej                  dedej                  fdZ
 xZS )RotatingConformerCachecapacitycache_drop_sizec                 >    t         |           || _        || _        y )N)superr   r=   r>   )r   r=   r>   	__class__s      r   r   zRotatingConformerCache.__init__P   s     .r   bufnewc                     | j                   }| j                  |z  }|j                  d   }t        |||z
        }|dd |d d f   |d|||z   d d f<   ||kD  r|d|d d d f   |dd ||z
  d d f<   y y )Nr   .)r=   r   r   r*   )r   rB   rC   CposTfirsts          r   _ring_appendz#RotatingConformerCache._ring_appendV   s    MMkkAoIIaLAq3w),S&5&!^)<CsU{"A%&u9'*3>':C[q5y[!#$ r   r   r   c                    |j                   \  }}}}| j                  | j                  ft        j                  ||| j
                  |f|j                        | _        t        j                  ||| j
                  |f|j                        | _        | j                  | j
                  k  rA| j                  dd | j                  d d f   }| j                  dd | j                  d d f   }n\| j                  | j
                  z   }	t        j                  | j                  |	d      }t        j                  | j                  |	d      }t        j                  ||gd      }
t        j                  ||gd      }| j                  }t        t        d||z
        | j
                        }|dkD  r|d|| j                  z
  |z
  || j                  z
  d d f   }|d|| j                  z
  |z
  || j                  z
  d d f   }| j                  | j                  |       | j                  | j                  |       | xj                  |z  c_        |
|fS )N.r   r   r   )r   r   r   r   r   r=   r   r   rollr   r>   r*   maxrI   )r   r   r   r   r   r   r-   hist_khist_vshiftk_outv_outdropto_cachek_chunkv_chunks                   r   r%   z*RotatingConformerCache.update_and_fetch_kv_   s   ZZ
1a99 3!Qq!94::FDI((Aq$--#;TZZHDK;;&YYsMdkkM145F[[mmQ!67FkkDMM12EWWTYYq1FWWT[[%3F~A6/a8##s1a$h'7a<D(((83a$:N:N6NNG
 D(((83a$:N:N6NNG
 dii1dkk73KK8#Ke|r   r&   r'   r   c                    |dk(  r|S |j                   \  }}}| j                  (t        j                  |||f|j                        | _        || j
                  kD  rkt        ||| j
                  z
        }|d d ||z
  |d d f   }||k  r5t        j                  | j                  d d |d d d f   |gd      | _        n|| _        t        j                  | j                  |gd      }t        j                  |dd|fdf      }|S r)   )	r   r   r   r   r   r>   r*   r   r+   r,   s	            r   r1   z,RotatingConformerCache.update_and_fetch_conv   s    a<H''1a99!Wa!'':DIt###!'1t/C/C+CDOQO 3a 7:;L(NNYYq/"2A56EA	 )	AQ7!Wv >?r   r2   )r3   r4   r5   r8   r7   r   r   r6   rI   r%   r1   __classcell__)rA   s   @r   r<   r<   L   sz    M/ /s /; ;rxx ;$ $"(( $Lrxx # bhh r   r<   )mlx.corecorer   r   r<   r:   r   r   <module>rZ      s#    E EPP^ Pr   