
    J/Ph/                        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	e
j                              Z ed
e
j        dd         fde
j        fg          Z ej        eej                    G d dej                  Zej         G d de
j                              Z ej        eed
dg           ed             Zed             Z ed             Z!ed             Z"ed             Z#ed             Z$ed             Z%ed             Z& G d dee          Z' eed          d             Z( eed          d             Z) G d d ee          Z*d! Z+d" Z, G d# d$ee          Z-ej         G d% d&e
j                              Z. e.d'e
j/        fd(e
j/        ff          Z0 G d) d*ej                  Z1ed+             Z2ed,             Z3 ej        e1e.d'd(g            ee.d-          d.             Z4 ee.d          d/             Z5 G d0 d1ee          Z6dS )2z%
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__     [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_struct_ref.pyr   r                	Dr   r   valuescounter)fieldsc                       e Zd Zd Zed             Zej        d             Zed             Zd Zed             Z	d Z
dS )	MyStructc                 D    t           j                            | ||          S Nr   StructRefProxy__new__)clsr   r   s      r   r#   zMyStruct.__new__"   s     '//VWEEEr   c                      t          |           S r    )
get_valuesselfs    r   r   zMyStruct.values*   s    $r   c                 "    t          | |          S r    )
set_values)r(   vals     r   r   zMyStruct.values.   s    $$$$r   c                      t          |           S r    )get_counterr'   s    r   r   zMyStruct.counter2   s    4   r   c                 &    | j         |z  | j        z   S r    r   r   r(   args     r   testmezMyStruct.testme6       {S 4<//r   c                     | j         | j        fS r    r/   r'   s    r   propzMyStruct.prop9   s    {DL((r   c                      t          |           S r    )compute_fieldsr'   s    r   __hash__zMyStruct.__hash__=   s    d###r   N)r   r   r   r#   propertyr   setterr   r2   r5   r8   r   r   r   r   r       s        F F F     X  ]% % ]% ! ! X!0 0 0 ) ) X)$ $ $ $ $r   r   c                       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   r   r   r<   c                 Z    t          j        t                    }t          || |           |S r    )r   newmy_struct_tymy_struct_init)r   r   sts      r   	my_structrB   S   s(    	|	$	$B2vw'''Ir   c                 "    || _         || _        d S r    r/   )r(   r   r   s      r   r@   r@   Z   s    DKDLLLr   c                 r    t          | |          }|xj        |j        z  c_        |xj        |z  c_        |S )Nr   )rB   r   r   )vsctrrA   s      r   ctor_by_intrinsicrH   `   s;    	2s	#	#	#BIIIIJJ#JJIr   c                 $    t          | |          S Nr/   r   )rF   rG   s     r   ctor_by_classrL   h   s    2s++++r   c                     | j         S r    r   rA   s    r   r&   r&   m   s
    9r   c                     || _         d S r    rN   )rA   r+   s     r   r*   r*   r   s    BIIIr   c                     | j         S r    rE   rO   s    r   r-   r-   w   s
    :r   c                      | j         | j        z   S r    r/   rO   s    r   r7   r7   |   s    9rz!!r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestStructRefBasicc                    t          j        dt           j        fg          }|                     |j        d         t           j                   t          j        dt           j        fdt           j        fg          }|                     |j        d         t           j                   |                     |j        d         t           j                   |                     t          d          5  t          j        dt           j        fg           d d d            n# 1 swxY w Y   |                     t          d          5  t          j        dg           d d d            d S # 1 swxY w Y   d S )Nabzexpecting a str for field name   z%expecting a Numba Type for field type)rV   {   )r   	StructRefint64assertEqual
field_dictfloat64assertRaisesRegex
ValueError)r(   srs     r   test_structref_typez&TestStructRefBasic.test_structref_type   s   _sEK0122s+U[999_sEK032FGHHs+U[999s+U];;;##J$DF F 	0 	0Oa-.///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 ##J$KM M 	* 	*OZL)))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s$   ,"DD!D E##E'*E'c                 X   |                      t          d          5  t          j        t          j                   d d d            n# 1 swxY w Y   |                      t          d          5  t          j        t          j        t                     d d d            d S # 1 swxY w Y   d S )Nzcannot register)r_   r`   r   registerr   rZ   define_boxingr   r'   s    r   test_invalid_usesz$TestStructRefBasic.test_invalid_uses   s   ##J0ABB 	0 	0u///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0##J0ABB 	? 	?#EOX>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?s#   AAA-%BB#&B#c                 J   t          j        dt           j                  }d}||z   }t          ||          }|                     |t
                     |                     |t          |                     |||z  z   }t          |          }|                     ||           d S )N
   dtype   )	nparangeintprH   assertNotIsInstancer   assertPreciseEqualr&   r7   )r(   rF   rG   first_expected	first_gotsecond_expected
second_gots          r   test_MySimplerStructTypez+TestStructRefBasic.test_MySimplerStructType   s    Yr)))b%b#..	 	  H555
90E0EFFF(C#I6#I..
<<<<<r   c                    t          j        dt           j                  }d}t          ||          }|                     |t
          j                   |                     t          d          5  |j	         d d d            n# 1 swxY w Y   |                     t          d          5  |j
         d d d            d S # 1 swxY w Y   d S )Nrh   ri   rk   r   r   )rl   rm   rn   rH   assertIsInstancer   r"   r_   AttributeErrorr   r   )r(   rF   rG   wrappers       r   -test_MySimplerStructType_wrapper_has_no_attrsz@TestStructRefBasic.test_MySimplerStructType_wrapper_has_no_attrs   s8   Yr)))#B,,gy'?@@@##NH== 	 	NN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	##NI>> 	 	OO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s$   .BB	B(B==CCc                    t          j        dt           j                  }d}|                                }t	          ||          }|                     |t                     |                     ||j                   ||z   }t          |          }|                     ||           | 
                    |j        |           d S Nrh   ri      )rl   rm   r^   copyrL   rw   r   rp   r   r7   r\   r   )r(   rF   rG   first_expected_arrrr   rs   rt   s          r   test_MyStructTypez$TestStructRefBasic.test_MyStructType   s    Yr,,,WWYY!"c**	i222 2I4DEEE,s2#I..
<<<*C00000r   c                     t           d             } |dddd          \  }}|                     |j        d           |                     |j        d           |                     |j        d           |                     |j        d           d S )Nc                 B    t          | |          t          ||          fS r    rK   )xymns       r   
mixed_typezDTestStructRefBasic.test_MyStructType_mixed_types.<locals>.mixed_type   s    Aq>>8Aq>>11r   rX   ffffff@y        333333@)   )r   r\   r   r   )r(   r   rV   rW   s       r   test_MyStructType_mixed_typesz0TestStructRefBasic.test_MyStructType_mixed_types   s    		2 	2 
	2 z!S$--11%%%C(((4(((D)))))r   c                 V   t          j                    }t          dd          |d<   |                     |d         j        d           |                     |d         j        d           t          dd          |d<   |                     |d         j        d           |                     |d         j        d           |d         xj        dz  c_        |                     |d         j        d           |                     |d         j        d           t          dd	          |d
<   d S )NrX   r   rV      gffffff
@rh      r   gffffff@rW   )r   Dictr   r\   r   r   r(   tds     r   test_MyStructType_in_dictz,TestStructRefBasic.test_MyStructType_in_dict   s   Z\\1c""3C+++C#...1c""3C+++C#...
3"C,,,C#...1c""3r   c                    |                                   t          j                    }t          dd          |d<   |                     |d         j        d           |                     |d         j        d           |                     t          j	        d          5  t          dd          |d<   d d d            d S # 1 swxY w Y   d S )NrX   r   rV   zCannot cast numba.MyStructTyperW   )
disable_leak_checkr   r   r   r\   r   r   r_   r   TypingErrorr   s     r   *test_MyStructType_in_dict_mixed_type_errorz=TestStructRefBasic.test_MyStructType_in_dict_mixed_type_error   s   !!!Z\\1c""3C+++C#... ##F$6$EG G 	' 	' sA&&BsG		' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   B>>CCc                     t          dd          }t          |           |                     t          |          d           d S )NrX   r      )r   r   r\   hash)r(   rA   s     r   *test_MyStructType_hash_no_typeof_recursionz=TestStructRefBasic.test_MyStructType_hash_no_typeof_recursion   s>     a^^r


b1%%%%%r   N)r   r   r   rb   rf   ru   rz   r   r   r   r   r   r   r   r   rT   rT      s        * * *? ? ?= = =  1 1 1
* 
* 
*# # # ' ' '& & & & &r   rT   r2   c                     d }|S )Nc                 &    | j         |z  | j        z   S r    r/   r0   s     r   implz%_ol_mystructtype_testme.<locals>.impl   r3   r   r   )r(   r1   r   s      r   _ol_mystructtype_testmer      s    0 0 0Kr   r5   c                     d }|S )Nc                     | j         | j        fS r    r/   r'   s    r   getz"_ol_mystructtype_prop.<locals>.get   s    {DL((r   r   r(   r   s     r   _ol_mystructtype_propr      s    ) ) )Jr   c                       e Zd Zd Zd ZdS )TestStructRefExtendingc                     t           d             }d} ||          }|                    |          }|                     ||           d S )Nc                     t          j        dt           j                  }d}t          ||          }|                    |           S r|   )rl   rm   r^   r   r2   )r   rF   rG   objs       r   checkz:TestStructRefExtending.test_overload_method.<locals>.check  s<    2RZ000BC2s##C::a== r   r   r   py_funcrp   r(   r   r   gotexpects        r   test_overload_methodz+TestStructRefExtending.test_overload_method   s\    		! 	! 
	! eAhhq!!V,,,,,r   c                     t           d             } |            }|                                }|                     ||           d S )Nc                  t    t          j        dt           j                  } d}t          | |          }|j        S r|   )rl   rm   r^   r   r5   )rF   rG   r   s      r   r   z=TestStructRefExtending.test_overload_attribute.<locals>.check  s3    2RZ000BC2s##C8Or   r   r(   r   r   r   s       r   test_overload_attributez.TestStructRefExtending.test_overload_attribute  sQ    		 	 
	 eggV,,,,,r   N)r   r   r   r   r   r   r   r   r   r      s2        - - -
- 
- 
- 
- 
-r   r   c                 (    t          | |          }|S rJ   rK   )r   r   structs      r   caching_test_maker     s    Q***FMr   c                 ,    |                      |          S r    )r2   )r   zs     r   caching_test_user     s    ==r   c                        e Zd Zd Zd Zd ZdS )TestStructRefCachingc                     t          t          j                  | _        t	          d| j                  | _        | j                                         t          j        d           t          j	        dd           d S )N	CACHE_DIRerrorignore	typeguard)actionmodule)
r   r   r   
_cache_dirr   _cache_override	__enter__warningssimplefilterfilterwarningsr'   s    r   setUpzTestStructRefCaching.setUp$  sk    ()=)FGG.{DOLL&&(((g&&&xDDDDDDr   c                 d    | j                             d d d            t          j                     d S r    )r   __exit__r   resetwarningsr'   s    r   tearDownzTestStructRefCaching.tearDown+  s2    %%dD$777     r   c                 ^      fd fd fd} |d            |d           d S )Nc                                          t          | j                  d                                t          | j                  d           d S )NrX   r   r\   len
cache_hitscache_missesstatsr(   s    r   assert_cachedzBTestStructRefCaching.test_structref_caching.<locals>.assert_cached0  K    S!122A666S!344a88888r   c                                          t          | j                  d                                t          | j                  d           d S )Nr   rX   r   r   s    r   assert_not_cachedzFTestStructRefCaching.test_structref_caching.<locals>.assert_not_cached4  r   r   c                     t          d          t                    } t          d          t                    }t          j                            d          }d}d} |||          } |||          }||z  |z   }                    ||           | r" 	|j                    	|j                   d S  
|j                    
|j                   d S )NT)cacher      )r   r   r   rl   randomrp   r   )cached
check_make	check_userF   rG   factorrA   r   r   r   r   r(   s            r   r   z:TestStructRefCaching.test_structref_caching.<locals>.check8  s    )D)))*;<<J(4((()9::I!!!$$BCFB$$B)B''C&[3&F##C000 3j.///io.....!!*"2333!!)/22222r   F)r   Tr   )r(   r   r   r   s   ` @@r   test_structref_cachingz+TestStructRefCaching.test_structref_caching/  s    	9 	9 	9 	9 	9	9 	9 	9 	9 	9	3 	3 	3 	3 	3 	3 	3$ 	UTr   N)r   r   r   r   r   r   r   r   r   r   r   #  sD        E E E! ! !    r   r   c                       e Zd Zd ZdS )PolygonStructTypec                     dt          |            | _        t          dt          j        t          j                  fdt          j        |           fg          }|S )Nznumba.PolygonStructType#valueparent)idnametupler   Optionalr[   )r(   r   s     r   preprocess_fieldsz#PolygonStructType.preprocess_fieldsQ  sX    9r$xx99	enU[112u~d++,
  
 r   N)r   r   r   r   r   r   r   r   r   N  s#            r   r   r   r   c                   @    e Zd Zd Zed             Zed             ZdS )PolygonStructc                 D    t           j                            | ||          S r    r!   )r$   r   r   s      r   r#   zPolygonStruct.__new__c  s    '//UFCCCr   c                      t          |           S r    )PolygonStruct_get_valuer'   s    r   r   zPolygonStruct.valuef  s    &t,,,r   c                      t          |           S r    )PolygonStruct_get_parentr'   s    r   r   zPolygonStruct.parentj  s    '---r   N)r   r   r   r#   r9   r   r   r   r   r   r   r   b  s\        D D D - - X- . . X. . .r   r   c                     | j         S r    r   r'   s    r   r   r   o  s
    :r   c                     | j         S r    )r   r'   s    r   r   r   t  s
    ;r   flipc                     d }|S )Nc                 2    | j         | j          | _         d S d S r    r   r'   s    r   r   z%_ol_polygon_struct_flip.<locals>.impl  s!    :!*DJJJ "!r   r   )r(   r   s     r   _ol_polygon_struct_flipr     s    % % % Kr   c                     d }|S )Nc                     | j         | j        fS r    )r   r   r'   s    r   r   z$_ol_polygon_struct_prop.<locals>.get  s    z4;&&r   r   r   s     r   _ol_polygon_struct_propr     s    ' ' 'Jr   c                        e Zd Zd Zd Zd ZdS )TestStructRefForwardTypingc                 p    t           d             }d} ||          }|}|                     ||           d S )Nc                     t          d d           }t          d d           }| |_        ||_        | |_        |j        j        S r    )r   r   r   r   polyp_polys      r   r   zCTestStructRefForwardTyping.test_same_type_assignment.<locals>.check  s@     t,,D"4..FDJ DKFL;$$r   r}   r   rp   r   s        r   test_same_type_assignmentz4TestStructRefForwardTyping.test_same_type_assignment  sP    		% 	% 
	% eAhhV,,,,,r   c                 r    t           d             }d} ||          }| }|                     ||           d S )Nc                     t          d d           }t          d d           }| |_        ||_        | |_        |                                 |j                                         |j        j        S r    )r   r   r   r   r  s      r   r   z>TestStructRefForwardTyping.test_overload_method.<locals>.check  sa     t,,D"4..FDJ DKFLIIKKKK;$$r   r   r  r   s        r   r   z/TestStructRefForwardTyping.test_overload_method  sR    		% 	% 
	% eAhhV,,,,,r   c                 j    t           d             } |            }d}|                     ||           d S )Nc                  <    t          dd           } | j        d         S )N   r   )r   r5   )r   s    r   r   zATestStructRefForwardTyping.test_overload_attribute.<locals>.check  s    4((C8A;r   r
  r  r   s       r   r   z2TestStructRefForwardTyping.test_overload_attribute  sI    		 	 
	 eggV,,,,,r   N)r   r   r   r  r   r   r   r   r   r   r     sA        - - -- - -"- - - - -r   r   )7r   r   numpyrl   numbar   r   r   r   
numba.corer   numba.experimentalr   numba.extendingr	   r
   numba.tests.supportr   r   r   r   rd   rZ   r   rn   r?   re   r"   r   r<   define_proxyrB   r@   rH   rL   r&   r*   r-   r7   rT   r   r   r   r   r   r   r   Anypolygon_struct_typer   r   r   r   r   r   r   r   r   <module>r     s8         - - - - - - - - - - - -       ( ( ( ( ( ( ? ? ? ? ? ? ? ?           
 	 	 	 	 	%/ 	 	 	 #"uz!!!}%	5:'>?   	 +Y-E F F F$ $ $ $ $y' $ $ $B 	 	 	 	 	5? 	 	 	 	 y        
    , , ,          " " "m& m& m& m& m&( m& m& m&` x((  )( L&))  *)- - - - -_h - - -6  
  ( ( ( ( (?H ( ( (V 
 
 
 
 
 
 
 
 ('eiuy0    
. 
. 
. 
. 
.I, 
. 
. 
.       	 h   "F++  ,+ %v..  /.)- )- )- )- )-( )- )- )- )- )-r   