o
    i/                     @   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                   @      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   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/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                   @   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 name   z%expecting a Numba Type for field type)rJ   {   )r   	StructRefint64assertEqualZ
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)rR   rS   r   registerr   rN   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intprA   ZassertNotIsInstancer   assertPreciseEqualr#   r4   )r%   r?   r@   Z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 )NrY   rZ   r[   r   r   )r\   r]   r^   rA   assertIsInstancer   r   rR   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 NrY   rZ      )r\   r]   rQ   copyrD   rd   r   r_   r   r4   rP   r   )r%   r?   r@   Zfirst_expected_arrr`   ra   rb   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_typerL   ffffff@y        333333@)   )r   rP   r   r   )r%   rp   rJ   rK   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 )NrL   rq   rJ      gffffff
@rY      rr   gffffff@rK   )r   Dictr   rP   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 )NrL   rq   rJ   zCannot cast numba.MyStructTyperK   )
Zdisable_leak_checkr   rv   r   rP   r   r   rR   r   ZTypingErrorrw   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 )NrL   rt      )r   r   rP   hash)r%   r<   r   r   r   *test_MyStructType_hash_no_typeof_recursion   s   
z=TestStructRefBasic.test_MyStructType_hash_no_typeof_recursionN)r   r   r   rU   rX   rc   rg   rk   rs   ry   rz   r}   r   r   r   r   rI      s    
rI   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 rh   )r\   r]   rQ   r   r/   )rl   r?   r@   objr   r   r   check  s   

z:TestStructRefExtending.test_overload_method.<locals>.checkr{   r   Zpy_funcr_   r%   r   rl   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 rh   )r\   r]   rQ   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   )rl   rm   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 )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                    (     t| jd   t| jd d S )NrL   r   rP   lenZ
cache_hitsZcache_missesstatsr$   r   r   assert_cached0     zBTestStructRefCaching.test_structref_caching.<locals>.assert_cachedc                    r   )Nr   rL   r   r   r$   r   r   assert_not_cached4  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)cacher{      )r   r   r   r\   randomr_   r   )	cachedZ
check_makeZ	check_user?   r@   factorr<   r   r   r   r   r%   r   r   r   8  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   #  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   OptionalrO   )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   r   r   r   )r!   r   r   r   r   r   r    c  r0   zPolygonStruct.__new__c                 C   r"   r   )PolygonStruct_get_valuer$   r   r   r   r   f  r&   zPolygonStruct.valuec                 C   r"   r   )PolygonStruct_get_parentr$   r   r   r   r   j  r&   zPolygonStruct.parentN)r   r   r   r    r6   r   r   r   r   r   r   r   b  s    
r   c                 C   rE   r   r   r$   r   r   r   r   o  rH   r   c                 C   rE   r   )r   r$   r   r   r   r   t  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   rl   ZpolyZp_polyr   r   r   r     s   

zCTestStructRefForwardTyping.test_same_type_assignment.<locals>.checkri   r   r_   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>.checkr{   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   )7r   r   numpyr\   Znumbar   r   r   r   Z
numba.corer   Znumba.experimentalr   Znumba.extendingr   r	   Znumba.tests.supportr
   r   r   r   rV   rN   r   r^   r:   rW   r   r   r8   Zdefine_proxyr=   r;   rA   rD   r#   r'   r*   r4   rI   r   r   r   r   r   r   r   AnyZpolygon_struct_typer   r   r   r   r   r   r   r   r   r   <module>   s    !








p

+



