o
    ôT·j2  ã                   @   s¼   d Z ddlmZ ddlZddlmZ ddlZddlmZ ddl	m
Z ddlmZ ddlm  m  mZ ej d¡Zejdd	gd
d„ d�dd„ ƒZG dd„ dƒZdd„ Zdd„ Zdd„ ZdS )a  
Tests that features that are currently unsupported in
either the Python or C parser are actually enforced
and are clearly communicated to the user.

Ultimately, the goal is to remove test cases from this
test suite as new feature support is added to the parsers.
é    )ÚStringION)ÚPath)ÚParserError)Úread_csvz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningÚpythonz
python-fwfc                 C   ó   | S ©N© )Úvalr	   r	   új/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/pandas/tests/io/parser/test_unsupported.pyÚ<lambda>   ó    r   )ÚparamsÚidsc                 C   ó   | j S r   )Úparam)Úrequestr	   r	   r   Úpython_engine   s   r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestUnsupportedFeaturesc              	   C   sR   d}dD ]"}t jtdd�� tt|ƒ|dd� W d   ƒ n1 s!w   Y  qd S )Núa b c
1 2 3)Úcr   zunexpected keyword©ÚmatchT)ÚengineÚmangle_dupe_cols)ÚpytestÚraisesÚ	TypeErrorr   r   )ÚselfÚdatar   r	   r	   r   Útest_mangle_dupe_cols_false!   s   ÿ€ÿz3TestUnsupportedFeatures.test_mangle_dupe_cols_falsec              	   C   s   d}d}d}t jt|d��) tjt|d�� tt|ƒdd dd� W d   ƒ n1 s*w   Y  W d   ƒ n1 s9w   Y  t jt|d�� tt|ƒddd	� W d   ƒ n1 sYw   Y  t jt|d�� tt|ƒdd
tdƒd� W d   ƒ n1 s|w   Y  t jt|d�� tt|ƒddd� W d   ƒ n1 sœw   Y  t t	j
tf¡� tt|ƒd dd� W d   ƒ n1 s½w   Y  t t	j
¡� tt|ƒdd� W d   ƒ n1 sÛw   Y  t t	j
¡� tt|ƒd
tdƒd� W d   ƒ n1 süw   Y  t t	j
¡� tt|ƒdd� W d   ƒ n	1 �sw   Y  d}d}t jt|d�� tt|ƒdd� W d   ƒ n	1 �s?w   Y  t jt|d�� tt|ƒddd	� W d   ƒ n	1 �s`w   Y  d}d}t jt|d�� tt|ƒdd� W d   ƒ n	1 �s„w   Y  t jt|d�� tt|ƒdd� W d   ƒ n	1 �s¤w   Y  d}d}t jt|d�� tt|ƒdd� W d   ƒ d S 1 �sÉw   Y  d S )Nr   zdoes not supportú;The 'delim_whitespace' keyword in pd.read_csv is deprecatedr   r   F)r   ÚsepÚdelim_whitespacez\s)r   r"   ú	é€   )r   r"   Ú	quotecharé   )r   Ú
skipfooter)r"   r#   )r"   )r"   r&   )r(   a                        A       B       C       D        E
one two three   four
a   b   10.0032 5    -0.5109 -2.3358 -0.4645  0.05076  0.3640
a   q   20      4     0.4473  1.4152  0.2834  1.00661  0.1744
x   q   30      3    -0.6662 -0.5243 -0.3580  0.89145  2.5838zError tokenizing dataz\s+z)Only length-1 thousands markers supportedzA|B|C
1|2,334|5
10|13|10.
z,,)Ú	thousandsÚ z(Only length-1 line terminators supportedza,b,c~~1,2,3~~4,5,6z~~)Úlineterminator)r   r   Ú
ValueErrorÚtmÚassert_produces_warningÚFutureWarningr   r   ÚchrÚparsersÚParserWarningr   )r   r   ÚmsgÚdepr_msgÚtextr	   r	   r   Útest_c_engine)   sf   ÿ€ÿÿÿÿÿÿÿÿÿÿÿÿ$ÿz%TestUnsupportedFeatures.test_c_enginec              	   C   sˆ   ddl m} d}|D ]7}dt|ƒ› dt|ƒ› d�}|tƒ i}tjt|d�� tt|ƒfd|i|¤Ž W d   ƒ n1 s<w   Y  q
d S )	Nr   )Ú_python_unsupportedz*1,2,3,,
1,2,3,4,
1,2,3,4,5
1,2,,,
1,2,3,4,úThe z" option is not supported with the z enginer   r   )	Úpandas.io.parsers.readersr7   ÚreprÚobjectr   r   r,   r   r   )r   r   Úpy_unsupportedr   Údefaultr3   Úkwargsr	   r	   r   Útest_python_engine`   s   ÿÿ
ÿ€ùz*TestUnsupportedFeatures.test_python_enginec                 C   sZ   G dd„ dƒ}d}d}t jt|d�� t||ƒ|d� W d   ƒ d S 1 s&w   Y  d S )Nc                   @   s.   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ ZdS )zMTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBufferÚreturnNc                 S   s
   || _ d S r   ©r   )r   Úcsv_datar	   r	   r   Ú__init__v   ó   
zVTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.__init__c                 S   s
   | j  ¡ S r   )r   Ú__next__©r   r	   r	   r   rE   y   rD   zVTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.__next__c                 S   r   r   rA   rF   r	   r	   r   Úread|   ó   zRTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.readc                 S   r   r   rA   rF   r	   r	   r   Úreadline   rH   zVTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.readline)r@   N)Ú__name__Ú
__module__Ú__qualname__rC   rE   rG   rI   r	   r	   r	   r   ÚNoNextBufferu   s
    
rM   za
1zD'NoNextBuffer' object is not iterable|argument 1 must be an iteratorr   )r   )r   r   r   r   )r   r   rM   r   r3   r	   r	   r   Útest_python_engine_file_no_iters   s   "ÿz7TestUnsupportedFeatures.test_python_engine_file_no_iterc           	   
   C   s  ddl m} d}|D ]{}dt|ƒ› d�}|tƒ i}ddh}|dkr&d	||< n||v r/d
||< n|dkr7d||< d }d }d|v rCd}t}d|v rKd}t}tjt|d��+ tj	||d�� t
t|ƒfddi|¤Ž W d   ƒ n1 sqw   Y  W d   ƒ n1 s€w   Y  q
d S )Nr   )Ú_pyarrow_unsupportedzJ1,2,3,,
        1,2,3,4,
        1,2,3,4,5
        1,2,,,
        1,2,3,4,r8   z2 option is not supported with the 'pyarrow' engineÚwarn_bad_linesÚerror_bad_linesÚdialectÚexcelTÚon_bad_linesÚwarnr#   r!   Úverbosez2The 'verbose' keyword in pd.read_csv is deprecatedr   r   Úpyarrow)r9   rO   r:   r;   r/   r   r   r,   r-   r.   r   r   )	r   Úpa_unsupportedr   r=   r3   r>   Údefault_needs_boolrU   r4   r	   r	   r   Útest_pyarrow_engineˆ   s:   ÿ


ÿ€ÿ€éz+TestUnsupportedFeatures.test_pyarrow_enginec                 C   sv   t dƒ}dd„ }|}|jdvr2d}tjt|d�� |j||d� W d   ƒ d S 1 s+w   Y  d S |j||d� d S )Nza,b
1,2c                 S   r   r   r	   )Úxr	   r	   r   r   °   r   zVTestUnsupportedFeatures.test_on_bad_lines_callable_python_or_pyarrow.<locals>.<lambda>)r   rW   zKon_bad_line can only be a callable function if engine='python' or 'pyarrow'r   )rT   )r   r   r   r   r,   r   )r   Úall_parsersÚsioÚbad_lines_funcÚparserr3   r	   r	   r   Ú,test_on_bad_lines_callable_python_or_pyarrow¬   s   
ÿ"ÿzDTestUnsupportedFeatures.test_on_bad_lines_callable_python_or_pyarrowN)	rJ   rK   rL   r    r6   r?   rN   rZ   r`   r	   r	   r	   r   r       s    7$r   c              
   C   sÔ   | }t }|jdkrtjdd� t d¡�L}t|ƒjddd� t d¡�( tj	|d	d
�� |j
|g d¢d� W d   ƒ n1 s?w   Y  W d   ƒ n1 sNw   Y  t |¡ W d   ƒ d S 1 scw   Y  d S )NrW   z,https://github.com/apache/arrow/issues/38676©Úreasonztest.csvzcol1,col2
a,b
1,2zutf-8)ÚencodingFÚcol3r   )Úcol1Úcol2rd   )Úusecols)r,   r   r   Úskipr-   Úensure_cleanr   Ú
write_textr.   r   r   ÚosÚunlink)r\   r_   ÚerrorÚfnamer	   r	   r   Ú)test_close_file_handle_on_invalid_usecols½   s   
ÿ€ÿ"úro   c                 C   sh   |}|j dkr|  tjj|j › d�d�¡ tjtdd�� | g ¡ W d   ƒ d S 1 s-w   Y  d S )Nr   z engine supports lists.ra   ÚInvalidr   )r   Úapplymarkerr   ÚmarkÚxfailr   r,   r   )r   r\   r_   r	   r	   r   Útest_invalid_file_inputsÏ   s   
ÿ"ÿrt   c                 C   sJ   | }d}t jt|d�� |jddd� W d   ƒ d S 1 sw   Y  d S )NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r   ÚtestÚnumpy)Údtype_backend)r   r   r,   r   )r\   r_   r3   r	   r	   r   Útest_invalid_dtype_backendÛ   s   ÿ"ÿrx   )Ú__doc__Úior   rk   Úpathlibr   r   Úpandas.errorsr   Úpandas._testingÚ_testingr-   Úpandas.io.parsersr   r9   r1   Úreadersrr   ÚfilterwarningsÚ
pytestmarkÚfixturer   r   ro   rt   rx   r	   r	   r	   r   Ú<module>   s&    ÿ
 