o
    h                     @   s|   d dl Zd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlm
Z ejjZejjed  ddG dd	 d	ZdS )
    N)array_api_compatible)_GLOBAL_CONFIGarray_namespace_asarrayxp_copyxp_assert_equalis_numpy	np_compat)r   SCIPY_ARRAY_APIzDArray API test; set environment variable SCIPY_ARRAY_API=1 to run itreasonc                   @   s   e Zd Zdd Zedd Zejddd Z	dd	 Z
ed
ddejdedd Zeejdg dejdddgdd Zedd Zedd ZdS )TestArrayAPIc                 C   sb   t g dt g d}}t||}d|jv sJ dtd< t||}d|jv s+J dtd< d S )Nr         zarray_api_compat.numpyFr
   T)nparrayr   __name__r   )selfxyxp r   S/var/www/vscode/kcb/lib/python3.10/site-packages/scipy/_lib/tests/test_array_api.pytest_array_namespace   s   

z!TestArrayAPI.test_array_namespacec                 C   sJ   t g d|dt td|d}}|g d}t|| t|| d S )Nr   r      )r   r   arangeasarrayr   )r   r   r   r   refr   r   r   test_asarray   s   $
zTestArrayAPI.test_asarrayzignore: the matrix subclassc                 C   s  d}t jt|d ttjdtd W d    n1 s w   Y  d}t jt|d ttdtd W d    n1 sDw   Y  d}t jt|d tt g W d    n1 scw   Y  t jt|d td W d    d S 1 sw   Y  d S )Nz0of type `numpy.ma.MaskedArray` are not supportedmatchr   z(of type `numpy.matrix` are not supportedz/only boolean and numerical dtypes are supportedabc)	pytestraises	TypeErrorr   r   mar   matrixobject)r   msgr   r   r   test_raises#   s   
"zTestArrayAPI.test_raisesc                 C   s$   t g d t ddd t d d S )Nr   r   r   r   )r   )r   r   r   r   test_array_likes3   s   zTestArrayAPI.test_array_likesz	jax.numpyz)JAX arrays do not support item assignmentr   skip_xp_backendsc                 C   s   |d fD ]C}| g d}t||d}d|d< d|d< d|d< |d |d ks)J |d |d ks3J |d |d ks=J t|t|ksGJ qd S )	N)r   r   r   r   
   r      r      r   )r   r   id)r   r   _xpr   r   r   r   r   	test_copy9   s   zTestArrayAPI.test_copydtype)int32int64float32float64shaper   )r   c                 C   s6  t ||}||jd|d|}|r|n|d }tdd }g d}tt|g d}|tkr:t||fi | n tj	t
dd t||fi | W d    n1 sUw   Y  tt|g d}|jjt|jv rvt||fi | n tj	t
d	d t||fi | W d    n1 sw   Y  tt|g d
}|j|jkrt||fi | n#tj	t
dd t|||fi | W d    n1 sw   Y  tt|g d}t|r|j|jkrt||fi | d S t|rtj	t
dd t||fi | W d    d S 1 sw   Y  d S d S )Nr   )r4   r   )check_namespacecheck_dtypecheck_shapecheck_0d)TFFFzNamespaces do not match.r!   )FTFFzdtypes do not match.)FFTFzShapes do not match.)FFFTzArray-ness does not match.)getattrbroadcast_tor   r	   dictzipr   r   r$   r%   AssertionErrorr4   namestrr9   r   )r   r   r4   r9   r   r   kwarg_namesoptionsr   r   r   test_strict_checksL   s>   

$zTestArrayAPI.test_strict_checksc                 C   s(  t |s	td t|d|d t|d|d t|d|ddd t|d|ddd d}tjt|d t|d|d W d    n1 sXw   Y  tjt|d t|d|d W d    n1 szw   Y  tjt|d t|d|d W d    n1 sw   Y  tjt|d t|d|d W d    n1 sw   Y  t|d|ddd t|d|ddd t|dddd td|ddd t|dddd td|ddd t|d|dd	  d S )
NScalars only exist in NumPyr           Fr=   Array-ness does not match:.*r!   *   r   )	r   r$   skipr   r8   r   r%   rB   r6   r   r   messager   r   r   test_check_scalart   s4   
zTestArrayAPI.test_check_scalarc                 C   s  t |s	td t|d|d t|d|ddd t|d|ddd d}tjt|d t|d|d W d    n1 sMw   Y  tjt|d t|d|d W d    n1 sow   Y  tjt|d t|d|d W d    n1 sw   Y  t|d|d t|d|d d	}tjt|d t|d|ddd W d    n1 sw   Y  tjt|d t|d|ddd W d    n1 sw   Y  tjt|d t|d|ddd W d    n	1 sw   Y  tjt|d t|d|ddd W d    n	1 s;w   Y  td|d td|d d S )
NrH   r   TrJ   rI   zResult is a NumPy 0d-array.*r!   rL   rK   )	r   r$   rM   xp_assert_equal_no_0dr8   r   r%   rB   r6   rN   r   r   r   test_check_scalar_no_0d   s@   
z$TestArrayAPI.test_check_scalar_no_0dN)r   
__module____qualname__r   r   r    r$   markfilterwarningsr+   r,   r-   usefixturesr3   parametrizerG   rP   rR   r   r   r   r   r      s*    




%
"r   )numpyr   r$   scipy.conftestr   scipy._lib._array_apir   r   r   r   r   r   r	   scipy._lib._array_api_no_0drQ   rU   r-   skipifr   r   r   r   r   <module>   s    $