o
    X۷i                     @  s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ dd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd ZdS )    )annotationsN)_bundle)_pytest_implc                 C  s4   t | tr| jS t| drt | jtr| jS t| S )N__name__)
isinstancetyper   hasattrstrrepr)obj r   Q/home/ubuntu/vllm_env/lib/python3.10/site-packages/cupy/testing/_parameterized.py_param_to_str   s
   
r   c                 C  sf   d}t | |kr
| S |t | d }|t | | }| d | | | | d   } t | |ks1J | S )Nz...   )len)smaxlenellipsisn1n2r   r   r   _shorten   s   r   c                   sD   d d} fddt | D }td||}d| ||}|S )Nd   i  c                   s&   g | ]\}}d  |tt| qS )z{}={})formatr   r   ).0kvSINGLE_PARAM_MAXLENr   r   
<listcomp>%   s    z$_make_class_name.<locals>.<listcomp>z, z{}_param_{}_{{{}}})sorteditemsr   joinr   )base_class_namei_paramparamPARAMS_MAXLEN
param_strscls_namer   r   r   _make_class_name!   s   

r(   c                 c  s&    t |D ]\}}t| ||V  qd S N)	enumerate_parameterize_test_case)baseparamsir$   r   r   r   !_parameterize_test_case_generator.   s   r/   c                   st   t  j|} fdd}d|i}t D ]\}ttjr.fdd}| ||< q||< q||dd fS )Nc                   s     | }d|f S )Nz<%s  parameter: %s>)__repr__)selfname)r,   r$   r   r   r0   8   s   
z)_parameterize_test_case.<locals>.__repr__r0   c                    s     fdd} | S )Nc                   s    |i |S r)   r   )r1   argskwargsfr   r   new_vC   s   z<_parameterize_test_case.<locals>.create_new_v.<locals>.new_vr   )r7   )r   r5   r   create_new_v@   s   z-_parameterize_test_case.<locals>.create_new_vc                 S  s   | S r)   r   )methodr   r   r   <lambda>K   s    z)_parameterize_test_case.<locals>.<lambda>)r(   r   r   r    r   typesFunctionType)r,   r.   r$   r'   r0   mbr   r8   r   )r,   r$   r   r   r+   5   s   
r+   c                    s    fdd}|S )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                   sF   t | tjr r
J tfdd}|| S tji  }|| S )Nc                   s
   t |  S r)   )r/   )r,   )r-   r   r   r:   a   s   
 z)parameterize.<locals>.f.<locals>.<lambda>)
issubclassunittestTestCaser   make_decoratorr   parameterize)clsdecor4   r-   r   r   r6   ]   s   
zparameterize.<locals>.fr   )r-   r4   r6   r   rE   r   rB   N   s   rB   c                   sD   t tsJ t fdd D }tj| } fdd|D S )Nc                   s   g | ]} | qS r   r   )r   key)	parameterr   r   r   l   s    zproduct.<locals>.<listcomp>c                   s   g | ]	}t t |qS r   )dictzip)r   vals)keysr   r   r   n   s    )r   rH   r   	itertoolsproduct)rG   valuesvalues_productr   )rK   rG   r   rM   h   s
   
rM   c                  G  s   dd t j|  D S )Nc                 S  s   g | ]	}d d |D qS )c                 S  s$   i | ]}|  D ]\}}||qqS r   )r    )r   dicr   r   r   r   r   
<dictcomp>t   s   $ z+product_dict.<locals>.<listcomp>.<dictcomp>r   )r   dictsr   r   r   r   s   s    z product_dict.<locals>.<listcomp>)rL   rM   )
parametersr   r   r   product_dictq   s   rT   )
__future__r   rL   r;   r?   cupy.testingr   r   r   r   r(   r/   r+   rB   rM   rT   r   r   r   r   <module>   s    		