o
    i0                     @   s~  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&ed!d" Z'G d#d$ d$e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/d0 Z-d1d2 Z.G d3d4 d4eeZ/ejG d5d6 d6e
jZ0e0d7e
j1fd8e
j1ffdZ2G d9d: d:ejZ3ed;d< Z4ed=d> Z5ee3e0d7d8g ee0d?d@dA Z6ee0d*dBdC Z7G dDdE dEeeZ8dS )Fz%
Test mutable struct, aka, structref
    N)typednjiterrorstypeof)types)	structref)overload_methodoverload_attribute)MemoryLeakMixinTestCasetemp_directoryoverride_configc                   @      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   Y/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/numba/tests/test_struct_ref.pyr          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      t j| ||S Nr   StructRefProxy__new__)clsr   r   r   r   r   r    "   s   zMyStruct.__new__c                 C      t | S r   )
get_valuesselfr   r   r   r   *      zMyStruct.valuesc                 C   s
   t | |S r   )
set_values)r%   valr   r   r   r   .      
c                 C   r"   r   )get_counterr$   r   r   r   r   2   r&   zMyStruct.counterc                 C      | j | | j S r   r   r   r%   argr   r   r   testme6      zMyStruct.testmec                 C      | j | jfS r   r,   r$   r   r   r   prop9      zMyStruct.propc                 C   r"   r   )compute_fieldsr$   r   r   r   __hash__=   s   zMyStruct.__hash__N)r   r   r   r    propertyr   setterr   r/   r2   r5   r   r   r   r   r       s    



r   c                   @   r   )MyStructTypezTTest associated with this type represent the higher-level uses of
    structef.
    Nr   r   r   r   r   r8   A   r   r8   c                 C   s   t t}t|| | |S r   )r   newmy_struct_tymy_struct_init)r   r   str   r   r   	my_structS   s   
r=   c                 C   s   || _ || _d S r   r,   )r%   r   r   r   r   r   r;   Z   s   
r;   c                 C   s.   t | |d}| j|j7  _| j|9  _|S )Nr   )r=   r   r   )vsctrr<   r   r   r   ctor_by_intrinsic`   s   rA   c                 C   s   t | |dS Nr,   r   )r?   r@   r   r   r   ctor_by_classh   r3   rD   c                 C      | j S r   r   r<   r   r   r   r#   m      r#   c                 C   s
   || _ d S r   rF   )r<   r(   r   r   r   r'   r   r)   r'   c                 C   rE   r   r>   rG   r   r   r   r*   w   rH   r*   c                 C   s   | j | j S r   r,   rG   r   r   r   r4   |   r3   r4   c                  C   s$   t dd} t dd}| | u | |u fS )N      rC   )cdr   r   r   test_structref_is   s   

rM   c                   @      e Zd Zdd ZdS )TestStructRefIsc                 C   s&   t  }| |d  | |d  d S Nr      )rM   
assertTrueassertFalse)r%   resr   r   r   test_is_identity   s   z TestStructRefIs.test_is_identityN)r   r   r   rU   r   r   r   r   rO      s    rO   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 d    n1 sNw   Y  | td t dg W d    d S 1 skw   Y  d S )Nabzexpecting a str for field namerQ   z%expecting a Numba Type for field type)rW   {   )r   	StructRefint64assertEqual
field_dictfloat64assertRaisesRegex
ValueError)r%   srr   r   r   test_structref_type   s   "z&TestStructRefBasic.test_structref_typec                 C   sx   |  td ttj W d    n1 sw   Y  |  td ttjt W d    d S 1 s5w   Y  d S )Nzcannot register)r_   r`   r   registerr   rZ   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
   dtype   )	nparangeintprA   assertNotIsInstancer   assertPreciseEqualr#   r4   )r%   r?   r@   first_expected	first_gotsecond_expected
second_gotr   r   r   test_MySimplerStructType   s   
z+TestStructRefBasic.test_MySimplerStructTypec                 C   s   t jdt jd}d}t||}| |tj | td |j	 W d    n1 s*w   Y  | td |j
 W d    d S 1 sDw   Y  d S )Nrf   rg   ri   r   r   )rj   rk   rl   rA   assertIsInstancer   r   r_   AttributeErrorr   r   )r%   r?   r@   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 Nrf   rg      )rj   rk   r^   copyrD   rt   r   rn   r   r4   r\   r   )r%   r?   r@   first_expected_arrrp   rq   rr   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   rC   )xymnr   r   r   
mixed_type   s   zDTestStructRefBasic.test_MyStructType_mixed_types.<locals>.mixed_typerQ   ffffff@y        333333@)rJ   )r   r\   r   r   )r%   r   rW   rX   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 )NrQ   r   rW      gffffff
@rf      rJ   gffffff@rX   )r   Dictr   r\   r   r   r%   tdr   r   r   test_MyStructType_in_dict   s   z,TestStructRefBasic.test_MyStructType_in_dictc                 C   s   |    t }tdd|d< | |d jd | |d jd | tj	d tdd|d< W d    d S 1 s;w   Y  d S )NrQ   r   rW   zCannot cast numba.MyStructTyperX   )
disable_leak_checkr   r   r   r\   r   r   r_   r   TypingErrorr   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 )NrQ   r   rI   )r   r   r\   hash)r%   r<   r   r   r   *test_MyStructType_hash_no_typeof_recursion   s   
z=TestStructRefBasic.test_MyStructType_hash_no_typeof_recursionN)r   r   r   rb   re   rs   rw   r|   r   r   r   r   r   r   r   r   rV      s    
rV   r/   c                 C   s   dd }|S )Nc                 S   r+   r   r,   r-   r   r   r   impl  r0   z%_ol_mystructtype_testme.<locals>.implr   )r%   r.   r   r   r   r   _ol_mystructtype_testme      r   r2   c                 C      dd }|S )Nc                 S   r1   r   r,   r$   r   r   r   get     z"_ol_mystructtype_prop.<locals>.getr   r%   r   r   r   r   _ol_mystructtype_prop  r   r   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 rx   )rj   rk   r^   r   r/   )r}   r?   r@   objr   r   r   check  s   

z:TestStructRefExtending.test_overload_method.<locals>.checkrI   r   py_funcrn   r%   r   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 rx   )rj   rk   r^   r   r2   )r?   r@   r   r   r   r   r     s   
z=TestStructRefExtending.test_overload_attribute.<locals>.checkr   r%   r   r   r   r   r   r   test_overload_attribute  s
   
z.TestStructRefExtending.test_overload_attributeN)r   r   r   r   r   r   r   r   r   r     s    r   c                 C   s   t | |d}|S rB   rC   )r}   r~   structr   r   r   caching_test_make(  s   r   c                 C   s
   |  |S r   )r/   )r   zr   r   r   caching_test_use-  s   
r   c                   @   $   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 )N	CACHE_DIRerrorignore	typeguard)actionmodule)
r   r   r   
_cache_dirr   _cache_override	__enter__warningssimplefilterfilterwarningsr$   r   r   r   setUp2  s
   

zTestStructRefCaching.setUpc                 C   s   | j d d d  t  d S r   )r   __exit__r   resetwarningsr$   r   r   r   tearDown9  s   zTestStructRefCaching.tearDownc                    s@   fdd fdd fdd}|dd |d	d d S )
Nc                    (     t| jd   t| jd d S )NrQ   r   r\   len
cache_hitscache_missesstatsr$   r   r   assert_cached>     zBTestStructRefCaching.test_structref_caching.<locals>.assert_cachedc                    r   rP   r   r   r$   r   r   assert_not_cachedB  r   zFTestStructRefCaching.test_structref_caching.<locals>.assert_not_cachedc           	         s   t ddt}t ddt}tjd}d}d}|||}|||}|| | }|| | r< |j  |j d S |j |j d S )NT)cacherI      )r   r   r   rj   randomrn   r   )	cached
check_make	check_user?   r@   factorr<   r   r   r   r   r%   r   r   r   F  s   



z:TestStructRefCaching.test_structref_caching.<locals>.checkF)r   Tr   )r%   r   r   r   r   test_structref_caching=  s
   
z+TestStructRefCaching.test_structref_cachingN)r   r   r   r   r   r   r   r   r   r   r   1  s    r   c                   @   rN   )PolygonStructTypec                 C   s6   dt |  | _tdttjfdt| fg}|S )Nznumba.PolygonStructType#valueparent)idnametupler   Optionalr[   )r%   r   r   r   r   preprocess_fields_  s   z#PolygonStructType.preprocess_fieldsN)r   r   r   r   r   r   r   r   r   \  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   r   r   r   )r!   r   r   r   r   r   r    q  r0   zPolygonStruct.__new__c                 C   r"   r   )PolygonStruct_get_valuer$   r   r   r   r   t  r&   zPolygonStruct.valuec                 C   r"   r   )PolygonStruct_get_parentr$   r   r   r   r   x  r&   zPolygonStruct.parentN)r   r   r   r    r6   r   r   r   r   r   r   r   p  s    
r   c                 C   rE   r   r   r$   r   r   r   r   }  rH   r   c                 C   rE   r   )r   r$   r   r   r   r     rH   r   flipc                 C   r   )Nc                 S   s   | j d ur| j  | _ d S d S r   r   r$   r   r   r   r     s   
z%_ol_polygon_struct_flip.<locals>.implr   )r%   r   r   r   r   _ol_polygon_struct_flip  s   r   c                 C   r   )Nc                 S   r1   r   )r   r   r$   r   r   r   r     r   z$_ol_polygon_struct_prop.<locals>.getr   r   r   r   r   _ol_polygon_struct_prop  r   r   c                   @   r   )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}   polyp_polyr   r   r   r     s   

zCTestStructRefForwardTyping.test_same_type_assignment.<locals>.checkry   r   rn   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   r     s   


z>TestStructRefForwardTyping.test_overload_method.<locals>.checkrI   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   r2   )r   r   r   r   r     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   )9r   r   numpyrj   numbar   r   r   r   
numba.corer   numba.experimentalr   numba.extendingr   r	   numba.tests.supportr
   r   r   r   rc   rZ   r   rl   r:   rd   r   r   r8   define_proxyr=   r;   rA   rD   r#   r'   r*   r4   rM   rO   rV   r   r   r   r   r   r   r   Anypolygon_struct_typer   r   r   r   r   r   r   r   r   r   <module>   s    !









p

+



