
    xKg/                     D   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
j0                  dd fde
j0                  fg      Z ej4                  eej6                          G d dej6                        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j6                        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      Z6y)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y)MySimplerStructTypezV
    Test associated with this type represent the lowest level uses of structref.
    N__name__
__module____qualname____doc__     _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_struct_ref.pyr   r           	r   r   valuescounter)fieldsc                   r    e Zd Zd Zed        Zej                  d        Zed        Zd Zed        Z	d Z
y)	MyStructc                 D    t         j                  j                  | ||      S Nr   StructRefProxy__new__)clsr   r   s      r   r#   zMyStruct.__new__"   s     ''//VW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                 2    | j                   | j                  fS r    r/   r'   s    r   propzMyStruct.prop9   s    {{DLL((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       sf    F     ]]% % ! !0 ) )$r   r   c                       e Zd ZdZy)MyStructTypezTTest associated with this type represent the higher-level uses of
    structef.
    Nr   r   r   r   r<   r<   A   r   r   r<   c                 R    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                      || _         || _        y r    r/   )r(   r   r   s      r   r@   r@   Z   s    DKDLr   c                     t        | |      }|xj                  |j                  z  c_        |xj                  |z  c_        |S )Nr   )rB   r   r   )vsctrrA   s      r   ctor_by_intrinsicrH   `   s3    	2s	#BIIIJJ#J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    99r   c                     || _         y r    rN   )rA   r+   s     r   r*   r*   r   s	    BIr   c                     | j                   S r    rE   rO   s    r   r-   r-   w   s    ::r   c                 4    | j                   | j                  z   S r    r/   rO   s    r   r7   r7   |   s    99rzz!!r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestStructRefBasicc                    t        j                  dt         j                  fg      }| j                  |j                  d   t         j                         t        j                  dt         j                  fdt         j
                  fg      }| j                  |j                  d   t         j                         | j                  |j                  d   t         j
                         | j                  t        d      5  t        j                  dt         j                  fg       d d d        | j                  t        d      5  t        j                  dg       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)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   __sEKK012s+U[[9__sEKK032FGHs+U[[9s+U]];##J$DFOOa-./F ##J$KMOOZL)M MF FM Ms   ;'E  E, E),E5c                 F   | j                  t        d      5  t        j                  t        j
                         d d d        | j                  t        d      5  t        j                  t        j
                  t               d d d        y # 1 sw Y   QxY w# 1 sw Y   y xY w)Nzcannot register)r_   r`   r   registerr   rZ   define_boxingr   r'   s    r   test_invalid_usesz$TestStructRefBasic.test_invalid_uses   sj    ##J0ABu/ C##J0AB##EOOX> CB CBBBs   $B)BBB c                     t        j                  dt         j                        }d}||z   }t        ||      }| j	                  |t
               | j                  |t        |             |||z  z   }t        |      }| j                  ||       y )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    YYr)b%b#.	 	  H5
90EF(C#I6#I.
<r   c                    t        j                  dt         j                        }d}t        ||      }| j	                  |t
        j                         | j                  t        d      5  |j                   d d d        | j                  t        d      5  |j                   d d d        y # 1 sw Y   5xY w# 1 sw Y   y xY w)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   s    YYr)#B,gy'?'?@##NH=NN >##NI>OO ?> >=>>s   *B+B7+B47C c                 j   t        j                  dt         j                        }d}|j                         }t	        ||      }| j                  |t               | j                  ||j                         ||z   }t        |      }| j                  ||       | j                  |j                  |       y 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    YYr,WWY!"c*	i2 2I4D4DE,s2#I.
<**C0r   c                    t         d        } |dddd      \  }}| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y )Nc                 2    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   sz    		2 
	2 !S$-11%C(4(D)r   c                 *   t        j                         }t        dd      |d<   | j                  |d   j                  d       | j                  |d   j
                  d       t        dd      |d<   | j                  |d   j                  d       | j                  |d   j
                  d       |d   xj                  dz  c_        | j                  |d   j                  d       | j                  |d   j
                  d       t        dd	      |d
<   y )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    ZZ\1c"3C+C#.1c"3C+C#.
3"C,C#.1c"3r   c                 n   | j                          t        j                         }t        dd      |d<   | j	                  |d   j
                  d       | j	                  |d   j                  d       | j                  t        j                  d      5  t        dd      |d<   d d d        y # 1 sw Y   y xY w)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    !ZZ\1c"3C+C#. ##F$6$6$EG sA&BsG	G G Gs   B++B4c                 h    t        dd      }t        |       | j                  t        |      d       y )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
*# '&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Kr   r5   c                     d }|S )Nc                 2    | j                   | j                  fS r    r/   r'   s    r   getz"_ol_mystructtype_prop.<locals>.get   s    {{DLL((r   r   r(   r   s     r   _ol_mystructtype_propr      s    )Jr   c                       e Zd Zd Zd Zy)TestStructRefExtendingc                 v    t         d        }d} ||      }|j                  |      }| j                  ||       y )Nc                     t        j                  dt         j                        }d}t        ||      }|j	                  |       S r|   )rl   rm   r^   r   r2   )r   rF   rG   objs       r   checkz:TestStructRefExtending.test_overload_method.<locals>.check  s5    2RZZ0BC2s#C::a= r   r   r   py_funcrp   r(   r   r   gotexpects        r   test_overload_methodz+TestStructRefExtending.test_overload_method   sB    		! 
	! Ahq!V,r   c                 n    t         d        } |       }|j                         }| j                  ||       y )Nc                      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  s0    2RZZ0BC2s#C88Or   r   r(   r   r   r   s       r   test_overload_attributez.TestStructRefExtending.test_overload_attribute  s8    		 
	 gV,r   N)r   r   r   r   r   r   r   r   r   r      s    -
-r   r   c                      t        | |      }|S rJ   rK   )r   r   structs      r   caching_test_maker     s    Q*FMr   c                 $    | j                  |      S r    )r2   )r   zs     r   caching_test_user     s    ==r   c                       e Zd Zd Zd Zd Zy)TestStructRefCachingc                    t        t        j                        | _        t	        d| j                        | _        | j
                  j                          t        j                  d       t        j                  dd       y )N	CACHE_DIRerrorignore	typeguard)actionmodule)
r   r   r   
_cache_dirr   _cache_override	__enter__warningssimplefilterfilterwarningsr'   s    r   setUpzTestStructRefCaching.setUp$  sX    ()=)F)FG.{DOOL&&(g&xDr   c                 f    | j                   j                  d d d        t        j                          y r    )r   __exit__r   resetwarningsr'   s    r   tearDownzTestStructRefCaching.tearDown+  s&    %%dD$7 r   c                 P      fd fd fd} |d        |d       y )Nc                     j                  t        | j                        d       j                  t        | j                        d       y )NrX   r   r\   len
cache_hitscache_missesstatsr(   s    r   assert_cachedzBTestStructRefCaching.test_structref_caching.<locals>.assert_cached0  9    S!1!12A6S!3!34a8r   c                     j                  t        | j                        d       j                  t        | j                        d       y )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                  j	                  d      }d}d} |||      } |||      }||z  |z   }j                  ||       | r% 	|j                          	|j                         y  
|j                          
|j                         y )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j../ioo.!*"2"23!)//2r   F)r   Tr   )r(   r   r   r   s   ` @@r   test_structref_cachingz+TestStructRefCaching.test_structref_caching/  s$    	9	9	3$ 	UTr   N)r   r   r   r   r   r   r   r   r   r   r   #  s    E!r   r   c                       e Zd Zd Zy)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  sP    .r$xj9	ennU[[12u~~d+,
 
 r   N)r   r   r   r   r   r   r   r   r   N  s    r   r   r   r   c                   2    e Zd Zd Zed        Zed        Zy)PolygonStructc                 D    t         j                  j                  | ||      S r    r!   )r$   r   r   s      r   r#   zPolygonStruct.__new__c  s    ''//UF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  s0    D - - . .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                 B    | j                   | j                    | _         y y r    r   r'   s    r   r   z%_ol_polygon_struct_flip.<locals>.impl  s    ::!**DJ "r   r   )r(   r   s     r   _ol_polygon_struct_flipr     s    % Kr   c                     d }|S )Nc                 2    | j                   | j                  fS r    )r   r   r'   s    r   r   z$_ol_polygon_struct_prop.<locals>.get  s    zz4;;&&r   r   r   s     r   _ol_polygon_struct_propr     s    'Jr   c                       e Zd Zd Zd Zd Zy)TestStructRefForwardTypingc                 X    t         d        }d} ||      }|}| j                  ||       y )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  s9    		% 
	% AhV,r   c                 Z    t         d        }d} ||      }| }| j                  ||       y )Nc                     t        d d       }t        d d       }| |_        ||_        | |_        |j                          |j                  j                          |j                  j                  S r    )r   r   r   r   r  s      r   r   z>TestStructRefForwardTyping.test_overload_method.<locals>.check  sX     t,D"4.FDJ DKFLIIKKK;;$$$r   r   r  r   s        r   r   z/TestStructRefForwardTyping.test_overload_method  s;    		% 
	% AhV,r   c                 R    t         d        } |       }d}| j                  ||       y )Nc                  8    t        dd       } | j                  d   S )N   r   )r   r5   )r   s    r   r   zATestStructRefForwardTyping.test_overload_attribute.<locals>.check  s    4(C88A;r   r
  r  r   s       r   r   z2TestStructRefForwardTyping.test_overload_attribute  s2    		 
	 gV,r   N)r   r   r   r  r   r   r   r   r   r   r     s    --"-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     s     - -  ( ? 
 	%// 	 	 #uzz!}%	5::'>? 	  +Y-E-E F$y'' $B 	5?? 	 	 	  y    
   , ,       " "m&( m&` x( ) L&) *-_h -6
(?H (V 
 
 
 (eiiuyy0  
.I,, 
.     	  h "F+ , %v. /)-( )-r   