
    
9j                    p    S SK Jr  S SKrS SKrS SKrS SKJr  S SKJr  S rS r	S r
S rS	 rS
 rS rS rg)    )annotationsN)_bundle)_pytest_implc                    [        U [        5      (       a  U R                  $ [        U S5      (       a+  [        U R                  [        5      (       a  U R                  $ [        U 5      $ )N__name__)
isinstancetyper   hasattrstrrepr)objs    U/home/wildlama/miniconda3/lib/python3.13/site-packages/cupy/testing/_parameterized.py_param_to_strr      sJ    #t||	j	!	!js&C&C||9    c                    Sn[        U 5      U::  a  U $ U[        U5      -
  S-  nU[        U5      -
  U-
  nU S U U-   X* S  -   n [        U 5      U:X  d   eU $ )Nz...   )len)smaxlenellipsisn1n2s        r   _shortenr      sr     H
1v
3x=
 Q	&B	#h-	"	$B	#2AcdG#Aq6VHr   c                   SnSn[        UR                  5       5       VVs/ s H*  u  pVSR                  U[        [	        U5      U5      5      PM,     nnn[        SR                  U5      U5      nSR                  XU5      nU$ s  snnf )Nd   i  z{}={}z, z{}_param_{}_{{{}}})sorteditemsformatr   r   join)	base_class_namei_paramparamSINGLE_PARAM_MAXLENPARAMS_MAXLENkv
param_strscls_names	            r   _make_class_namer)   !   s    M 5;;=)+)DA 	q(=#35HIJ)  + $))J/?J#***.HO+s   1Bc              #  P   #    [        U5       H  u  p#[        XU5      v   M     g 7fN)	enumerate_parameterize_test_case)baseparamsir"   s       r   !_parameterize_test_case_generatorr1   .   s%      f%%du55 &s   $&c                  ^ ^^ [        T R                  UT5      nU U4S jnSU0n[        TR                  5       5       H:  u  nm[	        T[
        R                  5      (       a  U4S jnU" 5       XV'   M6  TXV'   M<     X5S 4$ )Nc                <   > TR                  U 5      nSU< ST< S3$ )N<z  parameter: >)__repr__)selfnamer.   r"   s     r   r6   )_parameterize_test_case.<locals>.__repr__8   s    }}T"(,e44r   r6   c                    >^ TmU4S jn U $ )Nc                   > T" U0 UD6$ r+    )r7   argskwargsfs      r   new_v<_parameterize_test_case.<locals>.create_new_v.<locals>.new_vC   s    d-f--r   r<   )r@   r?   r&   s    @r   create_new_v-_parameterize_test_case.<locals>.create_new_v@   s    .r   c                    U $ r+   r<   )methods    r   <lambda>)_parameterize_test_case.<locals>.<lambda>K   s    r   )r)   r   r   r   r   typesFunctionType)	r.   r0   r"   r(   r6   mbr%   rB   r&   s	   ` `     @r   r-   r-   5   sw    q%8H5 h	Bu{{}%1a++,, !NBEBE & /00r   c                    ^ ^ UU 4S jnU$ )a  Generates test classes with given sets of additional attributes

>>> @parameterize({"a": 1}, {"b": 2, "c": 3})
... class TestX(unittest.TestCase):
...     def test_y(self):
...         pass

generates two classes `TestX_param_0_...`, `TestX_param_1_...` and
removes the original class `TestX`.

The specification is subject to change, which applies to all the non-NumPy
`testing` features.

c                   > [        U [        R                  5      (       a$  T(       a   e[        R                  " U4S j5      nO[
        R                  " T0 TD6nU" U 5      $ )Nc                   > [        U T5      $ r+   )r1   )r.   r/   s    r   rF   )parameterize.<locals>.f.<locals>.<lambda>a   s    >tVLr   )
issubclassunittestTestCaser   make_decoratorr   parameterize)clsdecor>   r/   s     r   r?   parameterize.<locals>.f]   sS    c8,,--:))LND  ,,f??DCyr   r<   )r/   r>   r?   s   `` r   rS   rS   N   s     Hr   c           	         [        U [        5      (       d   e[        U 5      nU Vs/ s H  o U   PM	     nn[        R                  " U6 nU Vs/ s H  n[        [        X5      5      PM     sn$ s  snf s  snf r+   )r   dictr   	itertoolsproductzip)	parameterkeyskeyvaluesvalues_productvalss         r   rZ   rZ   h   sk    i&&&&)D(,-nF-&&/N.<=ndDT!n== .=s   A/A4c                     [         R                  " U 6  VVVVs/ s H3  nU VVVs0 s H  o"R                  5         H  u  p4X4_M	     M      snnnPM5     snnnn$ s  snnnf s  snnnnf r+   )rY   rZ   r   )
parametersdictsdicr%   r&   s        r   product_dictrf   q   sV     &&
353E 7#99;41;735 575s   A 
%A
	A 
A 
)
__future__r   rY   rH   rP   cupy.testingr   r   r   r   r)   r1   r-   rS   rZ   rf   r<   r   r   <module>ri      s?    "      %

6124>5r   