U
    9%e/                     @   sb  d Z ddlZddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZmZmZmZ ejG dd	 d	e
jZed
e
jdd fde
jfgdZeeej G dd dejZejG dd de
jZeeed
dg edd Zedd Z edd Z!edd Z"edd Z#edd Z$edd Z%edd  Z&G d!d" d"eeZ'eed#d$d% Z(eed&d'd( Z)G d)d* d*eeZ*d+d, Z+d-d. Z,G d/d0 d0eeZ-ejG d1d2 d2e
jZ.e.d3e
j/fd4e
j/ffdZ0G d5d6 d6ejZ1ed7d8 Z2ed9d: Z3ee1e.d3d4g ee.d;d<d= Z4ee.d&d>d? Z5G d@dA dAeeZ6dS )Bz%
Test mutable struct, aka, structref
    N)typednjiterrorstypeof)types)	structref)overload_methodoverload_attribute)MemoryLeakMixinTestCasetemp_directoryoverride_configc                   @   s   e Zd ZdZdS )MySimplerStructTypezV
    Test associated with this type represent the lowest level uses of structref.
    N__name__
__module____qualname____doc__ r   r   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/numba/tests/test_struct_ref.pyr      s   r   valuescounter)fieldsc                   @   sV   e Zd Zdd Zedd Zejdd Zedd Zdd	 Zed
d Z	dd Z
dS )MyStructc                 C   s   t j| ||S Nr   StructRefProxy__new__)clsr   r   r   r   r   r   "   s    zMyStruct.__new__c                 C   s   t | S r   )
get_valuesselfr   r   r   r   *   s    zMyStruct.valuesc                 C   s
   t | |S r   )
set_values)r!   valr   r   r   r   .   s    c                 C   s   t | S r   )get_counterr    r   r   r   r   2   s    zMyStruct.counterc                 C   s   | j | | j S r   r   r   r!   argr   r   r   testme6   s    zMyStruct.testmec                 C   s   | j | jfS r   r%   r    r   r   r   prop9   s    zMyStruct.propc                 C   s   t | S r   )compute_fieldsr    r   r   r   __hash__=   s    zMyStruct.__hash__N)r   r   r   r   propertyr   setterr   r(   r)   r+   r   r   r   r   r       s   



r   c                   @   s   e Zd ZdZdS )MyStructTypezTTest associated with this type represent the higher-level uses of
    structef.
    Nr   r   r   r   r   r.   A   s   r.   c                 C   s   t t}t|| | |S r   )r   newmy_struct_tymy_struct_init)r   r   str   r   r   	my_structS   s    
r3   c                 C   s   || _ || _d S r   r%   )r!   r   r   r   r   r   r1   Z   s    r1   c                 C   s.   t | |d}| j|j7  _| j|9  _|S )Nr   )r3   r   r   )vsctrr2   r   r   r   ctor_by_intrinsic`   s    r7   c                 C   s   t | |dS Nr%   r   )r5   r6   r   r   r   ctor_by_classh   s    r:   c                 C   s   | j S r   r   r2   r   r   r   r   m   s    r   c                 C   s
   || _ d S r   r;   )r2   r#   r   r   r   r"   r   s    r"   c                 C   s   | j S r   r4   r<   r   r   r   r$   w   s    r$   c                 C   s   | j | j S r   r%   r<   r   r   r   r*   |   s    r*   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )TestStructRefBasicc              	   C   s   t dt jfg}| |jd t j t dt jfdt jfg}| |jd t j | |jd t j | td t dt jfg W 5 Q R X | td t dg W 5 Q R X d S )Nabzexpecting a str for field name   z%expecting a Numba Type for field type)r>   {   )r   	StructRefint64assertEqualZ
field_dictfloat64assertRaisesRegex
ValueError)r!   srr   r   r   test_structref_type   s    z&TestStructRefBasic.test_structref_typec              	   C   sN   |  td ttj W 5 Q R X |  td ttjt W 5 Q R X d S )Nzcannot register)rF   rG   r   registerr   rB   define_boxingr   r    r   r   r   test_invalid_uses   s    z$TestStructRefBasic.test_invalid_usesc                 C   sf   t jdt jd}d}|| }t||}| |t | |t| |||  }t|}| || d S )N
   Zdtype   )	nparangeintpr7   ZassertNotIsInstancer   assertPreciseEqualr   r*   )r!   r5   r6   Zfirst_expected	first_gotsecond_expected
second_gotr   r   r   test_MySimplerStructType   s    
z+TestStructRefBasic.test_MySimplerStructTypec              	   C   sl   t jdt jd}d}t||}| |tj | td |j	 W 5 Q R X | td |j
 W 5 Q R X d S )NrM   rN   rO   r   r   )rP   rQ   rR   r7   assertIsInstancer   r   rF   AttributeErrorr   r   )r!   r5   r6   wrapperr   r   r   -test_MySimplerStructType_wrapper_has_no_attrs   s    
z@TestStructRefBasic.test_MySimplerStructType_wrapper_has_no_attrsc                 C   sn   t jdt jd}d}| }t||}| |t | ||j || }t	|}| || | 
|j| d S NrM   rN      )rP   rQ   rE   copyr:   rX   r   rS   r   r*   rD   r   )r!   r5   r6   Zfirst_expected_arrrT   rU   rV   r   r   r   test_MyStructType   s    
z$TestStructRefBasic.test_MyStructTypec                 C   sZ   t dd }|dddd\}}| |jd | |jd | |jd | |jd d S )Nc                 S   s   t | |t ||fS r   r9   )xymnr   r   r   
mixed_type   s    zDTestStructRefBasic.test_MyStructType_mixed_types.<locals>.mixed_typer@   ffffff@y        333333@)   )r   rD   r   r   )r!   rd   r>   r?   r   r   r   test_MyStructType_mixed_types   s    
z0TestStructRefBasic.test_MyStructType_mixed_typesc                 C   s   t  }tdd|d< | |d jd | |d jd tdd|d< | |d jd | |d jd |d  jd7  _| |d jd | |d jd tdd	|d
< d S )Nr@   re   r>      gffffff
@rM      rf   gffffff@r?   )r   Dictr   rD   r   r   r!   tdr   r   r   test_MyStructType_in_dict   s    z,TestStructRefBasic.test_MyStructType_in_dictc              	   C   sn   |    t }tdd|d< | |d jd | |d jd | tj	d tdd|d< W 5 Q R X d S )Nr@   re   r>   zCannot cast numba.MyStructTyper?   )
Zdisable_leak_checkr   rj   r   rD   r   r   rF   r   ZTypingErrorrk   r   r   r   *test_MyStructType_in_dict_mixed_type_error   s    z=TestStructRefBasic.test_MyStructType_in_dict_mixed_type_errorc                 C   s&   t dd}t| | t|d d S )Nr@   rh      )r   r   rD   hash)r!   r2   r   r   r   *test_MyStructType_hash_no_typeof_recursion   s    
z=TestStructRefBasic.test_MyStructType_hash_no_typeof_recursionN)r   r   r   rI   rL   rW   r[   r_   rg   rm   rn   rq   r   r   r   r   r=      s   
r=   r(   c                 C   s   dd }|S )Nc                 S   s   | j | | j S r   r%   r&   r   r   r   impl   s    z%_ol_mystructtype_testme.<locals>.implr   )r!   r'   rr   r   r   r   _ol_mystructtype_testme   s    rs   r)   c                 C   s   dd }|S )Nc                 S   s   | j | jfS r   r%   r    r   r   r   get   s    z"_ol_mystructtype_prop.<locals>.getr   r!   rt   r   r   r   _ol_mystructtype_prop   s    rv   c                   @   s   e Zd Zdd Zdd ZdS )TestStructRefExtendingc                 C   s2   t dd }d}||}||}| || d S )Nc                 S   s(   t jdt jd}d}t||}|| S r\   )rP   rQ   rE   r   r(   )r`   r5   r6   objr   r   r   check  s    
z:TestStructRefExtending.test_overload_method.<locals>.checkro   r   Zpy_funcrS   r!   ry   r`   gotexpectr   r   r   test_overload_method   s    

z+TestStructRefExtending.test_overload_methodc                 C   s*   t dd }| }| }| || d S )Nc                  S   s$   t jdt jd} d}t| |}|jS r\   )rP   rQ   rE   r   r)   )r5   r6   rx   r   r   r   ry     s    
z=TestStructRefExtending.test_overload_attribute.<locals>.checkrz   r!   ry   r|   r}   r   r   r   test_overload_attribute  s
    
z.TestStructRefExtending.test_overload_attributeN)r   r   r   r~   r   r   r   r   r   rw      s   rw   c                 C   s   t | |d}|S r8   r9   )r`   ra   structr   r   r   caching_test_make  s    r   c                 C   s
   |  |S r   )r(   )r   zr   r   r   caching_test_use  s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestStructRefCachingc                 C   s@   t tj| _td| j| _| j  td tj	ddd d S )NZ	CACHE_DIRerrorignoreZ	typeguard)actionmodule)
r   r   r   Z
_cache_dirr   _cache_override	__enter__warningssimplefilterfilterwarningsr    r   r   r   setUp$  s
    

zTestStructRefCaching.setUpc                 C   s   | j d d d  t  d S r   )r   __exit__r   resetwarningsr    r   r   r   tearDown+  s    zTestStructRefCaching.tearDownc                    s@   fdd fdd fdd}|dd |d	d d S )
Nc                    s(     t| jd   t| jd d S )Nr@   r   rD   lenZ
cache_hitsZcache_missesstatsr    r   r   assert_cached0  s    zBTestStructRefCaching.test_structref_caching.<locals>.assert_cachedc                    s(     t| jd   t| jd d S )Nr   r@   r   r   r    r   r   assert_not_cached4  s    zFTestStructRefCaching.test_structref_caching.<locals>.assert_not_cachedc           	         s   t ddt}t ddt}tjd}d}d}|||}|||}|| | }|| | rv |j  |j n|j |j d S )NT)cachero      )r   r   r   rP   randomrS   r   )	cachedZ
check_makeZ	check_user5   r6   factorr2   r|   r}   r   r   r!   r   r   ry   8  s    



z:TestStructRefCaching.test_structref_caching.<locals>.checkF)r   Tr   )r!   ry   r   r   r   test_structref_caching/  s
    
z+TestStructRefCaching.test_structref_cachingN)r   r   r   r   r   r   r   r   r   r   r   #  s   r   c                   @   s   e Zd Zdd ZdS )PolygonStructTypec                 C   s6   dt |  | _tdttjfdt| fg}|S )Nznumba.PolygonStructType#valueparent)idnametupler   OptionalrC   )r!   r   r   r   r   preprocess_fieldsQ  s    z#PolygonStructType.preprocess_fieldsN)r   r   r   r   r   r   r   r   r   N  s   r   r   r   c                   @   s,   e Zd Zdd Zedd Zedd ZdS )PolygonStructc                 C   s   t j| ||S r   r   )r   r   r   r   r   r   r   c  s    zPolygonStruct.__new__c                 C   s   t | S r   )PolygonStruct_get_valuer    r   r   r   r   f  s    zPolygonStruct.valuec                 C   s   t | S r   )PolygonStruct_get_parentr    r   r   r   r   j  s    zPolygonStruct.parentN)r   r   r   r   r,   r   r   r   r   r   r   r   b  s
   
r   c                 C   s   | j S r   r   r    r   r   r   r   o  s    r   c                 C   s   | j S r   )r   r    r   r   r   r   t  s    r   flipc                 C   s   dd }|S )Nc                 S   s   | j d k	r| j  | _ d S r   r   r    r   r   r   rr     s    
z%_ol_polygon_struct_flip.<locals>.implr   )r!   rr   r   r   r   _ol_polygon_struct_flip  s    r   c                 C   s   dd }|S )Nc                 S   s   | j | jfS r   )r   r   r    r   r   r   rt     s    z$_ol_polygon_struct_prop.<locals>.getr   ru   r   r   r   _ol_polygon_struct_prop  s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestStructRefForwardTypingc                 C   s,   t dd }d}||}|}| || d S )Nc                 S   s.   t d d }t d d }| |_||_| |_|jjS r   )r   r   r   r`   ZpolyZp_polyr   r   r   ry     s    

zCTestStructRefForwardTyping.test_same_type_assignment.<locals>.checkr]   r   rS   r{   r   r   r   test_same_type_assignment  s    
z4TestStructRefForwardTyping.test_same_type_assignmentc                 C   s.   t dd }d}||}| }| || d S )Nc                 S   s@   t d d }t d d }| |_||_| |_|  |j  |jjS r   )r   r   r   r   r   r   r   r   ry     s    


z>TestStructRefForwardTyping.test_overload_method.<locals>.checkro   r   r{   r   r   r   r~     s    

z/TestStructRefForwardTyping.test_overload_methodc                 C   s&   t dd }| }d}| || d S )Nc                  S   s   t dd } | jd S )N   r   )r   r)   )rx   r   r   r   ry     s    
zATestStructRefForwardTyping.test_overload_attribute.<locals>.checkr   r   r   r   r   r   r     s
    
z2TestStructRefForwardTyping.test_overload_attributeN)r   r   r   r   r~   r   r   r   r   r   r     s   r   )7r   r   numpyrP   Znumbar   r   r   r   Z
numba.corer   Znumba.experimentalr   Znumba.extendingr   r	   Znumba.tests.supportr
   r   r   r   rJ   rB   r   rR   r0   rK   r   r   r.   Zdefine_proxyr3   r1   r7   r:   r   r"   r$   r*   r=   rs   rv   rw   r   r   r   r   AnyZpolygon_struct_typer   r   r   r   r   r   r   r   r   r   <module>   s   !








p

+



