Ë
    èÿæi¿)  ã                   ó  — 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jT                  «      Z+ G d„ dejX                  «      Z- ej\                  e+«      d„ «       Z/ ee-«       G d„ dej`                  jb                  jd                  jf                  «      «       Z4 ee+«      d„ «       Z5 ee+ejl                  ejn                  ejX                  «      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|                  «        yy)!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                  ó<   — t         �t         j                  | «       y y ©N)Ú_loggerÚappend©Úargss    úx/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/tests/test_ndarray_subclasses.pyÚ_do_logr!      s   € ÜÐÜ�‰�tÕð ó    c                  óR   — t        «       5  t        | Ž  d d d «       y # 1 sw Y   y xY wr   )r	   r!   r   s    r    Úlogr$   $   s   € ä	�Ü�‰÷ 
�‰ús   ‹	�&c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ó   •— g a  ‰| i |¤ŽS r   )r   )r   ÚkwargsÚfns     €r    Úcorezuse_logger.<locals>.core+   s   ø€ ð ˆÙ�4Ð"˜6Ñ"Ð"r"   r   )r(   r)   s   ` r    Ú
use_loggerr*   *   s    ø€ Ü
ˆ2ƒYó#ó ð#ð €Kr"   c                   ó   — e Zd ZdZd„ Zy)ÚMyArrayTc                 ó@  — |dk(  �rd }g }|D ]Û  }t        |t        «      r|j                  |«       Œ%t        |t        | «      t        j
                  f«      r‹t        |t        | «      «      r;|j                  t	        j
                  |j                  |j                  |«      «       n|j                  |«       |�||j                  k7  sŒ½t        d«      ‚|j                  }ŒÕt        c S   ||i |¤Ž}| j                  |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Û�Ü˜c¤6Ô*Ø—N‘N 3Õ'Ü ¤d¨4£j´"·*±*Ð%=Ô>Ü! #¤t¨D£zÔ2ØŸ™¤r§z¡z°#·)±)¸S¿Y¹YÈÓ'LÕMàŸ™ sÔ+Ø�}Ø §	¡	›>Ü"+Ð,@Ó"AÐAàŸI™I™ä)Ò)ð ñ ˜Ð+ FÑ+ˆCØ—>‘> #§)¡)¨S¯Y©Y¸Ó<Ð<ä!Ð!r"   N)Ú__name__Ú
__module__Ú__qualname__Ú __numba_array_subtype_dispatch__r@   © r"   r    r,   r,   3   s   „ à'+Ð$ó"r"   r,   c                   ó<   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zed„ «       Zˆ xZS )ÚMyArrayTypec                 óH   •— d|› d|› d|› d�}t         ‰| �  ||||||¬«       y )NzMyArray(z, Ú))ÚreadonlyÚalignedÚname)ÚsuperÚ__init__)r8   r4   ÚndimÚlayoutrJ   rK   rL   r7   s          €r    rN   zMyArrayType.__init__W   s<   ø€ Ø˜$˜˜r % ¨¨6¨(°!Ð4ˆÜ‰Ñ˜  f°xØ!(¨tð 	õ 	5r"   c                 ó   — t         ‚r   )ÚNotImplementedError)r8   r   r'   s      r    ÚcopyzMyArrayType.copy\   s
   € ô "Ð!r"   c                 óÆ   — |dk(  rW|D ]4  }t        |t        j                  t        j                  f«      rŒ.t        c S  t        d„ |D «       «      rt        S t        S t        S )Nr.   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr   )r/   rG   )Ú.0r>   s     r    Ú	<genexpr>z.MyArrayType.__array_ufunc__.<locals>.<genexpr>h   s   è ø€ ÐB¹6°C”:˜c¤;×/¹6ùs   ‚)r/   r   ÚArrayr   r6   ÚallrG   )r8   r9   r:   r;   r'   r>   s         r    r@   zMyArrayType.__array_ufunc__b   sS   € Ø�ZÒÛ�Ü! #¬¯©´U·\±\Ð'BÕCÜ)Ò)ð ô ÑB¹6Ó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   s&   ø„ õ5ò
"ò
"ð ñó ôr"   rG   c                 ó  — 	 t        j                  | j                  «      }t        j
                  | «      }| j                  j                   }t        || j                  ||¬«      S # t        $ r t	        d| j                  ›�«      ‚w xY w)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   sz   € ðGÜ×(Ñ(¨¯©Ó3ˆô ×%Ñ% cÓ*€FØ—9‘9×&Ñ&Ð&€HÜ�u˜cŸh™h¨¸ÔBÐBøô	 ò GÝ¸#¿)º)ÐEÓFÐFðGús   ‚A& Á&"B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        | �+  |||«       y )	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—~‘~Ð&Ø”u—z‘zÐ"ØœŸ™Ð$Ø”U—^‘^ G§M¡MÓ2Ð3Ø”e—n‘n¤U§Z¡Z°Ó6Ð7ØœŸ™¤u§z¡z°4Ó8Ð9ØœEŸJ™JÐ'ð	
ˆô 	Ô Ñ.¨s°G¸WÕEr"   )rA   rB   rC   rN   r]   r^   s   @r    ri   ri   ~   s   ø„ ÷Fð Fr"   ri   c                 ó   — d„ }|S )Nc                 ó\   — t        |j                  t        | «      |j                  ¬«      }|S )N)r4   rO   rP   )rG   r4   ÚlenrP   )r3   r4   ÚbufÚouts       r    Útyperztype_myarray.<locals>.typer‘   s&   € ÜØ—)‘)¤# e£*°S·Z±Zô
ˆð ˆ
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                  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‰x˜‰|€HØÑ€Eˆ5�#à!‰Z˜Ó! '¨7¸#Ô>€Fð )‰Z˜Ÿ™Ó(¨°'Ó:€FÙ�6ØŸ™ØŸ™Ø!Ÿ>™>Ø"ŸO™OØ!Ÿ>™>õ+ð ×
Ñ
Ó
€CØ‡K�K×Ñ�w §¡°Ô5Ø€Jr"   c                 óx  — |j                   j                  sJ ‚t        j                  | j                  «      }|j
                  j                  |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‰9×ÒÐÐÜ×%Ñ% c§i¡iÓ0€HØ�}‰}×'Ñ'¨¯©×(?Ñ(?ÀÓ(IÓJ€HØ�W‰W×0Ñ0°°c¸8ÓD€Fà‡I�I‡M�M×Ñ˜Ÿ™ C¨Ô-Ø€Mr"   Ú	_allocatec                 ó   — d„ }|S )z;Implements a Numba-only classmethod on the array type.
    c                 ó4   — 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Ü  ¨EÓ2Ð2r"   rE   )r¥   r¦   r§   r¨   s       r    Ú_ol_array_allocater©   ¼   s   € ò3ð €Kr"   c                 ó„   — d„ }t        j                  t         j                  «      }t        j                  |||«      }||fS )Nc                 ó´  — | j                   j                  «        |\  }}|j                  }t        j                  d«      }t
        j                  }t        j                  |d«      }	t        j                  ||	d¬«      }
|j                  |
d«      }t        j                  |t
        j                  ||g«      }t        j                  ||d¬«      }|j                  j                  d«       t        |t        j                  «      r!| j!                  t"        j$                  |«      }n|j&                  |k(  sJ d«       ‚|j                  ||||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‰nˆÜ�j‰j˜‹nˆÜ×#Ñ#ˆäŸ™¨°"Ó5ˆÜ×5Ñ5Ø�Ð&Jô
ˆð —L‘L ¨rÓ2ˆ	ä�‰˜w¬¯©¸¸gÐ(FÓGˆÜ×+Ñ+Ø�ÐEô
ˆð 	�‰×%Ñ% iÔ0Ü�eœXŸ\™\Ô*Ø×(Ñ(¬¯©°uÓ=‰Eà—:‘: Ò$Ð>Ð&>Ó>Ð$Ø�|‰|˜B  u¨iÐ 8Ó9ˆØ&ˆŒ	Øˆr"   )r   rr   rÂ   r   Ú	signature)Ú	typingctxr¦   r§   r¨   Úmipr�   s         r    r¤   r¤   Ç   s;   € òô6 ×
Ñ
œuŸ}™}Ó
-€CÜ
×
Ñ
˜3 	¨5Ó
1€CØ�ˆ9Ðr"   c                   ó^   — e Zd Zd„ Zd„ Zd„ Zd„ Zej                  d„ «       Z	d„ Z
ed„ «       Zy)	ÚTestNdarraySubclassesc                 óR  — t         d„ «       }t        j                  d«      }t        |j                  |j
                  |«      }|j                  |«      } ||«      }| j                  |t        «       | j                  t        |«      t        |«      «       | j                  ||«       y)z6This tests the path to `MyArrayType.box_type`
        c                 ó   — | dz   S )Né   rE   ©Úas    r    Úfooz6TestNdarraySubclasses.test_myarray_return.<locals>.fooî   s   € à�q‘5ˆLr"   é   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‰i˜‹lˆÜ�C—I‘I˜sŸy™y¨#Ó.ˆØ—;‘;˜q“>ˆÙ�!‹fˆØ×Ñ˜c¤7Ô+Ø�‰”d˜8“n¤d¨3£iÔ0Ø×Ñ ¨#Õ.r"   c                 óR  — t         d„ «       }t        j                  d«      }t        |j                  |j
                  |«      }|j                  |«      } ||«      }| j                  |t        «       | j                  t        |«      t        |«      «       | j                  ||«       y )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‰i˜‹lˆÜ�C—I‘I˜sŸy™y¨#Ó.ˆØ—;‘;˜q“>ˆÙ�!‹fˆØ×Ñ˜c¤7Ô+Ø�‰”d˜8“n¤d¨3£iÔ0Ø×Ñ ¨#Õ.r"   c                 ó  — t         d„ «       }t        j                  d«      }|j                  |«      } ||«      }| j	                  |t
        «       | j                  t        |«      t        |«      «       | j                  ||«       y )Nc                 óD   — t        | j                  | j                  | «      S r   ©r,   r3   r4   )r}   s    r    rÑ   z7TestNdarraySubclasses.test_myarray_convert.<locals>.foo  s   € ä˜3Ÿ9™9 c§i¡i°Ó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  sp   € Ü	ñ	6ó 
ð	6ô �i‰i˜‹lˆØ—;‘;˜sÓ#ˆÙ�#‹hˆØ×Ñ˜c¤7Ô+Ø�‰”d˜8“n¤d¨3£iÔ0Ø×Ñ ¨#Õ.r"   c                 óÀ   — d„ }t        j                  d«      } ||«      }| j                  t        |«      t         j                  «       | j                  |||z   «       y )Nc                 ót   — 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,   € Ü §	¡	¨3¯9©9°cÓ:ˆ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‰i˜‹lˆÙ�#‹hˆØ�‰”d˜3“i¤§¡Ô,Ø×Ñ  S¨3¡YÕ/r"   c                 óÈ   — | j                  «        t        d„ «       }t        j                  d«      } ||«      }| j	                  t        |«      t        j                  «       y )Nc                 ón   — t        | j                  | j                  | «      }t        j                  |«      S r   ræ   rè   s     r    rÑ   z7TestNdarraySubclasses.test_myarray_asarray.<locals>.foo!  s'   € ä §	¡	¨3¯9©9°cÓ:ˆIÜ—:‘:˜iÓ(Ð(r"   rÒ   )Údisable_leak_checkr   r1   rÔ   r×   r0   r2   rê   s       r    Útest_myarray_asarrayz*TestNdarraySubclasses.test_myarray_asarray  sP   € à×ÑÔ!ä	ñ	)ó 
ð	)ô �i‰i˜‹lˆÙ�#‹hˆð 	�‰”d˜3“i¤§¡Õ,r"   c                 ó&  — t         d„ «       }t        j                  dt        j                  ¬«      }| j	                  t
        «      5 } ||«       d d d «       d}|D ]'  }| j                  |t        j                  «      «       Œ) y # 1 sw Y   Œ8xY w)Nc                 óN   — t        | j                  | j                  | «      }||z   S r   râ   rè   s     r    rÑ   zATestNdarraySubclasses.test_myarray_ufunc_unsupported.<locals>.foo-  s#   € ä §	¡	¨3¯9©9°cÓ:ˆ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,  sz   € Ü	ñ	)ó 
ð	)ô �i‰i˜¤§¡Ô,ˆØ×Ñœ{Ô+¨vÙ�ŒH÷ ,ðFˆãˆAØ�M‰M˜!œS ×!1Ñ!1Ó2Õ3ñ ÷ ,Ð+ús   Á	BÂBc                 óÞ  — t         d„ «       }t        j                  dt        j                  ¬«      }t	        |j
                  |j                  |«      }|j                  |«      } ||«      }| j                  ||«       t        }t        j                  }t        |j                  «      }|j                  |«      }	| j                  |d|d   j                  |	fd|d   j                  |	fg«       y)z:
        Checks that our custom allocator is used
        c                 óx   — | 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   € à”B—I‘I˜aŸf™f¬B¯J©JÔ7Ñ7ˆAØ�B‘ˆAØ�a�4ˆKr"   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‰i˜¤§¡Ô,ˆÜ�C—I‘I˜sŸy™y¨#Ó.ˆà—;‘;˜q“>ˆÙ�!‹fˆà×Ñ  XÔ.äˆä×-Ñ-ˆ	Ü˜#Ÿ)™)Ó$ˆØ×7Ñ7¸ÓAˆØ×Ñ˜Ø% x°¡{×'9Ñ'9¸5ÐAØ% x°¡{×'9Ñ'9¸5ÐAð(
õ 	r"   N)rA   rB   rC   rÜ   rß   rã   rë   ÚunittestÚexpectedFailurerï   rû   r*   r  rE   r"   r    rË   rË   é   sI   „ ò/ò/ò
/ò0ð ×Ññ-ó ð-ò4ð ñó ñ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ð €òð
 ñó ðò
ô "ˆb�j‰jô  "ôF�%—+‘+ô ð: €×Ñ�gÓñCó ðCñ �ÓôF�u—z‘z×+Ñ+×2Ñ2×>Ñ>ó Fó ðFñ  ˆwÓñó ðñ ˆw˜Ÿ™¨¯©°U·[±[ÓAñó Bðñ, €[Óñó ðñ �k ;Ó/ñó 0ðð ñó ðôBm˜O¨Xô mð` ˆzÒØ€H‡M�M…Oð r"   