o
    giP                     @   s  d dl Z d dlZd dlZd dl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m  mZ d dlmZ d dl	Z	dd Zdd Zdd	 ZG d
d dZdd Zdd ZeefddZG dd dZdd ZeeZg Zg Zdd Zg dZe reg d ejdddej ej dej!"eejdd d!eej#d"Z$eD ];Z%e%durej&'e%ndZ&e(ejdd#d$e% ie$j)ee&d% e(ejdd#d$e% d&ie$j)ee&d% qe(ejdd#d'ie$j)d(d ejj*ejj+d) d*d+ Z,g d,Z-e re-g d e, rd dl.Z.d dl/mZ0 ej1"e.Z2z	e.3d- d.Z4W n   d/Z4Y d0d1 Z5e5d2Z6e4r;e5d-Z7ee.j8Z9e-D ]oZ%e%durOej&'e%ndZ&e(ejdd#d3e% d4ie6j)e&ed5 e(ejdd#d3e% d6ie6j)e9e&d% e4re(ejdd#d3e% d7ie7j)ee&d% e(ejdd#d3e% d8ie7j)e9e&d% qBd9d e.j8fD ]DZ:e(ejdd#d:ie6j)e
ee:d;ej.j;ej.j*ej.j+d< e4re(ejdd#d=ie7j)e
ee:d;ej.j;ej.j*ej.j+d< qd>d? Z<g d@Z=e< rJd dl>Z>e>j?@ Z4eAdAdB e>j#BdCddD D ZCe>jDe>jEe>jFe>jGdEZHdFd1 Z5e5d2Z6e4r>e5dGZ7dHdI ZIeeIZJdJdK ZKeeKZLe=D ]Z%e%dur]ej&'e%ndZ&e(ejdd#dLe% d4ie6j)e&ed5 e(ejdd#dLe% dMie6j)e&eLd5 e(ejdd#dLe% dNie6j)e&eJd5 e4re(ejdd#dLe% d7ie7j)e&ed5 e(ejdd#dLe% dOie7j)e&eLd5 e(ejdd#dLe% dPie7j)e&eJd5 qPdQd dRfeIdSfeKdTfgZMeMD ]L\ZNZOe(ejdd#dUeO ie6j)e
eeNd;ej>j;ej>j*ej>j+d< e4rHe(ejdd#dVeO ie7j)e
eeNd;ej>j;ej>j*ej>j+d< qdWdX ZPg dYZQeP rd dlRmSZT d dlUZVd dlVZVejW"eVZ2eTjDeTjEeTjXeTjGdEZYejdd[deTjZej de2ejd\dd!eeTj#d"Z$eeTj[Z\eQD ]=Z%e%durej&'e%ndZ&e(ejdd#d]e% ie$j)e&ed5 e(ejdd#d]e% dSie$j)e&e\d5 qd^d dRfeTj[dSfgZMeMD ]'\ZNZOe(ejdd#d_eO ie$j)e
eeNd;ejVj;ejVj*ejVj+d< qd`da Z]g dbZ^e] rdcej_dd< d dl`Zad dlbmc  mZd eje"eaZ2ejddedeajfdfd de2ejd\dd!eeTj#d"Z$e^D ]&Z%e%durUej&'e%ndZ&e(ejdd#dge% ie$j)e&ed5 qHdhd dRfgZMeMD ]$\ZNZOe(ejdd#dieO ie$j)e
eeNd;ej`j*ej`j+d) qxdjdk Zgg dlZheg r6e r6d dliZid dljmZZk d dllmi  mZZm ejn"emZ2ejddmdekj ej de2ejd\dd!eeij#d"Z$ehD ]&Z%e%durej&'e%ndZ&e(ejdd#dne% ie$j)e&ed5 qdod dRfgZoeoD ]$\ZNZOe(ejdd#dpeO ie$j)e
eeNd;ejpj*ejpj+d) qdqdr Zqdsej_dt< g duZreq rd dlsZsejt"esZ2ejddvdesjudwd de2ejd\dd!edxd"Z$erD ]&Z%e%duryej&'e%ndZ&e(ejdd#dye% ie$j)e&ed5 qldzd dRfgZMeMD ]$\ZNZOe(ejdd#d{eO ie$j)e
eeNd;ejsj*ejsj+d) qd|d} Zvd~d Zwdd Zxdd ZydS )    N)partial)defaultdictc                    s   t   fdd}|S )Nc                    sD   | j d ur| j   | W  d    S 1 sw   Y  d S  | S N)backend)setup_backendfunc K/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/test/conftest.pywrapper   s
   
$zuse_backend.<locals>.wrapper)	functoolswraps)r   r   r	   r   r
   use_backend   s   r   c                 C   s   t | ttB tB tB tjB rt| } n|| } t |ttB tB tB tjB r-t|}n||}| j	|j	ks:J | j
jdv rLtj| |ddsJJ d S t| |ksUJ d S )NfgMbP?)rtol)
isinstancelistintfloattuplenpndarrayasarrayto_numpyshapedtypekindallcloseall)xysetupr	   r	   r
   assert_allclose   s   

r"   c                 C   s&   |  dd  d} tdd | D S )N+r   .c                 s       | ]}t |V  qd S r   r   .0ir	   r	   r
   	<genexpr>.       zto_version.<locals>.<genexpr>)splitr   r   r	   r	   r
   
to_version,   s   r.   c                   @   s   e Zd ZdS )DYNAMICN)__name__
__module____qualname__r	   r	   r	   r
   r/   1   s    r/   c                 C   s   dt | vpt| tjS )Nr   )dirr   r   r   r-   r	   r	   r
   default_is_static_arg5   s   r4   c                 C   s   dS )NTr	   )kvr	   r	   r
   default_is_static_kwargs9   s   r7   c                    s    fdd}|S )Nc                     sv   fdd D }fdd  D }fdd D  fdd  D  fdd}|}||i |S )	Nc                    s   g | ]} |s|qS r	   r	   r(   ais_static_argr	   r
   
<listcomp>?       z6wrap_einx_function.<locals>.op_all.<locals>.<listcomp>c                    s    i | ]\}} ||s||qS r	   r	   r(   r5   r6   is_static_kwargr	   r
   
<dictcomp>@        z6wrap_einx_function.<locals>.op_all.<locals>.<dictcomp>c                    s   g | ]
} |r
|nt qS r	   r/   r8   r:   r	   r
   r<   A   s    c                    s$   i | ]\}}| ||r|nt qS r	   rC   r>   r?   r	   r
   rA   B      $ c                     s4   t    fddD }i |}|i |S )Nc                    s,   g | ]}t |tr|tkr d n|qS )r   )r   typer/   popr8   dynamic_argsr	   r
   r<   F   s   , zGwrap_einx_function.<locals>.op_all.<locals>.op_some.<locals>.<listcomp>)r   )rH   dynamic_kwargs	all_args2all_kwargs2)all_args
all_kwargsop_norG   r
   op_someD   s   z3wrap_einx_function.<locals>.op_all.<locals>.op_some)items)rL   rM   rH   rI   rO   r;   r@   rN   wrap)rL   rM   r
   op_all>   s   z"wrap_einx_function.<locals>.op_allr	   )rN   rR   r;   r@   rS   r	   rQ   r
   wrap_einx_function=   s   rT   c                   @   s   e Zd Zdd Zdd ZdS )WrappedEinxc                 C   s    dd l }|| _ tt|d| _d S )Nr   rR   )einxr   rT   rR   )selfrR   rW   r	   r	   r
   __init__S   s   zWrappedEinx.__init__c                 C   s   |  t| j|S r   )rR   getattrrW   )rX   attrr	   r	   r
   __getattr__Y   s   zWrappedEinx.__getattr__N)r0   r1   r2   rY   r\   r	   r	   r	   r
   rU   R   s    rU   c                    s    fdd}|S )Nc                     sT   d d g} fdd}t j||fd}|  |  |d d ur&|d |d S )Nc              
      sH   z i | d< W d S  t y# } z|| d< W Y d }~d S d }~ww )Nr      )	Exception)resulte)argskwargsopr	   r
   runa   s   z)in_new_thread.<locals>.inner.<locals>.run)targetra   r]   r   )	threadingThreadstartjoin)ra   rb   r_   rd   threadrc   )ra   rb   r
   inner^   s   zin_new_thread.<locals>.innerr	   )rc   rl   r	   rk   r
   in_new_thread]   s   rm   c                  C   4   t jdsdS zdd l} W dS  ty   Y dS w )Narray_api_compatFr   T)	importlibutil	find_specro   ImportError)ro   r	   r	   r
   arrayapi_is_available      rt   )numpyznumpy.numpylikeznumpy.einsumN)arrayapi.numpylikearrayapi.einsumarrayapi      ?float32c                 C      t j| ||dS Nr   )r   fullr   valuer   r	   r	   r
   <lambda>       r   r	   int64float64r   r   r   	to_tensorr   
exceptions	classicaldtypesversionnameznumpy.)rW   r   z.in_new_threadrv   c                 C      | S r   r	   r-   r	   r	   r
   r          )rR   adapt_numpylike_elementwiseadapt_numpylike_reducec                  C   s@   t jdsdS zdd l} dd lm} W dS  ty   Y dS w )NjaxFr   T)rp   rq   rr   r   	jax.numpyrv   rs   )r   jnpr	   r	   r
   jax_is_available   s   r   )zjax.numpylikezjax.vmapz
jax.einsumr   NgpuTFc              
      s<   t jd
 fdd	 fddtjdtt jdddttjd	S )Nrz   r{   c                    s$   t jtj| ||dt  d dS )Nr~   r   device)r   
device_putr   r   devicesr   r   r	   r
   r      rD   make_setup.<locals>.<lambda>c                    s   t jt| t  d dS )Nr   r   )r   r   r   r   r   r-   r   r	   r
   r      s    r	   int32r   r   rz   r{   )typesSimpleNamespacer   r   r   r.   r   __version__r   r	   r   r
   
make_setup   s   
r   cpuzjax.z.cpu)r   rW   z.cpu.jitz.gpuz.gpu.jitc                 C   r   r   r	   r-   r	   r	   r
   r      r   zjax.cpurV   )rR   adapt_with_vmapr   r   zjax.gpuc                  C   rn   )NtorchFr   T)rp   rq   rr   r   rs   )r   r	   r	   r
   torch_is_available  ru   r   )ztorch.numpylikez
torch.vmapztorch.einsumr   Nc                 c   r%   r   r&   r'   r	   r	   r
   r*     r+   r*   r$      )r{   r   boolr   c              
      s   g }z
| tjjj W n   Y z
| tjjj W n   Y tjd fdd	 fdddd t	|t
jjt fdddtjd	dd
ttjdS )Nrz   r{   c                    s    t jt| |t| t  dS )N)r   r   )r   r   r   torch_dtypesr   r   r   r	   r
   r   '  rB   r   c                    s   t j| t  dS )Nr   )r   r   r   tensorr   r	   r
   r   (      c                 S   s   |    S r   )r   rv   r   r	   r	   r
   r   )  s    c                      s
   t  S r   )r   r   r	   r   r	   r
   r   +  s   
 )
get_devicer   r   r   r   )appendr   _dynamoexcTorchRuntimeError	_inductorInductorErrorr   r   r   adapterclassical_from_torchopsr.   r   )r   r   r	   r   r
   r     s$   
cudac                 C   s   t j  t | S r   r   compilerresetcompilerk   r	   r	   r
   wrap_torchcompile4  s   

r   c                 C   s   t j  t j| ddS )NF)dynamicr   rk   r	   r	   r
   wrap_torchstaticcompile:  s   
r   ztorch.z.cpu.compile(dynamic=False)z.cpu.compilez.gpu.compile(dynamic=False)z.gpu.compilec                 C   r   r   r	   r-   r	   r	   r
   r   Q  r    z.compilez.compile(dynamic=False)z	torch.cpuz	torch.gpuc                  C   rn   )NmlxFr   T)rp   rq   rr   mlx.corers   )r   r	   r	   r
   mlx_is_availablej  ru   r   )zmlx.numpylikezmlx.vmapz
mlx.einsumr   Nr]   c                 C   s   t j| |t| dS r}   )mxr   
mlx_dtypesr   r	   r	   r
   r     r   r   zmlx.c                 C   r   r   r	   r-   r	   r	   r
   r     r   r   c                  C   s<   t jdsdS zdd l} dd l} W dS  ty   Y dS w )N
tensorflowFr   T)rp   rq   rr   r   tensorflow.experimental.numpyrs   )r   r	   r	   r
   tf_is_available  s   r   )ztensorflow.numpylikeztensorflow.einsumr   NtrueTF_FORCE_GPU_ALLOW_GROWTHc                 C   r|   r}   )tnpr   r   r	   r	   r
   r     r   c                 C      |   S r   rv   r-   r	   r	   r
   r         ztensorflow.c                 C   r   r   r	   r-   r	   r	   r
   r     r   r   c                  C   rn   )NdaskFr   T)rp   rq   rr   
dask.arrayrs   )r   r	   r	   r
   dask_is_available  ru   r   )rw   rx   ry   Nc                 C   r|   r}   )dar   r   r	   r	   r
   r     r   zdask.c                 C   r   r   r	   r-   r	   r	   r
   r     r   r   c                  C   rn   )NtinygradFr   T)rp   rq   rr   r   rs   )r   r	   r	   r
   tinygrad_is_available  ru   r   1PYTHON)ztinygrad.numpylikeztinygrad.einsumr   Nc                 C   s   t jt j| ||S r   )r   Tensorcastr   r   r	   r	   r
   r     r=   c                 C   r   r   r   r-   r	   r	   r
   r     r   z0.0.0z	tinygrad.c                 C   r   r   r	   r-   r	   r	   r
   r     r   r   c                 C   s$   | j dtd d | j dddd d S )Nz	--backend)rE   default--disable-mlx-compile-values
store_trueF)actionr   )	addoptionstr)parserr	   r	   r
   pytest_addoption+  s   r   c                 C   sF   |  d}|d urtjjdd}|D ]}d|jvr|| qd S d S )Nr   z(Only running tests for specified backend)reasonr   )	getoptionpytestmarkskipfixturenames
add_marker)configrP   r   skip_markeritemr	   r	   r
   pytest_collection_modifyitems0  s   


r   c                 C   sl   |  dr*| jdr,d| jv r.| jjd}|r0d|jv r2d|jv r4t	d d S d S d S d S d S d S d S )Ncomputes_valuesr   r   r   r   z+Skipped due to --disable-mlx-compile-values)
get_closest_markerr   r   r   callspecparamsgetr   r   r   )r   r!   r	   r	   r
   pytest_runtest_setup;  s    r   c                 C   s   | j d}d| jv rF|d u rt}n.g }tD ]}|jd u r!|dks,|jd ur1|jj|kr1|| qt|dkr@td| d| 	d| d| jv rUt
}| 	d| d S d S )Nr   r   r   r   z	Backend 'z' is not availablesetup_adapt)r   r   r   r   r   r   r   len
ValueErrorparametrizer   )metafuncr   testsr!   r	   r	   r
   pytest_generate_testsC  s    
(

r   r   )r]   r{   )zrp   rv   r   r   rW   rf   multiprocessingosr   r   r   einx._src.adapter_srcr   collectionsr   r   r"   r.   r/   r4   r7   rT   rU   rm   einx_multithreadr   r   rt   numpy_backendsextendr   r   classical_from_numpyr   r   r!   backend_namer   r   r   __dict__r   r   r   jax_backendsr   r   r   classical_from_jaxr   r   has_gpur   	setup_cpu	setup_gpujiteinx_jitrR   r   r   torch_backendsr   r   is_availabler   r,   r   r{   r   r   r   r   r   einx_torchcompiler   einx_torchstaticcompiler   wrap_fn	wrap_namer   mlx_backendsr   corer   mlx.nnr   classical_from_mlxbool_r   arrayr   einx_compiler   tf_backendsenvironr   tfr   experimentalr   classical_from_tensorflowconvert_to_tensorr   dask_backendsr   r   r   array_api_compat.dask.arrayaac_daclassical_from_arrayapiwarpsry   r   tinygrad_backendsr   classical_from_tinygradr   r   r   r   r   r	   r	   r	   r
   <module>   s^   

,0

....



".&..
.




,2


0

0


0
