
    sh)                        S r SSKrSSKrSSKJr  SSKJr  SSKrSSK	J
r
  SSKrSSKJrJrJr  SSKJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJrJrJrJrJrJ r   SSK!J"r"  SSK#J$r$J%r%  Sq&S r'\ S 5       r(S r) " S S\RT                  5      r+ " S S\RX                  5      r-\R\                  " \+5      S 5       r/\" \-5       " S S\R`                  Rb                  Rd                  Rf                  5      5       r4\" \+5      S 5       r5\" \+\Rl                  \Rn                  \RX                  5      S 5       r8\" \-5      S 5       r9\" \-S5      S 5       r:\S 5       r; " S S\%\$5      r<\=S :X  a  \R|                  " 5         gg)!z!
Test NumPy Subclassing features
    N)Numberwraps)ir)njittypeofobjmode)cgutilstypestyping)box)TypingError)
cpu_target)	intrinsiclower_builtinoverload_classmethodregister_modeltype_callabletypeof_implregister_jitable)numpy_support)TestCaseMemoryLeakMixinc                  >    [         b  [         R                  U 5        g g N)_loggerappendargss    w/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/tests/test_ndarray_subclasses.py_do_logr!      s    t     c                  \    [        5          [        U 6   S S S 5        g ! , (       d  f       g = fr   )r	   r!   r   s    r    logr$   $   s    	 
s   	
+c                 0   ^  [        T 5      U 4S j5       nU$ )Nc                     > / q T" U 0 UD6$ r   )r   )r   kwargsfns     r    coreuse_logger.<locals>.core+   s     4"6""r"   r   )r(   r)   s   ` r    
use_loggerr+   *   s     
2Y# # Kr"   c                       \ rS rSrSrS rSrg)MyArray3   Tc                 l   US:X  Ga(  S n/ nU H  n[        U[        5      (       a  UR                  U5        M+  [        U[        U 5      [        R
                  45      (       a  [        U[        U 5      5      (       a<  UR                  [        R
                  " UR                  UR                  U5      5        OUR                  U5        Ub  XWR                  :w  a  [        S5      eM  UR                  nM  [        s  $    U" U0 UD6nU R                  UR                  UR                  U5      $ [        $ )N__call__zinconsistent sizes)
isinstancer   r   typenpndarrayshapedtype	TypeErrorNotImplemented	__class__)	selfufuncmethodinputsr'   Nscalarsinprets	            r    __array_ufunc__MyArray.__array_ufunc__=   s    ZAGc6**NN3'd4j"**%=>>!#tDz22rzz#))SYY'LMs+}		>"+,@"AA *  II))  +F+C>>#))SYY<<!!r"    N)__name__
__module____qualname____firstlineno__ __numba_array_subtype_dispatch__rB   __static_attributes__rD   r"   r    r-   r-   3   s    '+$"r"   r-   c                   H   ^  \ rS rSrSU 4S jjrS rS r\S 5       rSr	U =r
$ )MyArrayTypeV   c           	      <   > SU SU SU S3n[         TU ]  XX4XVS9  g )NzMyArray(z, ))readonlyalignedname)super__init__)r:   r6   ndimlayoutrP   rQ   rR   r9   s          r    rT   MyArrayType.__init__W   s6    $r%6(!4f!( 	 	5r"   c                     [         er   )NotImplementedError)r:   r   r'   s      r    copyMyArrayType.copy\   s
     "!r"   c                     US:X  ac  U H:  n[        U[        R                  [        R                  45      (       a  M4  [        s  $    [        S U 5       5      (       a  [        $ [        $ [        $ )Nr0   c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )r1   rL   ).0r@   s     r    	<genexpr>.MyArrayType.__array_ufunc__.<locals>.<genexpr>h   s     B6C:c;//6s   )r1   r   Arrayr   r8   allrL   )r:   r;   r<   r=   r'   r@   s         r    rB   MyArrayType.__array_ufunc__b   sY    Z!#U\\'BCC))  B6BBB%%!!r"   c                     [         $ r   )r-   )r:   s    r    box_typeMyArrayType.box_typen   s    r"   rD   )FT)rE   rF   rG   rH   rT   rZ   rB   propertyre   rJ   __classcell__r9   s   @r    rL   rL   V   s&    5
"
"  r"   rL   c                     [         R                  " U R                  5      n[         R
                  " U 5      nU R                  R                  (       + n[        X R                  X4S9$ ! [         a    [	        SU R                  < 35      ef = f)NzUnsupported array dtype: )rP   )
r   
from_dtyper6   rY   
ValueError
map_layoutflags	writeablerL   rU   )valcr6   rV   rP   s        r    typeof_ta_ndarrayrr   s   sv    G((3 %%c*F99&&&HuhhBB	  G#))EFFGs    A' '$Bc                   (   ^  \ rS rSrU 4S jrSrU =r$ )MyArrayTypeModel~   c                   > UR                   nS[        R                  " UR                  5      4S[        R                  4S[        R
                  4S[        R
                  4S[        R                  " UR                  5      4S[        R                  " [        R
                  U5      4S[        R                  " [        R
                  U5      4S[        R
                  4/n[        [        U ]+  XU5        g )	Nmeminfoparentnitemsitemsizedatar5   stridesextra_field)rU   r   MemInfoPointerr6   pyobjectintpCPointerUniTuplerS   rt   rT   )r:   dmmfe_typerU   membersr9   s        r    rT   MyArrayTypeModel.__init__   s    ||,,W]];<u~~&uzz"$U^^GMM23ennUZZ67uzz489EJJ'	
 	.sWEr"   rD   )rE   rF   rG   rH   rT   rJ   rh   ri   s   @r    rt   rt   ~   s    F Fr"   rt   c                     S nU$ )Nc                 V    [        UR                  [        U 5      UR                  S9nU$ )N)r6   rU   rV   )rL   r6   lenrV   )r5   r6   bufouts       r    typertype_myarray.<locals>.typer   s&    ))#e*SZZ
 
r"   rD   )contextr   s     r    type_myarrayr      s     Lr"   c           	      n   SSK JnJn  UR                  S   nUu  pxn	U" U5      " XU	S9n
U" UR                  5      " X5      nU" UU
R
                  U
R                  U
R                  U
R                  U
R                  S9  UR                  5       nU R                  R                  XR                  U5        U$ )Nr   )
make_arraypopulate_array)value)r{   r5   r|   rz   rw   )numba.np.arrayobjr   r   r   return_typer{   r5   r|   rz   rw   	_getvaluenrtincref)r   buildersigr   r   r   srcarytyr5   r6   r   srcaryretaryrA   s                r    impl_myarrayr      s    <xx|HE#!'#>F (:F6!>>"OO!>>+ 


CKKw5Jr"   c                    UR                   R                  (       d   e[        R                  " U R                  5      nUR
                  R                  UR
                  R                  U5      5      nUR                  R                  XU5      nUR                   R                  R                  UR                  X5        U$ r   )r   
enable_nrtr   as_dtyper6   env_manager
read_const	add_constpyapinrt_adapt_ndarray_to_pythonr   decrefr   )typrp   rq   np_dtypedtypeptrnewarys         r    	box_arrayr      s    99%%cii0H}}''(?(?(IJHWW008DFIIMMC-Mr"   	_allocatec                     S nU$ )z;Implements a Numba-only classmethod on the array type.
    c                 0    [        SX5        [        X5      $ )NLOG _ol_array_allocate)r$   allocator_MyArray)cls	allocsizealigns      r    impl _ol_array_allocate.<locals>.impl   s    $i7 22r"   rD   )r   r   r   r   s       r    _ol_array_allocater      s    3 Kr"   c                     S n[         R                  " [         R                  5      n[        R                  " XAU5      nXS4$ )Nc                    U R                   R                  5         Uu  pEUR                  n[        R                  " S5      n[
        R                  n[        R                  " US5      n	[
        R                  " XiSS9n
UR                  U
S5      n[        R                  " U[
        R                  Xx/5      n[
        R                  " XlSS9nUR                  R                  S5        [        U[        R                  5      (       a!  U R!                  ["        R$                  U5      nOUR&                  U:X  d   S5       eUR                  XX[/5      nSUl        U$ )	N    rD   "_nrt_get_sample_external_allocator)rR   'NRT_MemInfo_alloc_safe_aligned_externalnoaliaszalign must be a uint32allocate_MyArray)r   _require_nrtmoduler   IntTyper
   	voidptr_tFunctionTypeget_or_insert_functioncallintp_treturn_valueadd_attributer1   builtinsintget_constantr   uint32r2   rR   )r   r   r   r   sizer   modu32voidptrget_alloc_fntyget_alloc_fn	ext_allocfntyr(   r   s                  r    r   allocator_MyArray.<locals>.impl   s     "nnjjn##"555&J
 LLr2	w(FG++E
 	%%i0eX\\**((u=E::$>&>>$||Bu 89&	r"   )r   r~   r   r   	signature)	typingctxr   r   r   mipr   s         r    r   r      s7    6 

u}}
-C


35
1C9r"   c                   f    \ rS rSrS rS rS rS r\R                  S 5       r
S r\S 5       rS	rg
)TestNdarraySubclasses   c                 R   [         S 5       n[        R                  " S5      n[        UR                  UR
                  U5      nUR                  U5      nU" U5      nU R                  U[        5        U R                  [        U5      [        U5      5        U R                  XE5        g)z6This tests the path to `MyArrayType.box_type`
        c                     U S-   $ )N   rD   as    r    foo6TestNdarraySubclasses.test_myarray_return.<locals>.foo   s    q5Lr"      Nr   r3   aranger-   r5   r6   py_funcassertIsInstanceassertIsr2   assertPreciseEqualr:   r   r   r   expectedgots         r    test_myarray_return)TestNdarraySubclasses.test_myarray_return   s     
	 
	 iilCIIsyy#.;;q>!fc7+d8nd3i0.r"   c                 R   [         S 5       n[        R                  " S5      n[        UR                  UR
                  U5      nUR                  U5      nU" U5      nU R                  U[        5        U R                  [        U5      [        U5      5        U R                  XE5        g )Nc                     U $ r   rD   r   s    r    r   8TestNdarraySubclasses.test_myarray_passthru.<locals>.foo   s    Hr"   r   r   r   s         r    test_myarray_passthru+TestNdarraySubclasses.test_myarray_passthru   s    		 
	 iilCIIsyy#.;;q>!fc7+d8nd3i0.r"   c                    [         S 5       n[        R                  " S5      nUR                  U5      nU" U5      nU R	                  U[
        5        U R                  [        U5      [        U5      5        U R                  X45        g )Nc                 D    [        U R                  U R                  U 5      $ r   r-   r5   r6   )r   s    r    r   7TestNdarraySubclasses.test_myarray_convert.<locals>.foo  s    399cii55r"   r   )	r   r3   r   r   r   r-   r   r2   r   )r:   r   r   r   r   s        r    test_myarray_convert*TestNdarraySubclasses.test_myarray_convert  sn    		6 
	6 iil;;s##hc7+d8nd3i0.r"   c                     S n[         R                  " S5      nU" U5      nU R                  [        U5      [         R                  5        U R                  X2U-   5        g )Nc                 v    [        U R                  U R                  U 5      n[        R                  " U5      U -   $ r   r-   r5   r6   r3   asarrayr   	converteds     r    r   ?TestNdarraySubclasses.test_myarray_asarray_non_jit.<locals>.foo  s,    		399c:I::i(3..r"   r   )r3   r   r   r2   r4   r   r:   r   r   r   s       r    test_myarray_asarray_non_jit2TestNdarraySubclasses.test_myarray_asarray_non_jit  sG    	/ iil#hd3i,3Y/r"   c                     U R                  5         [        S 5       n[        R                  " S5      nU" U5      nU R	                  [        U5      [        R                  5        g )Nc                 p    [        U R                  U R                  U 5      n[        R                  " U5      $ r   r   r   s     r    r   7TestNdarraySubclasses.test_myarray_asarray.<locals>.foo!  s'    		399c:I::i((r"   r   )disable_leak_checkr   r3   r   r   r2   r4   r  s       r    test_myarray_asarray*TestNdarraySubclasses.test_myarray_asarray  sP    !		) 
	) iil#h 	d3i,r"   c                 0   [         S 5       n[        R                  " S[        R                  S9nU R	                  [
        5       nU" U5        S S S 5        SnU H(  nU R                  U[        WR                  5      5        M*     g ! , (       d  f       N?= f)Nc                 L    [        U R                  U R                  U 5      nX-   $ r   r   r   s     r    r   ATestNdarraySubclasses.test_myarray_ufunc_unsupported.<locals>.foo-  s!    		399c:I((r"   r   r6   )zNo implementation of functionz3add(MyArray(1, float32, C), MyArray(1, float32, C)))	r   r3   r   float32assertRaisesr   assertInstr	exception)r:   r   r   raisesmsgms         r    test_myarray_ufunc_unsupported4TestNdarraySubclasses.test_myarray_ufunc_unsupported,  sz    		) 
	) ii,{+vH ,FAMM!S!1!123  ,+s   	B
Bc                    [         S 5       n[        R                  " S[        R                  S9n[	        UR
                  UR                  U5      nUR                  U5      nU" U5      nU R                  XT5        [        n[        R                  n[        UR                  5      nUR                  U5      n	U R                  USUS   R                  U	4SUS   R                  U	4/5        g)z*
Checks that our custom allocator is used
c                 r    U [         R                  " U R                  [         R                  S9-   nU S-   nX4$ )Nr  y              ?)r3   r   r   float64)r   brq   s      r    r   BTestNdarraySubclasses.test_myarray_allocator_override.<locals>.foo@  s/    BIIaffBJJ77ABA4Kr"   r   r  r   r   r   N)r   r3   r   r  r-   r5   r6   r   r   r   r   target_contextr   get_preferred_array_alignmentassertEqualnbytes)
r:   r   r   r   r   r   logged_lines	targetctxnb_dtyper   s
             r    test_myarray_allocator_override5TestNdarraySubclasses.test_myarray_allocator_override;  s    
 
	 
	
 ii,CIIsyy#.;;q>!f.--	#))$77A%x{'9'95A%x{'9'95A(
 	r"   rD   N)rE   rF   rG   rH   r   r   r   r  unittestexpectedFailurer	  r  r+   r%  rJ   rD   r"   r    r   r      sI    //
/0 - -4  r"   r   __main__)?__doc__r   r'  numbersr   	functoolsr   numpyr3   llvmliter   numbar   r   r	   
numba.corer
   r   r   numba.core.pythonapir   numba.core.errorsr   numba.core.registryr   numba.extendingr   r   r   r   r   r   r   numba.npr   numba.tests.supportr   r   r   r!   r$   r+   r4   r-   ra   rL   registerrr   r)   	datamodelmodelsStructModelrt   r   r   DTyper   r   r   r   r   rE   mainrD   r"   r    <module>r=     s          ' ' - - $ ) */ / / # 9 
  
 "bjj  "F%++ : gC C Fuzz++22>> F F  w  wU[[A B, [  k;/ 0  BmOX m` zMMO r"   