
    Owg2                        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c mc mZ ej"                  j%                  d      Z ej(                  dd	gd
       d        Z G d d      Zd Zd Zd Zy)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                     | S N )vals    ^/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/io/parser/test_unsupported.py<lambda>r      s         )paramsidsc                     | j                   S r	   )param)requests    r   python_enginer      s    ==r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestUnsupportedFeaturesc                     d}dD ]=  }t        j                  t        d      5  t        t	        |      |d       d d d        ? y # 1 sw Y   JxY w)Na b c
1 2 3)cr   zunexpected keywordmatchT)enginemangle_dupe_cols)pytestraises	TypeErrorr   r   )selfdatar   s      r   test_mangle_dupe_cols_falsez3TestUnsupportedFeatures.test_mangle_dupe_cols_false!   sV    % 	OFy0DE O$NO O	OO Os   AA	c           	      >   d}d}d}t        j                  t        |      5  t        j                  t
        |      5  t        t        |      dd d       d d d        d d d        t        j                  t        |      5  t        t        |      dd	       d d d        t        j                  t        |      5  t        t        |      dd
t        d             d d d        t        j                  t        |      5  t        t        |      dd       d d d        t        j                  t        j                  t
        f      5  t        t        |      d d       d d d        t        j                  t        j                        5  t        t        |      d       d d d        t        j                  t        j                        5  t        t        |      d
t        d             d d d        t        j                  t        j                        5  t        t        |      d       d d d        d}d}t        j                  t        |      5  t        t        |      d       d d d        t        j                  t        |      5  t        t        |      dd	       d d d        d}d}t        j                  t        |      5  t        t        |      d       d d d        t        j                  t        |      5  t        t        |      d       d d d        d}d}t        j                  t        |      5  t        t        |      d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   CxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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texts        r   test_c_enginez%TestUnsupportedFeatures.test_c_engine)   s6    P ]]:S1 	W++MJ W$PUVW	W ]]:S1 	<Xd^CU;	<]]:S1 	OXd^CTSXN	O]]:S1 	?Xd^CA>	? '')>)>(NO 	GXd^F	G''(=(=> 	0Xd^/	0''(=(=> 	CXd^SB	C''(=(=> 	3Xd^2	3A
 &]];c2 	1Xd^0	1]];c2 	=Xd^CV<	= : ]]:S1 	5Xd^t4	5]]:S1 	3Xd^r2	3 9$]]:S1 	:Xd^D9	: 	:WW W	W 	W	< 	<	O 	O	? 	?	G 	G	0 	0	C 	C	3 	3	1 	1	= 	=	5 	5	3 	3
	: 	:s   M8M+M8N="NNN,N9!OOO O-O:PP+M5	0M88NNNN),N69OOO O*-O7:PPPc                     ddl m} d}|D ]d  }dt        |       dt        |       d}|t               i}t	        j
                  t        |      5  t        t        |      fd|i| d d d        f y # 1 sw Y   qxY w)	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.readersr<   reprobjectr   r   r0   r   r   )r!   r   py_unsupportedr"   defaultr7   kwargss          r   test_python_enginez*TestUnsupportedFeatures.test_python_engine`   s    S & 	IGtG}o &&&*=&9%:'C 
 vx(Fz5 I$HHHI I	II Is   A33A<	c                      G d d      }d}d}t        j                  t        |      5  t         ||      |       d d d        y # 1 sw Y   y xY w)Nc                   &    e Zd ZddZd Zd Zd Zy)MTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBufferNc                     || _         y r	   r"   )r!   csv_datas     r   __init__zVTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.__init__v   s	    $	r   c                 6    | j                   j                         S r	   )r"   __next__r!   s    r   rM   zVTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.__next__y   s    yy))++r   c                     | j                   S r	   rI   rN   s    r   readzRTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.read|       yy r   c                     | j                   S r	   rI   rN   s    r   readlinezVTestUnsupportedFeatures.test_python_engine_file_no_iter.<locals>.NoNextBuffer.readline   rQ   r   )returnN)__name__
__module____qualname__rK   rM   rP   rS   r
   r   r   NoNextBufferrG   u   s    %,!!r   rX   za
1zD'NoNextBuffer' object is not iterable|argument 1 must be an iteratorr   )r   )r   r   r    r   )r!   r   rX   r"   r7   s        r   test_python_engine_file_no_iterz7TestUnsupportedFeatures.test_python_engine_file_no_iters   sJ    	! 	! T]]9C0 	?\$'>	? 	? 	?s   AAc                    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(  rd||<   d }d }d|v rd}t        }d|v rd}t        }t        j                  t        |      5  t        j                  ||      5  t        t        |      fddi| d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   )_pyarrow_unsupportedzJ1,2,3,,
        1,2,3,4,
        1,2,3,4,5
        1,2,,,
        1,2,3,4,r=   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)r>   r[   r?   r@   r3   r   r   r0   r1   r2   r   r   )	r!   pa_unsupportedr"   rB   r7   rC   default_needs_boolra   r8   s	            r   test_pyarrow_enginez+TestUnsupportedFeatures.test_pyarrow_engine   s!   T & 	IGtG}o &6 7  vx(F"24E!F)#")w.."&wN*"(wDH!V+X$F"O$z5 I//HE IXd^HIHHII I/	I0I II Is$   CC3CCCC	c                     t        d      }d }|}|j                  dvr:d}t        j                  t        |      5  |j                  ||       d d d        y |j                  ||       y # 1 sw Y   y xY w)Nza,b
1,2c                     | S r	   r
   )xs    r   r   zVTestUnsupportedFeatures.test_on_bad_lines_callable_python_or_pyarrow.<locals>.<lambda>   s    1 r   )r   rc   zKon_bad_line can only be a callable function if engine='python' or 'pyarrow'r   )r`   )r   r   r   r   r0   r   )r!   all_parserssiobad_lines_funcparserr7   s         r   ,test_on_bad_lines_callable_python_or_pyarrowzDTestUnsupportedFeatures.test_on_bad_lines_callable_python_or_pyarrow   s     z"$%::;  z5 B.AB B OOCnO=B Bs   A--A6N)	rU   rV   rW   r#   r:   rD   rY   rf   rn   r
   r   r   r   r       s%    O5:nI&?*"IH>r   r   c                    | }t         }|j                  dk(  rt        j                  d       t	        j
                  d      5 }t        |      j                  dd       t	        j                  d      5  t        j                  |d	
      5  |j                  |g d       d d d        d d d        t        j                  |       d d d        y # 1 sw Y   /xY w# 1 sw Y   3xY w# 1 sw Y   y xY w)Nrc   z,https://github.com/apache/arrow/issues/38676reasonztest.csvzcol1,col2
a,b
1,2zutf-8)encodingFcol3r   )col1col2rs   )usecols)r0   r   r   skipr1   ensure_cleanr   
write_textr2   r   r   osunlink)rj   rm   errorfnames       r   )test_close_file_handle_on_invalid_usecolsr~      s    FE}}	!IJ		$ U4wG''. 	IuF3 I/GHI	I 			% I I	I 	I s<   2C)5CC#C+C)CCC&	"C))C2c                     |}|j                   dk(  r<| j                  t        j                  j	                  |j                    d             t        j
                  t        d      5  |j                  g        d d d        y # 1 sw Y   y xY w)Nr   z engine supports lists.rp   Invalidr   )r   applymarkerr   markxfailr   r0   r   )r   rj   rm   s      r   test_invalid_file_inputsr      ss    F}} KK6M%NO	
 
z	3   s   )BBc                     | }d}t        j                  t        |      5  |j                  dd       d d d        y # 1 sw Y   y xY w)NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r   testnumpy)dtype_backend)r   r   r0   r   )rj   rm   r7   s      r   test_invalid_dtype_backendr      sF    F	!  
z	- 7g67 7 7s	   =A)__doc__ior   rz   pathlibr   r   pandas.errorsr   pandas._testing_testingr1   pandas.io.parsersr   r>   r5   readersr   filterwarnings
pytestmarkfixturer   r   r~   r   r   r
   r   r   <module>r      s     	   %  & + +[[''C

 ,/_E FZ> Z>z$	7r   