o
    gi%                     @   s   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Zd dlm	Z	 d dl
mZ d dl
mZ ejjZe jjedd Ze jjdd	 ZdS )
    N)partial)suppress)use_backend)assert_allclosec                 C   sv	  | j | }}tjd}||jddd}ttg|j	R  t
|d||||| | |d W d    n1 s=w   Y  |jdddd	}|jd
ddd	}ttg|j	R  t
|d|d||d W d    n1 srw   Y  ttg|j	R  t
|d|||d |d W d    n1 sw   Y  ttg|j	R  t
|d||||d W d    n1 sw   Y  ttg|j	R  t
|d|||d|||d W d    n1 sw   Y  d|jvrd|jvrttg|j	R > |tdtj }|jd|dddd\}}}t
|ddgg|d t
|ddgg|d t
|ddgg|d W d    n	1 sDw   Y  ttg|j	R 1 |tdtj }|jd|dd\}}t
|ddgg|d t
|ddgg|d W d    n	1 sw   Y  ttg|j	R B |tdd}|jd|ddddd\}	}
}}t
|	dg|d t
|
dg|d t
|dg|d t
|dg|d W d    n	1 sw   Y  |tdtj }ttg|j	R  t
|d |g d!g|d W d    n	1 sw   Y  ttg|j	R  t
|jd |dd"g d#g|d W d    n	1 s8w   Y  |td}|tdd d d$  }|td}ttg|j	R  t
|d%||||d W d    n	1 s}w   Y  ttg|j	R  t
|d&|||||d W d    n	1 sw   Y  ttg|j	R 1 ||jd'dd}|jd(dd)d*}t
|d+|||d d d d df |d W d    n	1 sw   Y  ttg|j	R ; ||jd,tdtdddd-d.}|tddgddggd/}t
|d0||d ||d W d    n	1 s4w   Y  d1|jv rEd2|jv sttg|j	R ; |td3d}d}|tdd}|d4|||}t
|tttdddg|d W d    n	1 sw   Y  ttg|j	R 9 |td
d/}|tdd/}|tdd/}t
|d5|||td|d W d    n	1 sw   Y  ttg|j	R  |jd6ddd	}t
|d7|td8d9|d W d    n	1 s	w   Y  d|jvrd|jvr|jd:d/dd	}|jd:d/dd	}ttg|j	R 3 |d;||}t
|d d d df td:|d t
|d d dd f td:|d W d    n	1 sjw   Y  ttg|j	R 4 |d<||}t
|d d d df td=|d t
|d d dd f td=|d W d    d S 1 sw   Y  d S d S d S )>N*   )
         sizefloat32za b c, a b c, a b csetup)r   r      )dtypevalue)r   za, -> ag      ?za b, b -> ar   za, b -> a bza b, b -> a bzmlx.vmapz
torch.vmap   zb (q+k+v) -> b q, b k, b v   )qkvr   r	         zb (q+k) -> b q, b k)r   )r   r   z-(a + b) (c + d) -> (a c), (a d), (b c), (b d))abcdza [b])r	   r   r   r   shift)r   r	   r   r   z[h], h2 -> h2z[h], h2, h2 -> [h])r   r   r   )r   r   int64)r   r   z... [d], ... -> ...zh, w -> b h w (1 + 1)numpy)r   r   backendint32zb [h w] c, p [2] -> b p ctorchcompile)r	   z[h], , pz	[h], p, p)r   r   r   z[a a] b -> b)r   d   )r   r	   za b1, a b2 -> a (b1 + b2)zb1 a, b2 a -> a (b1 + b2))r	   r   )einxnprandomdefault_rng	to_tensoruniformastyper   OperationNotSupportedError
exceptionsr   multiplyfulldotnamearangenewaxisidreshapefliprollcopyget_atset_atasarrayzerosadd_atsumones)setup_backendr'   r   rngxyr   r   r   r   r   r   r   zindicesupdates rI   N/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/test/test_values.pytest_values   sX  

	("	


$rK   c           	   	   C   s  dd l }| j | j| }}}tjjddd}||}ttg|j	R  t
|d||jd||d|d W d    n1 sBw   Y  d|jv rQd	|jv sd
|jvrttg|j	R  t
|d||jd||d|d W d    n1 s{w   Y  ttg|j	R  t
|d||jd||d|d W d    n1 sw   Y  ttg|j	R  t
|d||jd||d|d W d    n1 sw   Y  ttg|j	R  t
|d||jd||d|d W d    n1 sw   Y  ttg|j	R  t
|d||jd||d|d W d    n	1 s$w   Y  ttg|j	R  t
|jd|dd|jd|d|d|d W d    n	1 sRw   Y  ttg|j	R  t
|jd|dd|jd|d|d|d W d    n	1 sw   Y  tjjddd}||}tjjddd}||}d|jv rd	|jv r|jdksttg|j	R  t
|d|||jd|||d|d W d    d S 1 sw   Y  d S d S )Nr   )r   r	   r   r
   r   za [b] c)r"   r   r$   r%   mlxza [b c]r   r   )r   r"   ))r	   r   r   r   )r   r	   r   z[a] b [c], b [c] x [a] -> b x)r'   r"   r(   r)   r,   r-   r+   r   r.   r/   r   r@   r3   softmaxlog_softmax	logsumexpr8   r9   versionr2   )	rB   r'   einx2backend2r   rD   xbrE   ybrI   rI   rJ   test_compare_backends   s   








$$rW   )pytest	functools	importlibtypesr   r!   r(   r'   
contextlibr   conftestr   r   errorsr.   markcomputes_valuesrK   rW   rI   rI   rI   rJ   <module>   s"     *