
    xKgC                     *   d Z ddlZddlmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ  G d	 d
e      Z G d de      Z G d dee      Z G d de      Zg dZg dZg dZg dZ G d de      Zedk(  r ej:                          yy)z1
Test helper functions from numba.numpy_support.
    N)product)types)NumbaNotImplementedError)TestCase)ShakeRequestError)numpy_supportc                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestFromDtypec           	          t         j                   fd} |dt        j                          |dt        j                          |dt        j                          |dt        j
                          |dt        j
                          |dt        j                          |dt        j                          |d	t        j                          |d
t        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          |dt        j                          dD ];  } j#                   t%        j&                  |            t)        t        |             = t*        j,                  dk(  rdnd}dD ]/  } j/                  t0        t%        j&                  ||z                1 y) zX
        Test from_dtype() and as_dtype() with the various scalar number types.
        c                    t        j                  |       }j                   |      |       j                   t        j                  d| z               |       j                  |t	        j
                  |             y )N=)npdtypeassertIsassertEqualr	   as_dtype)typechar
numba_typer   fselfs      b/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/tests/test_numpy_support.pycheckz.TestFromDtype.test_number_types.<locals>.check   s^    HHX&EMM!E(J/MM!BHHS8^45zBUM$:$::$FG    ?r   f4df8Fc8Dc16Obi1Bu1hi2Hu2ii4Iu4qQ)
int8uint8int16uint16int32uint32int64uint64intpuintplittle><hHiIlLqQfdFDN)r	   
from_dtyper   bool_float32float64	complex64
complex128pyobjectr2   r3   r4   r5   r6   r7   r8   r9   r   r   r   getattrsys	byteorderassertRaisesr   )r   r   nameforeign_alignletterr   s   `    @r   test_number_typeszTestFromDtype.test_number_types   s    $$	H 	c5;;c5==!dEMM"c5==!dEMM"c5??#dEOO$c5##$eU%%&c5>>"c5::dEJJc5;;dEKK c5;;dEKK c5<< dELL!c5;;dEKK c5<< dELL!c5;;c5<< 9DMM!BHHTN+WUD-AB9
  #}}8c$F6 hh}v'=>@ %r   c                       fd} |dt        j                  d              |dt        j                  d              |dt        j                  d             y)	zS
        Test from_dtype() and as_dtype() with the character string types.
        c                     t        j                  |       }j                  t        j                  |      |       j                  |t        j
                  |             y N)r   r   r   r	   r@   r   )
typestringr   r   r   s      r   r   z.TestFromDtype.test_string_types.<locals>.checkN   sG    HHZ(E]55e<jIUM$:$::$FGr   S10
   a11   U12   N)r   CharSeqUnicodeCharSeq)r   r   s   ` r   test_string_typeszTestFromDtype.test_string_typesJ   sF    	H 	eU]]2&'eU]]2&'eU))"-.r   c                 V      fd} |t        j                  |       |d      d       y )Nc                     t        j                  |       }j                  ||       j                  |j                  |       j                  t        j                  |      |        j                  t        j                  |      |        y rQ   )r	   r@   r   	unit_coder   )r   r   codetpr   s       r   r   z1TestFromDtype.check_datetime_types.<locals>.checkY   sm    ))%0BR,R\\40]33J?G]33B7?r       )r   r   )r   rM   nb_classr   s   `   r   check_datetime_typesz"TestFromDtype.check_datetime_typesX   s$    	@ 	bhhvb1r   c                 D    | j                  dt        j                         y)zK
        Test from_dtype() and as_dtype() with the datetime types.
        MN)rd   r   
NPDatetimer   s    r   test_datetime_typesz!TestFromDtype.test_datetime_typesc   s     	!!#u'7'78r   c                 D    | j                  dt        j                         y)zL
        Test from_dtype() and as_dtype() with the timedelta types.
        mN)rd   r   NPTimedeltarh   s    r   test_timedelta_typesz"TestFromDtype.test_timedelta_typesi   s     	!!#u'8'89r   c                 z     fd}t        j                  dt         j                  fdt         j                  fg      } ||t        j                  dd d ft        j                  dd d fddd	       t        j                  dt         j                  fdt         j                  fgd
      } ||t        j                  dd d ft        j                  dd d fddd
	       t        j                  dt         j                  fdg      } ||t        j                  dd d ft	        j
                  d      dd d fddd	       y )Nc                 P   t        j                  |       }j                  |t        j                         j                  |j                  |        j                  |j                  |       j                  |j                  |       j                  |j                  |       y rQ   )
r	   r@   assertIsInstancer   Recordr   r   fieldssizealigned)r   rr   rs   rt   r`   r   s        r   r   z.TestFromDtype.test_struct_types.<locals>.checkp   sw    ))%0B!!"ell3RXXu-RYY/RWWd+RZZ1r   ar$   r      )ru   r$      F)rr   rs   rt   T)align      rk   )nS5   )rk   r{   	   )r   r   r4   r6   r   rY   )r   r   r   s   `  r   test_struct_typeszTestFromDtype.test_struct_typeso   s   	2 3/C?;<e!KKD$7!KKD$79e	%
 3/C?;4He!KKD$7!KKD$79d	$
 3/;78e!KKD$7!MM!,at<>e	%r   c                 T     fd}t         j                  t         j                  t         j                  t         j                  g}t
        t        g}t        ||      D ]  \  }} |||t        j                          t        ||      D ]  \  }} |||t        j                          y )Nc                     t        j                  |       }t        j                  |      } |||      }t        j                  |      }j                  ||       y rQ   )r   r   r	   r@   r   r   )	base_instenum_def
type_classnp_dtnb_tyinst	recoveredr   s          r   r   z+TestFromDtype.test_enum_type.<locals>.check   sM    HHY'E!,,U3Eh.D%..t4IUI.r   )r   rC   r6   rE   rA   r   r   r   r   
EnumMemberIntEnumMember)r   r   dtsenumsdtenums   `     r   test_enum_typezTestFromDtype.test_enum_type   s    	/ zz288R]]BHH=%U+HB"dE,,- ,  U+HB"dE//0 ,r   N)
__name__
__module____qualname__rN   r[   rd   ri   rm   r   r    r   r   r   r      s'    3@j/	29:%81r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)ValueTypingTestBasezL
    Common tests for the typing of values.  Also used by test_special.
    c                     |}| j                   |d      t        j                  t        j                  f       | j                   |d      t        j                  t        j                  f       | j                   |d      t        j                  t        j                  f       | j	                   |d      t        j
                         | j	                   |d      t        j                         | j	                   |d      t        j                         | j	                   |d      t        j                         dD ]=  } t        t        |             }| j	                   ||      t        t        |             ? y	)
z;
        Test *func*() with scalar numeric values.
           ii   g      ?y              ?TF)r2   r3   r4   r5   r6   r7   r8   r9   intcuintcr:   r;   rB   rC   rD   rE   rA   N)
assertInr   r6   r8   r   rC   rE   rA   rG   r   )r   funcr   rK   vals        r   check_number_valuesz'ValueTypingTestBase.check_number_values   s     adU[[%++67a	lU[[%++$>?ai%++u{{!;<afemm,agu//0agu{{+ah,D $'"d#%CMM!C&'%"67r   c                 ~    |}dD ]6  }|r
 |d|      }n |d      } ||      }| j                  | ||             8 y )N)ra   Yrf   r!   r(   rk   smsusnspsfsas   Nat)r   )r   r   np_typenb_typer   unittr`   s           r   _base_check_datetime_valuesz/ValueTypingTestBase._base_check_datetime_values   sL    
D At$ EN1BR/
r   c                 b    | j                  |t        j                  t        j                         y)z:
        Test *func*() with np.datetime64 values.
        N)r   r   
datetime64r   rg   r   r   s     r   check_datetime_valuesz)ValueTypingTestBase.check_datetime_values   s      	((r}}e>N>NOr   c                 b    | j                  |t        j                  t        j                         y)z;
        Test *func*() with np.timedelta64 values.
        N)r   r   timedelta64r   rl   r   s     r   check_timedelta_valuesz*ValueTypingTestBase.check_timedelta_values   s#     	((r~~).):):	<r   N)r   r   r   __doc__r   r   r   r   r   r   r   r   r      s    8*0P<r   r   c                       e Zd Zd Zd Zd Zy)TestArrayScalarsc                 B    | j                  t        j                         y)zH
        Test map_arrayscalar_type() with scalar number values.
        N)r   r	   map_arrayscalar_typerh   s    r   test_number_valuesz#TestArrayScalars.test_number_values   s     	  !C!CDr   c                     t         j                  }| j                  |       t        j                  dd      }| j                  t              5   ||       ddd       y# 1 sw Y   yxY w)zH
        Test map_arrayscalar_type() with np.datetime64 values.
        201410YN)r	   r   r   r   r   rJ   NotImplementedErrorr   r   r   s      r   test_datetime_valuesz%TestArrayScalars.test_datetime_values   sO     ..""1%MM&%(23aD 433   	AA(c                     t         j                  }| j                  |       t        j                  dd      }| j                  t              5   ||       ddd       y# 1 sw Y   yxY w)zI
        Test map_arrayscalar_type() with np.timedelta64 values.
        rT   r   N)r	   r   r   r   r   rJ   r   r   s      r   test_timedelta_valuesz&TestArrayScalars.test_timedelta_values   sO     ..##A&NN2u%23aD 433r   N)r   r   r   r   r   r   r   r   r   r   r      s    E		r   r   c                       e Zd ZdZdZ d Zy)	FakeUFunc)ninnoutr   ntypesz
fake ufuncc                 l   || _         | j                   d   j                  d      \  }}t        |      | _        t        |      | _        t        |      | _        |D ]W  }| j                   d   j                  d      \  }}t        |      | j                  k(  sJ t        |      | j                  k(  rWJ  y )Nr   z->)r   splitlenr   r   r   )r   r   in_outr`   s        r   __init__zFakeUFunc.__init__   s    
::a=&&t,Ss8H	%jBzz!}**40HCs8txx'''s8tyy((( r   N)r   r   r   	__slots__r   r   r   r   r   r      s    2IH	)r   r   )??->?bb->bBB->Bhh->hHH->Hii->iII->Ill->lLL->Lqq->qQQ->Qee->eff->fdd->dgg->gFF->FDD->DGG->GMm->Mmm->mmM->MOO->O)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   mq->mzqm->mmd->mdm->mr   )ze->?zf->?d->?zg->?zF->?zD->?zG->?)ze->ezf->fd->dzg->gzF->FzD->DzG->GzO->Oc                       e Zd ZdZd Zd Zy)
TestUFuncsz
    Test ufunc helpers.
    c                    	
 t         j                  
t        t              }t        t              }t        t
              }t        t              }d
 fd		d	 fd	}
 fd} ||t        j                  t        j                  fd        ||t        j                  t        j                  fd        ||t        j                  t        j                  fd        ||t        j                  t        j                  fd        ||t        j                  t        j                  fd        ||t        j                  t        j                  fd	        ||t        j                  t        j                  fd
        ||t        j                  t        j                  fd        ||t        j                   t        j                   fd        ||t        j"                  d      t        j"                  d      fdt        j"                  d      f        ||t        j"                  d      t        j$                  d      fdt        j$                  d      f        ||t        j$                  d      t        j"                  d      fdt        j$                  d      f        ||t        j$                  d      t        j"                  d      fdt        j$                  d      f        ||t        j$                  d      t        j"                  d      fdt        j$                  d      f        ||t        j"                  d      t        j$                  d      fdt        j$                  d      f        ||t        j"                  d      t        j$                  d      fdt        j$                  d      f        ||t        j"                  d      t        j                  fdt        j"                  d      f        ||t        j                  t        j"                  d      fdt        j"                  d      f        	|t        j                  t        j                  fd        	|t        j                  t        j                  fd        	|t        j&                  t        j(                  fd        	|t        j                  t        j                  fd        	|t        j                  t        j                  fd       t        j*                  t        j,                  t        j                  t        j                  g}|D ]j  } 	|t        j                  |fd	        	|t        j                  |fd
        	|t        j                  |fd        	|t        j                   |fd       l |D ]  } 	||fd        	||fd         	|t        j"                  d      t        j*                  fdt        j"                  d      f        	|t        j"                  d      t        j,                  fdt        j"                  d      f        	|t        j"                  d      t        j                  fdt        j"                  d      f        	|t        j                  t        j"                  d      fdt        j"                  d      f        ||t        j$                  d      t        j$                  d      f        ||t        j"                  d      t        j                  f       y )Nc                     | ||z         }j                  |       t        |t              r|f}j                  |j                  |d|d|d|d|j                         j                  t        |j                        t        |j                               j                  t        |j                        t        |j                               |s2 | t        |      |j                  z         }j                  ||       n%j                  |j                  t        |              | |j                  |j                  z         }j                  ||       |S )z
            Check that ufunc_find_matching_loop() finds one of the given
            *sigs* for *ufunc*, *input_types* and optional *output_types*.
            zinputs=z and outputs=z should have selected one of z, got )
assertTrue
isinstancestrr   	ufunc_sigr   r   numpy_inputsinputsnumpy_outputsoutputslist)	ufuncinput_typessigsoutput_typeslooploop_explicitloop_rtr   r   s	          r   r   z7TestUFuncs.test_ufunc_find_matching_loop.<locals>.check   s   
 UK,67DOOD!$$wMM$..$ ),dnnNO S!2!23S5EFS!3!34c$,,6GH !%k):T\\)I J  5  tL/ABt{{T\\9:GWd+Kr   c                 f     | |||      }j                  |j                  t        |             y)zV
            Like check(), but also ensure no casting of inputs occurred.
            N)r   r   r   )r   r   r   r   r   r   r   s        r   check_exactz=TestUFuncs.test_ufunc_find_matching_loop.<locals>.check_exact:  s.     T<@DT[[${*;<r   c                 <     | |      }j                  |d        y rQ   )r   )r   r   r   r   r   s      r   check_no_matchz@TestUFuncs.test_ufunc_find_matching_loop.<locals>.check_no_matchA  s    UK(DMM$%r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   ra   r   r   r   r   r   r   r   )r   )r	   ufunc_find_matching_loopr   
_add_types
_mul_types_isnan_types_sqrt_typesr   rA   r2   r3   r8   r9   rB   rC   rD   rE   rl   rg   r4   r5   r6   r7   )r   np_addnp_mulnp_isnannp_sqrtr   r  	int_typesinttyr   r   s   `        @@r   test_ufunc_find_matching_loopz(TestUFuncs.test_ufunc_find_matching_loop  sq   22:&:&\*K(	4	=	&
 	FU[[%++6@FUZZ4g>FU[[%++6@FU[[%++68JKFU\\5<<8:LMFU]]EMM:GDFU]]EMM:GDFU__eoo>HFU--u/?/?@'J 	FU..s3U5F5Fs5KL5+<+<S+A*C	EFU..t4e6F6Fs6KL5+;+;D+A*C	EFU--c2E4E4Ec4JK5+;+;C+@*B	DFU--c2E4E4Eb4IJ5+;+;C+@*B	DFU--d3U5F5Fr5JK5+;+;D+A*C	EFU..r2E4D4DS4IJ5+;+;C+@*B	DFU..r2E4D4DT4JK5+;+;D+A*C	EFU..s3U[[A5+<+<S+A*C	EFU]]E,=,=c,BC5+<+<S+A*C	E 	fu{{EJJ/9fu{{EKK0':fu{{ELL17;fu6@fu}}eoo6@ [[%,,U\\J	E&5==%0':&5==%0':&5??E2G<&5++U3W=	  E'E8V,(UHf- 
 	fu((-u{{;U%6%6s%;$=	?fu((-u||<U%6%6s%;$=	?fu((-u}}=U%6%6s%;$=	?fu}}e&7&7&<=U%6%6s%;$=	? 	v 0 0 5u7G7G7LMN 	v 1 1# 6DEr   c           	      D     fd}t        j                  d      } ||        ||j                  d              ||j                  d      j                          ||j                  d      d d d           ||j                  d              ||j                  d      j                          ||j                  d      d d d d df           ||j                  d      j                  d d d d df           ||j                  d      d d d           ||j                  d      j                  d d d d d d df           ||j                  d      d d dd d df           ||j                  d      j                  d d d d dd d df           ||j                  d      d d dd d dd d df           ||j                  d      j                  d d dd d dd d df           ||j                  d      d d dd d dd d df           ||j                  d      j                  d d d d dd d dd d df           ||j                  d      d d d	d d dd d df           ||j                  d      j                  d d d d dd d dd d d	f          y )
Nc                 B   | j                   }| j                  }| j                  j                  }t	        j
                  |||      }t	        j                  |||      }| j                  d   }| j                  d   }j                  ||       j                  ||       y )NC_CONTIGUOUSF_CONTIGUOUS)	shapestridesr   itemsizer	   is_contiguous
is_fortranflagsr   )	arrdimsr  r  is_cis_fexpect_cexpect_fr   s	           r   	check_arrz1TestUFuncs.test_layout_checker.<locals>.check_arr  s    99DkkGyy))H ..tWhGD ++D'8DDyy0Hyy0HT8,T8,r      )r   rz   rv   )rv   r   ry   r   ry   )rv   rv   r   rv   r}   )r   arangereshapeT)r   r  r  s   `  r   test_layout_checkerzTestUFuncs.test_layout_checker  s`   		- iim##++f%&#++f%''(#++f%cc*+#++i()#++i(**+#++i(CaC01#++i(**1cc623 	#++i(1-.#++i(**1a1956#++i(1cc23#++i(**1cc3Q3;78#++i(1cc3Q378#++i(**3Q3!SqS=9:#++l+CaC1ccM:;#++l+--a1cc3Q3.>?@#++l+CaC1ccM:;#++l+--a1cc3Q3.>?@r   N)r   r   r   r   r  r$  r   r   r   r   r     s    nF`(Ar   r   __main__)r   rH   	itertoolsr   numpyr   unittest
numba.corer   numba.core.errorsr   numba.tests.supportr   numba.tests.enum_usecasesr   r   numba.npr	   r   objectr   r   r   r  r  r  r  r   r   mainr   r   r   <module>r0     s   
      6 ( 9 "H1H H1V4<& 4<n*H >) )"

 
 HN]A ]A@ zHMMO r   