o
    0 i                     @   st   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 )    N)_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   g/home/app/PaddleOCR-VL-test/.venv_paddleocr/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ellipsisZn1Z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ZSINGLE_PARAM_MAXLENr   r   
<listcomp>#   s    z$_make_class_name.<locals>.<listcomp>z, z{}_param_{}_{{{}}})sorteditemsr   joinr   )Zbase_class_nameZi_paramparamZPARAMS_MAXLENZ
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   r(   6   s   
z)_parameterize_test_case.<locals>.__repr__r(   c                     s     fdd} | S )Nc                    s    |i |S r!   r   )r)   argskwargsfr   r   new_vA   s   z<_parameterize_test_case.<locals>.create_new_v.<locals>.new_vr   )r/   )r   r-   r   create_new_v>   s   z-_parameterize_test_case.<locals>.create_new_vc                 S   s   | S r!   r   )methodr   r   r   <lambda>I   s    z)_parameterize_test_case.<locals>.<lambda>)r    r   r   r   r   typesFunctionType)r$   r&   r   r   r(   mbr   r0   r   )r$   r   r   r   r#   3   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   r2   _   s   
 z)parameterize.<locals>.f.<locals>.<lambda>)
issubclassunittestZTestCaser   Zmake_decoratorr   parameterize)clsdecor,   r%   r   r   r.   [   s   
zparameterize.<locals>.fr   )r%   r,   r.   r   r;   r   r8   L   s   r8   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   j   s    zproduct.<locals>.<listcomp>c                    s   g | ]	}t t |qS r   )dictzip)r   vals)keysr   r   r   l   s    )r   r>   r   	itertoolsproduct)r=   valuesZvalues_productr   )rA   r=   r   rC   f   s
   
rC   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   Zdicr   r   r   r   r   
<dictcomp>r   s   $ z+product_dict.<locals>.<listcomp>.<dictcomp>r   )r   Zdictsr   r   r   r   q   s    z product_dict.<locals>.<listcomp>)rB   rC   )
parametersr   r   r   product_dicto   s   rG   )rB   r3   r7   Zcupy.testingr   r   r   r   r    r'   r#   r8   rC   rG   r   r   r   r   <module>   s    		