
    J/Ph)                        d Z ddlZddlZddlmZ ddlmZ ddlZddl	m
Z
 ddlZddlmZmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZmZmZmZm Z  ddl!m"Z" ddl#m$Z$m%Z% da&d Z'e d             Z(d Z) G d dej*                  Z+ G d dej,                  Z- ej.        e+          d             Z/ ee-           G d dej0        j1        j2        j3                              Z4 ee+          d             Z5 ee+ej6        ej7        ej,                  d             Z8 ee-          d             Z9 ee-d          d             Z:ed             Z; G d de%e$          Z<e=d k    r ej>                     dS dS )!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                  L    t           t                               |            d S d S N)_loggerappendargss    c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/tests/test_ndarray_subclasses.py_do_logr!      s(    t     c                  f    t                      5  t          |   d d d            d S # 1 swxY w Y   d S r   )r	   r!   r   s    r    logr$   $   sy    	                   s   
&**c                 <     t                      fd            }|S )Nc                      g a  | i |S r   )r   )r   kwargsfns     r    corezuse_logger.<locals>.core+   s     r4"6"""r"   r   )r(   r)   s   ` r    
use_loggerr*   *   s3    
2YY# # # # Y# Kr"   c                       e Zd ZdZd ZdS )MyArrayTc                 P   |dk    rd }g }|D ]}t          |t                    r|                    |           -t          |t          |           t          j        f          rt          |t          |                     r4|                    t	          j        |j        |j        |                     n|                    |           |||j        k    rt          d          |j        }t          c S  ||i |}| 
                    |j        |j        |          S t          S )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__zMyArray.__array_ufunc__=   s,   ZAG * *c6** *NN3''''d4jj"*%=>> *!#tDzz22 ,rz#)SY'L'LMMMMs+++}	>>"+,@"A"AA *  I))))%+F++C>>#)SY<<<!!r"   N)__name__
__module____qualname__ __numba_array_subtype_dispatch__r@    r"   r    r,   r,   3   s)        '+$" " " " "r"   r,   c                   B     e Zd Zd fd	Zd Zd Zed             Z xZS )MyArrayTypeFTc                 n    d| d| d| d}t                                          ||||||           d S )NzMyArray(z, ))readonlyalignedname)super__init__)r8   r4   ndimlayoutrJ   rK   rL   r7   s          r    rN   zMyArrayType.__init__W   s[    4$44%446444fx!(t 	 	5 	5 	5 	5 	5r"   c                     t           r   )NotImplementedError)r8   r   r'   s      r    copyzMyArrayType.copy\   s
     "!r"   c                     |dk    r[|D ]1}t          |t          j        t          j        f          s	t          c S 2t          d |D                       rt          S t          S t          S )Nr.   c              3   @   K   | ]}t          |t                    V  d S r   )r/   rG   ).0r>   s     r    	<genexpr>z.MyArrayType.__array_ufunc__.<locals>.<genexpr>h   s,      BBC:c;//BBBBBBr"   )r/   r   Arrayr   r6   allrG   )r8   r9   r:   r;   r'   r>   s         r    r@   zMyArrayType.__array_ufunc__b   s{    Z * *!#U\'BCC *))))* BB6BBBBB &%%!!r"   c                     t           S r   )r,   )r8   s    r    box_typezMyArrayType.box_typen   s    r"   )FT)	rA   rB   rC   rN   rS   r@   propertyr[   __classcell__r7   s   @r    rG   rG   V   sv        5 5 5 5 5 5
" " "
" 
" 
"   X    r"   rG   c                     	 t          j        | j                  }n%# t          $ r t	          d| j                  w xY wt          j        |           }| j        j         }t          || j	        ||          S )NzUnsupported array dtype: )rJ   )
r   
from_dtyper4   rR   
ValueError
map_layoutflags	writeablerG   rO   )valcr4   rP   rJ   s        r    typeof_ta_ndarrayrg   s   s    G(33 G G Gj#))EFFFG%c**F9&&HuchBBBBs    ">c                        e Zd Z fdZ xZS )MyArrayTypeModelc                    |j         }dt          j        |j                  fdt          j        fdt          j        fdt          j        fdt          j        |j                  fdt          j        t          j        |          fdt          j        t          j        |          fdt          j        fg}t          t          |           
                    |||           d S )	Nmeminfoparentnitemsitemsizedatar3   stridesextra_field)rO   r   MemInfoPointerr4   pyobjectintpCPointerUniTuplerM   ri   rN   )r8   dmmfe_typerO   membersr7   s        r    rN   zMyArrayTypeModel.__init__   s    |,W];;<u~&uz"$U^GM223enUZ667uz4889EJ'	
 	%%..sGWEEEEEr"   )rA   rB   rC   rN   r]   r^   s   @r    ri   ri   ~   sA        F F F F F F F F Fr"   ri   c                     d }|S )Nc                 X    t          |j        t          |           |j                  }|S )N)r4   rO   rP   )rG   r4   lenrP   )r3   r4   bufouts       r    typerztype_myarray.<locals>.typer   s.    )#e**SZ
 
 
 
r"   rE   )contextr   s     r    type_myarrayr      s       Lr"   c                 \   ddl m}m} |j        d         }|\  }}}	  ||          | ||	          }
  ||j                  | |          } |||
j        |
j        |
j        |
j        |
j	                   |
                                }| j                            ||j        |           |S )Nr   )
make_arraypopulate_array)value)ro   r3   rp   rn   rk   )numba.np.arrayobjr   r   r   return_typero   r3   rp   rn   rk   	_getvaluenrtincref)r   buildersigr   r   r   srcarytyr3   r4   r}   srcaryretaryr?   s                r    impl_myarrayr      s    <<<<<<<<x|HE5#!ZZ!!'7#>>>F )ZZ(('::FN6!>"O!>+ + + + 



CKw555Jr"   c                 <   |j         j        sJ t          j        | j                  }|j                            |j                            |                    }|j        	                    | ||          }|j         j
                            |j        | |           |S r   )r   
enable_nrtr   as_dtyper4   env_manager
read_const	add_constpyapinrt_adapt_ndarray_to_pythonr   decrefr   )typre   rf   np_dtypedtypeptrnewarys         r    	box_arrayr      s    9%ci00H}''(?(?(I(IJJHW00c8DDFIMC---Mr"   	_allocatec                     d }|S )z;Implements a Numba-only classmethod on the array type.
    c                 D    t          d||           t          ||          S )NLOG _ol_array_allocate)r$   allocator_MyArray)cls	allocsizealigns      r    implz _ol_array_allocate.<locals>.impl   s%    $i777 E222r"   rE   )r   r   r   r   s       r    _ol_array_allocater      s    3 3 3 Kr"   c                 x    d }t          j        t           j                  }t          j        |||          }||fS )Nc                    | j                                          |\  }}|j        }t          j        d          }t
          j        }t          j        |d          }	t          j        ||	d          }
|	                    |
d          }t          j        |t
          j
        ||g          }t          j        ||d          }|j                            d           t          |t          j                  r!|                     t"          j        |          }n|j        |k    s
J d            |	                    ||||g          }d|_        |S )	N    rE   "_nrt_get_sample_external_allocator)rL   '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_attributer/   builtinsintget_constantr   uint32r0   rL   )r   r   r   r   sizer   modu32voidptrget_alloc_fntyget_alloc_fn	ext_allocfntyr(   r   s                  r    r   zallocator_MyArray.<locals>.impl   s@     """enjnn#"555&J
 
 
 LLr22	wg(FGG+E
 
 
 	%%i000eX\** 	?((u==EE:$$$&>$$$||Bui 899&	r"   )r   rr   r   r   	signature)	typingctxr   r   r   mipr   s         r    r   r      sC      6 
u}
-
-C

3	5
1
1C9r"   c                   b    e Zd Zd Zd Zd Zd Zej        d             Z	d Z
ed             ZdS )	TestNdarraySubclassesc                    t           d             }t          j        d          }t          |j        |j        |          }|                    |          } ||          }|                     |t                     |                     t          |          t          |                     | 
                    ||           dS )z6This tests the path to `MyArrayType.box_type`
        c                     | dz   S )N   rE   as    r    fooz6TestNdarraySubclasses.test_myarray_return.<locals>.foo   s    q5Lr"      Nr   r1   aranger,   r3   r4   py_funcassertIsInstanceassertIsr0   assertPreciseEqualr8   r   r}   r   expectedgots         r    test_myarray_returnz)TestNdarraySubclasses.test_myarray_return   s     
	 	 
	 illCIsy#..;;q>>c!ffc7+++d8nnd3ii000#.....r"   c                    t           d             }t          j        d          }t          |j        |j        |          }|                    |          } ||          }|                     |t                     |                     t          |          t          |                     | 
                    ||           d S )Nc                     | S r   rE   r   s    r    r   z8TestNdarraySubclasses.test_myarray_passthru.<locals>.foo   s    Hr"   r   r   r   s         r    test_myarray_passthruz+TestNdarraySubclasses.test_myarray_passthru   s    		 	 
	 illCIsy#..;;q>>c!ffc7+++d8nnd3ii000#.....r"   c                 P   t           d             }t          j        d          }|                    |          } ||          }|                     |t
                     |                     t          |          t          |                     |                     ||           d S )Nc                 8    t          | j        | j        |           S r   r,   r3   r4   )r}   s    r    r   z7TestNdarraySubclasses.test_myarray_convert.<locals>.foo  s    39ci555r"   r   )	r   r1   r   r   r   r,   r   r0   r   )r8   r   r}   r   r   s        r    test_myarray_convertz*TestNdarraySubclasses.test_myarray_convert  s    		6 	6 
	6 ill;;s##c#hhc7+++d8nnd3ii000#.....r"   c                     d }t          j        d          } ||          }|                     t          |          t           j                   |                     |||z              d S )Nc                 f    t          | j        | j        |           }t          j        |          | z   S r   r,   r3   r4   r1   asarrayr}   	converteds     r    r   z?TestNdarraySubclasses.test_myarray_asarray_non_jit.<locals>.foo  s,    	39c::I:i((3..r"   r   )r1   r   r   r0   r2   r   r8   r   r}   r   s       r    test_myarray_asarray_non_jitz2TestNdarraySubclasses.test_myarray_asarray_non_jit  si    	/ 	/ 	/ illc#hhd3ii,,,S3Y/////r"   c                     |                                   t          d             }t          j        d          } ||          }|                     t          |          t          j                   d S )Nc                 `    t          | j        | j        |           }t          j        |          S r   r   r   s     r    r   z7TestNdarraySubclasses.test_myarray_asarray.<locals>.foo!  s'    	39c::I:i(((r"   r   )disable_leak_checkr   r1   r   r   r0   r2   r   s       r    test_myarray_asarrayz*TestNdarraySubclasses.test_myarray_asarray  sm    !!!		) 	) 
	) illc#hh 	d3ii,,,,,r"   c                 >   t           d             }t          j        dt          j                  }|                     t
                    5 } ||           d d d            n# 1 swxY w Y   d}|D ]*}|                     |t          |j                             +d S )Nc                 B    t          | j        | j        |           }||z   S r   r   r   s     r    r   zATestNdarraySubclasses.test_myarray_ufunc_unsupported.<locals>.foo-  s"    	39c::Iy((r"   r   r4   )zNo implementation of functionz3add(MyArray(1, float32, C), MyArray(1, float32, C)))	r   r1   r   float32assertRaisesr   assertInstr	exception)r8   r   r}   raisesmsgms         r    test_myarray_ufunc_unsupportedz4TestNdarraySubclasses.test_myarray_ufunc_unsupported,  s    		) 	) 
	) i,,,{++ 	vCHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	F 	4 	4AMM!S!1223333	4 	4s   A##A'*A'c                    t           d             }t          j        dt          j                  }t	          |j        |j        |          }|                    |          } ||          }|                     ||           t          }t          j        }t          |j                  }|                    |          }	|                     |d|d         j        |	fd|d         j        |	fg           dS )z:
        Checks that our custom allocator is used
        c                 d    | t          j        | j        t           j                  z   }| dz   }||fS )Nr   y              ?)r1   r   r   float64)r   brf   s      r    r   zBTestNdarraySubclasses.test_myarray_allocator_override.<locals>.foo@  s1    BIafBJ7777ABAa4Kr"   r   r   r   r   r   N)r   r1   r   r   r,   r3   r4   r   r   r   r   target_contextr   get_preferred_array_alignmentassertEqualnbytes)
r8   r   r}   r   r   r   logged_lines	targetctxnb_dtyper   s
             r    test_myarray_allocator_overridez5TestNdarraySubclasses.test_myarray_allocator_override;  s    
 
	 	 
	
 i,,,CIsy#..;;q>>c!ffX...-	#)$$77AA%x{'95A%x{'95A(
 	 	 	 	 	r"   N)rA   rB   rC   r   r   r   r   unittestexpectedFailurer   r   r*   r  rE   r"   r    r   r      s        / / // / /
/ 
/ 
/0 0 0 - - -4 4 4   Z  r"   r   __main__)?__doc__r   r  numbersr   	functoolsr   numpyr1   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*   r2   r,   rX   rG   registerrg   r)   	datamodelmodelsStructModelri   r   rv   DTyper   r   r   r   r   rA   mainrE   r"   r    <module>r     s                             ' ' ' ' ' ' ' ' ' ' - - - - - - - - - - $ $ $ $ $ $ ) ) ) ) ) ) * * * * * */ / / / / / / / / / / / / / / / / / # " " " " " 9 9 9 9 9 9 9 9   
   
   "  "  "  "  "bj  "  "  "F    %+   : gC C C F F F F Fuz+2> F F F  w   wU[AA  BA, [   k;//  0/   Bm m m m mOX m m m` zHMOOOOO r"   