U
    #c                     @   s   d Z ddlZddlmZ ddlmZ ddlZddlm	Z	m
Z
mZ ejdfejdfejdfejd	fejd
fejdfejdfejdfejdfejdfejdfejdfejdfejdfejdfejdfejdfejdfgZee \Z Z!G dd dZ"dS )z2
Test scalar buffer interface adheres to PEP 3118
    N)rational)get_buffer_info)assert_assert_equalassert_raises?bhilqBHILQefdgZZfZZdZZgc                	   @   s   e Zd Zejjdeeddd Zejjdeeddd Z	ejjde
eddd	 Zejjdeedd
d Zdd Zdd Zdd Zejdejdddejdddejdddgdd Zdd ZdS )TestScalarPEP3118scalar)idsc                 C   s<   | }t jg t |d}t|}t|}t|j|j d S )Ndtype)nparrayr   
memoryviewr   format)selfr   xamv_xmv_a r$   F/tmp/pip-unpacked-wheel-b2rbor69/numpy/core/tests/test_scalarbuffer.pytest_scalar_match_array%   s
    z)TestScalarPEP3118.test_scalar_match_arrayc                 C   sV   | }t |}t|jt|j t|jd t|jd t|jd t|jd d S )Nr   r$   )	r   r   itemsizer   r   ndimshapestrides
suboffsets)r   r   r    r"   r$   r$   r%   test_scalar_dim-   s    z!TestScalarPEP3118.test_scalar_dimzscalar, codec                 C   s<   | }t d|jjdd|dd}t|}| ||ks8td S )Nr$   r   Tr*   r'   r(   r)   r   readonly)dictr   r'   r   _as_dictAssertionError)r   r   coder    expectedr"   r$   r$   r%   test_scalar_code_and_properties7   s      z1TestScalarPEP3118.test_scalar_code_and_propertiesc              	   C   s0   | }t jtdd t|dg W 5 Q R X d S )Nscalar buffer is readonlymatchWRITABLE)pytestraisesBufferErrorr   )r   r   r    r$   r$   r%   test_scalar_buffers_readonly@   s    z.TestScalarPEP3118.test_scalar_buffers_readonlyc              	   C   s   t dt jdfdt jdfg}t jd|dd }tt|t j t|}dt t jdfj	 }|d	t t jj	 7 }t
|j	| t
|jd
 t
|jd t
|jd t
|jd t jddg|d}tt|t j t|}t
|j	|j	 t
|j|j tjtdd t|dg W 5 Q R X d S )Nname   Zgrades)   )Zndarray_scalar)g333333?g      @r   r$      r?   r   )ZSarah)g       @      @)ZJohn)g      @rA   r5   r6   r8   )r   r   Zunicode_Zfloat64r   r   
isinstancevoidr   r'   r   r(   r)   r*   r+   Zndarrayr   r9   r:   r;   r   )r   dtr    r"   Zexpected_sizer!   r#   r$   r$   r%    test_void_scalar_structured_dataF   s$    z2TestScalarPEP3118.test_void_scalar_structured_datac                 C   s    t |j|j|j|j|j|jdS )N)r*   r)   r'   r(   r   r.   )r/   r*   r)   r'   r(   r   r.   )r   mr$   r$   r%   r0   _   s
      zTestScalarPEP3118._as_dictc              	   C   s   t d}t d}tddddddd}t|}| ||ksBtt|| }| ||ks`tt d	d
g}t d|}tt	t
ft|d  tjt
dd t|dg W 5 Q R X d S )Nz
2016-01-01z
2017-01-01)r@   r@   )   r   Tr-   )r!   Zuint16)r   zM8[s]r   r5   r6   r8   )r   Z
datetime64r/   r   r0   r1   r   emptyr   
ValueErrorr;   r9   r:   r   )r   Zdt1Zdt2r3   vrD   r!   r$   r$   r%   test_datetime_memoryviewc   s    


 z*TestScalarPEP3118.test_datetime_memoryviewsZ22ascii)idu   ️️zbasic multilingualu   💻💻znon-BMPc              	   C   s   t |}tddddddd}t|}| ||ks8tt j|dd}t|d	d
 |D  tj	t
dd t|dg W 5 Q R X d S )Nr$   rG   r   Z2wTr-   i4r   c                 S   s   g | ]}t |qS r$   )ord).0cr$   r$   r%   
<listcomp>   s     z3TestScalarPEP3118.test_str_ucs4.<locals>.<listcomp>r5   r6   r8   )r   Zstr_r/   r   r0   r1   Z
frombufferr   r9   r:   r;   r   )r   rL   r3   rJ   Zcode_pointsr$   r$   r%   test_str_ucs4z   s    
zTestScalarPEP3118.test_str_ucs4c              	   C   sN   t d}tt t| W 5 Q R X tjtdd t|dg W 5 Q R X d S )Nr@   r5   r6   r8   )r   r   	TypeErrorr   r9   r:   r;   r   )r   rr$   r$   r%   test_user_scalar_fails_buffer   s
    
z/TestScalarPEP3118.test_user_scalar_fails_bufferN)__name__
__module____qualname__r9   markZparametrizescalars_only
codes_onlyr&   r,   scalars_and_codesr4   r<   rE   r0   rK   paramrT   rW   r$   r$   r$   r%   r   #   s$   

	


r   )#__doc__Znumpyr   Znumpy.core._rational_testsr   Znumpy.core._multiarray_testsr   r9   Znumpy.testingr   r   r   Zbool_byteshortZintcint_ZlonglongZubyteZushortZuintcZuintZ	ulonglongZhalfZsingledoubleZ
longdoubleZcsingleZcdoubleZclongdoubler^   zipr\   r]   r   r$   r$   r$   r%   <module>   s4   