U
    O8cΓ                     @   sj  d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	Z
ddlmZ ddlmZmZmZ dd Zejd	d
dddgdd Zejdd Zejdddddgdd Zdd Zdd Zdd Zdd Zd d! Zejd"d#d$d% Zejd"d#d&d' Zejd(d)d*gd+d, Zejd-d.ddd/gd0d1 Z ejd2d3d4d5 Z!d6d7 Z"ejd8e#e$fd9d: Z%ejj&eoej'j(d;kd<d=ejd8e
)d>e
)d?fd@dA Z*dBdC Z+dDdE Z,dFdG Z-dHdI Z.ejdJdKdLdMgejdNdKdLdMgdOdP Z/dQdR Z0dSdT Z1dUdV Z2dWdX Z3ejd8dYdZd[ Z4ejd\d]e
)d^fd_e
)d`fgdadb Z5dcdd Z6dedf Z7ejj&eoej'j(d;kd<d=ejd8e
j8dg ej9dhdidj Z:ejj&eoej'j(d;kd<d=ejd8e
j8dg ej9dhdkdl Z;ejd8e
j<e
j=fejdmdndodp Z>dqdr Z?dsdt Z@dudv ZAejj&e dwd=dxdy ZBejj&eo~ej'j(d;kd<d=dzd{ ZCejd|de#gd}fd~d ZDejj&eoej'j(d;kd<d=dd ZEejdddd ZFdd ZGejdddd ZHdd ZIejj&eo$ej'j(d;kd<d=dd ZJdd ZKdd ZLdd ZMdd ZNdd ZOejddejddejdddgdd ZPejdddd ZQejd8dgdddddddddddeRdfddeRdfdgejdddgdd ZSejd8e
j8dg d d dd ZTejd8ddd ZUejj&eoPej'j(d;kd<d=ejd8dejdddddddddgdd̄ ZVejj&eoej'j(d;kd<d=ejd8e
j8dg d d ddτ ZWejj&eoej'j(d;kd<d=ejd8e
j8dg d d ddф ZXejdddgddggddք ZYejdddgddgddgddggdd܄ ZZejddddgdd Z[dd Z\dd Z]G dd dZ^dd Z_dd Z`dd Zadd Zbejd2d3dd Zcejdddd Zdejdddgejdddd Zedd Zfejj&eo,ej'j(d;kd<d=d d Zgdd Zhej9ddd ZidS (  z
Tests specific to `np.loadtxt` added during the move of loadtxt to be backed
by C code.
These tests complement those found in `test_io.py`.
    N)NamedTemporaryFilemkstemp)StringIO)assert_equal)assert_array_equalHAS_REFCOUNTIS_PYPYc                  C   sJ   t d} tdddgdddgdd	d
gdddgg}ttj| dd| dS )z0Test that both 'e' and 'E' are parsed correctly.zE1.0e-1,2.0E1,3.0
4.0e-2,5.0E-1,6.0
7.0e-3,8.0E1,9.0
0.0e-4,1.0E-1,2.0g?g      4@      @g{Gz?      ?   gy&1|?g      T@	   r      ,	delimiterN)r   nparrayr   loadtxt)dataexpected r   @/tmp/pip-unpacked-wheel-fd_gsd75/numpy/lib/tests/test_loadtxt.pytest_scientific_notation   s    "r   commentz..z//z@-zthis is a comment:c                 C   sD   d}t |d| }tj|d| d}t|ddgddgd	d
gg d S )Nz,# IGNORE
1.5, 2.5# ABC
3.0,4.0# XXX
5.5,6.0
#r   r   comments      ?      @r	         @      @      @)r   replacer   r   r   )r   contenttxtar   r   r   test_comment_multiple_chars"   s    r&   c                  C   sP   t d} tdtjfdtjfddtjfg}tjdddd	d
dg|d}| ||fS )z|
    Fixture providing hetergeneous input data with a structured dtype, along
    with the associated structured array.
    zo1000;2.4;alpha;-34
2000;3.1;beta;29
3500;9.9;gamma;120
4090;8.1;delta;0
5001;4.4;epsilon;-99
6543;7.8;omega;-1
f0f1f2ZS7f3i  g333333@alphaii  g@beta   i  g#@gammax   i  g333333 @deltar   i  g@epsilonii  g333333@omegadtype)r   r   r<   uint16float64int8r   )r   r<   r   r   r   r   mixed_types_structured*   s"    
r@   skiprows   r      c                 C   s2   |\}}}t j||d| d}t||| d   d S )N;)r<   r   rA   r   r   r   )rA   r@   r   r<   r   r%   r   r   r   1test_structured_dtype_and_skiprows_no_empty_linesK   s    
rF   c                 C   s`   | \}}}t j||ddd\}}}}t||d  t||d  t||d  t||d  d S )NrD   T)r<   r   unpackr'   r(   r*   r+   rE   )r@   r   r<   r   r%   bcdr   r   r   test_unpack_structuredS   s    
rK   c                  C   sB   t ddg} td}t jddg| d}tt j|d| d| d S )	N)r%   u1r   )rH   rL   r   z0,1,2,3
6,7,8,9
r   rB   r   rC   ))r      )   r   r;   r   r   r<   r   r<   r   r   r   r   r<   r   r   r   r   r    test_structured_dtype_with_shape]   s    rU   c                  C   s<   t dg} td}t jdg| d}tt j|| d| d S )N)r%   rL   )r   r   z0 1 2 3
)rM   r;   rS   rT   r   r   r   &test_structured_dtype_with_multi_shaped   s    rV   c                  C   sr   t dtfdtfg} t dtfd| dfg}td}t jddd	gfd
ddgfg|d}tt j||dd| d S )NxycodeZpoints)r   z100,1,2,3,4
200,5,6,7,8
d   )      ?       @)r	   r      )      @r!   )g      @g       @r;   r   r<   r   )r   r<   floatintr   r   r   r   )Zpointdtr   r   r   r   r   test_nested_structured_subarrayk   s    

rc   c                  C   sB   t jddd} td}t jddg| d}tt j|d| d	| d S )
Nzi1, i4, i1, i4, i1, i4TZalignz1,2,3,4,5,6
7,8,9,10,11,12
)rB   r   rC         r   )rP   rQ   r   
         r;   r   rR   rS   )rb   r   r   r   r   r   test_structured_dtype_offsetsz   s    rj   param)rA   max_rowsc              	   C   s.   t jtdd tjd| di W 5 Q R X dS )z;skiprows and max_rows should raise for negative parameters.zargument must be nonnegativematchfoo.barN)ro   pytestraises
ValueErrorr   r   rk   r   r   r   "test_exception_negative_row_limits   s    rv   c              	   C   s.   t jtdd tjd| di W 5 Q R X d S )Nzargument must be an integerrm   ro   r[   )ro   rr   rs   	TypeErrorr   r   ru   r   r   r   $test_exception_noninteger_row_limits   s    ry   zdata, shape)z
1 2 3 4 5
)rB   rf   )z
1
2
3
4
5
)rf   rB   c                 C   s   t dddddg}||}tt jt| td| tt jt| tdd| tt jt| tdd| tt jt| tdd| d S )	NrB   r   rC   re   rf   r;   r   )r<   ndmin)r   r   Zreshaper   r   r   ra   )r   shapeZarrZarr2dr   r   r   test_ndmin_single_row_or_col   s    
r|   badvalr:   zplate of shrimpc              	   C   s,   t jtdd tjd| d W 5 Q R X d S )NzIllegal value of ndmin keywordrm   ro   )rz   rq   )r}   r   r   r   test_bad_ndmin   s    r~   ws) 	u        u   　c                 C   sn   t d|  d|  d|  d|  d|  d}tddd	gd
ddgdddgdddgg}ttj|td dd| d S )Nz1 2z30

z
4 5 60z
  z  
7 8 z 90
  # comment
3 2 1rB   r      re   rf   <   rP   rQ   Z   rC   r   r<   r   r   r   r   r   r   r   ra   )r   r$   r   r   r   r   test_blank_lines_spaces_delimit   s    "	* r   c                  C   sN   t d} tdddgdddgdd	d
gdddgg}ttj| tddd| d S )Nz&1,2,30

4,5,60

7,8,90
# comment
3,2,1rB   r   r   re   rf   r   rP   rQ   r   rC   r   r   r   r   )r$   r   r   r   r   !test_blank_lines_normal_delimiter   s    * r   r<   c                 C   sJ   t d}tj|| ddd}t|j|  t|tjddgddgg| d	 d S )
Nz1.5,2.5
3.0,4.0
5.5,6.0r   r   )r<   r   rl   z1.5z2.5z3.0z4.0r;   )r   r   r   r   r<   r   r<   r$   resr   r   r   test_maxrows_no_blank_lines   s    r   )rP   rC   rQ   zPyPy bug in error formatting)reasonZf8i2c              	   C   sB   t d}d|  d}tjt|d tj|| dd W 5 Q R X d S )Nz1,2
3,XXX
5,6z"could not convert string 'XXX' to z at row 1, column 2rm   r   r_   r   rr   rs   rt   r   r   )r<   r$   msgr   r   r   !test_exception_message_bad_values   s    r   c                  C   sV   t d} ddd i}tddgdtjgdd	gg}tj| tjd
|d d}t|| d S )Nz1.5,2.5
3.0,XXX
5.5,6.0r:   c                 S   s   | dkrt jS t| S NZXXXr   nanr`   sr   r   r   <lambda>       z2test_converters_negative_indices.<locals>.<lambda>r   r   r	   r    r!   r   )r<   r   
convertersencoding)r   r   r   r   r   r>   r   r$   convr   r   r   r   r    test_converters_negative_indices   s        r   c                  C   s   t d} ddd i}tddgdtjgdd	gg}tj| tjd
|ddgd d}t|| tjt dd
ddgddd id}t|ddgddgg d S )Nz$1.5,2.5,3.5
3.0,4.0,XXX
5.5,6.0,7.5
r:   c                 S   s   | dkrt jS t| S r   r   r   r   r   r   r      r   z?test_converters_negative_indices_with_usecols.<locals>.<lambda>r   g      @r	   r    g      @r   r   )r<   r   r   usecolsr   z0,1,2
0,1,2,3,4c                 S   s   dS )Nr:   r   rW   r   r   r   r      r   )r   r   r   )r   r   r   r   r   r>   r   r   r   r   r   r   -test_converters_negative_indices_with_usecols   s"    
 
r   c               	   C   s   t d} tddgddgddgg}tj| tdddgd}t|| t d} tjtdd tj| tdddgd W 5 Q R X d S )	N$0,0,XXX
0,XXX,0,XXX
0,XXX,XXX,0,XXX
r   r   r<   r   r   z0,0,XXX
0
0,XXX,XXX,0,XXX
z/invalid column index -2 at row 2 with 1 columnsrm   )	r   r   r   r   r`   r   rr   rs   rt   r$   r   r   r   r   r   test_ragged_usecols   s    
r   c                  C   sF   t d} tj| tg dg d}|jdks.t|jtg ksBtd S )Nr   r   r   )rC   )r   r   r   r<   r{   AssertionErrorr$   r   r   r   r   test_empty_usecols  s    r   c1r%   u   のu   🫕c2c                 C   sn   t d|  d| d}tj|tddd}tjd|  ddd| ddgtdd	}t|| d S )
Nza,z	,c,1.0
e,z,2.0,gU12r   r_   z,c,1.0ze,r;   )r   r   r   r<   r   splitr   )r   r   r$   r   r   r   r   r   test_large_unicode_characters  s    "r   c                  C   sX   t d} ddd i}tj| td|dd d}tdd	gd
dgddgg}t|| d S )Nu   cat,dog
αβγ,δεζ
abc,def
r   c                 S   s   |   S Nupperr   r   r   r   r     r   z-test_unicode_with_converter.<locals>.<lambda>r   r   )r<   r   r   r   ZCATZdogu   ΑΒΓu   δεζABCdef)r   r   r   r<   r   r   r$   r   r   r   r   r   r   test_unicode_with_converter  s    r   c                  C   sj   t d} tdtjfdtjfdg}dd dd d}tj| |d	|d
}tjdddg|d}t|| d S )Nz$1.5,2.5,Abc
3.0,4.0,dEf
5.5,6.0,ghI
mr)rY   U8c                 S   s   t dt|  S )Nrg   )ra   r`   r   r   r   r   r   *  r   z6test_converter_with_structured_dtype.<locals>.<lambda>c                 S   s   |   S r   r   r   r   r   r   r   *  r   )r   r:   r   )r<   r   r   )   r   r   )r   r   DEF)7   r!   ZGHIr;   )r   r   r<   Zint32float32r   r   r   )r$   rb   r   r   r   r   r   r   $test_converter_with_structured_dtype'  s     r   c                  C   sJ   t d} tj}tj| td|dd}tddgddgg}t|| d	S )
aL  
    With the default 'bytes' encoding, tokens are encoded prior to being
    passed to the converter. This means that the output of the converter may
    be bytes instead of unicode as expected by `read_rows`.

    This test checks that outputs from the above scenario are properly decoded
    prior to parsing by `read_rows`.
    zabc,def
rst,xyzZU3r   )r<   r   r   r   r   ZRSTZXYZN)r   bytesr   r   r   r<   r   r   r   r   r   r   !test_converter_with_unicode_dtype2  s    	   r   c                  C   sN   dd } | d d d } t | d }tj|dtd}t|tdd	gd
 d S )Nz	1.5, 2.5,P  r:   
r   r   rR   r   r   )r   r   )r   r   r   r`   r   Ztile)rowr$   r   r   r   r   test_read_huge_rowC  s
    r   ZedfgFDGc                 C   s8   d}t | } t j|g| dd }|| dks4td S )Na  0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.123456789r;   r   z0.123456789)r   r<   r   typer   )r<   fieldvaluer   r   r   test_huge_floatK  s    
r   )given_dtypeexpected_dtypeSS5UZU5c                 C   sR   t d}tj|| dd}tjddgddgdd	gg|d
}t|| t|j| dS )z
    The given dtype is just 'S' or 'U' with no length. In these cases, the
    length of the resulting dtype is determined by the longest string found
    in the file.
    zAAA,5-1
BBBBB,0-3
C,4-9
r   r_   ZAAAz5-1ZBBBBBz0-3Cz4-9r;   N)r   r   r   r   r   r<   )r   r   r$   r   r   r   r   r   test_string_no_length_givenT  s     
r   c                  C   sH   dddddg} t d| }t|}tdd | D }t|| d	S )
z
    Some tests that the conversion to float64 works as accurately as the
    Python built-in `float` function. In a naive version of the float parser,
    these strings resulted in values that were off by an ULP or two.
    z0.9999999999999999z9876543210.123456z5.43215432154321e+300z0.901z0.333r   c                 S   s   g | ]}t |qS r   )r`   ).0r   r   r   r   
<listcomp>y  s     z)test_float_conversion.<locals>.<listcomp>N)r   joinr   r   r   r   )stringsr$   r   r   r   r   r   test_float_conversionj  s    
r   c                  C   s^   t d} tj| tdd}|jtks&tt|ddgddgg t|tjddgddgg d S )Nz1, 0
10, -1r   r_   TFrB   r   )	r   r   r   boolr<   r   r   viewZuint8r   r   r   r   	test_bool}  s
    r   Z
AllIntegerz0error:.*integer via a float.*:DeprecationWarningc              
   C   s   t | } t jdg| ddks"t| jdkrTtt t jdg| d W 5 Q R X nt jdg| ddksltdD ]0}tt t j| d	g| d W 5 Q R X qpd S )
Nz+2r;   r   uz-1
z-2
r   )z++z+-z--z-+z2
)r   r<   r   r   kindrr   rs   rt   )r<   signr   r   r   test_integer_signs  s    

r   c              	   C   s2   t d}tt tj|| dd W 5 Q R X d S )Nz1.0, 2.1, 3.7
4, 5, 6r   r_   r   )r<   r$   r   r   r   %test_implicit_cast_float_to_int_fails  s    r   with_parens)FTc                 C   s\   d}|s| dd dd}tjt|| dd}tjddd	gd
ddgg| d}t|| d S )Nz*(1.0-2.5j),3.75,(7+-5.0j)
(4),(-19e2j),(0)( )r   r_   y      ?      g      @y      @      r   y            r   r;   )r"   r   r   r   r   r   )r<   r   r   r   r   r   r   r   test_complex_parsing  s     r   c                  C   sR   dd } t j|  tdd}t dddgdddgdddgd	d
dgg}t|| d S )Nc                  s   s0   t dD ]"} |  dd|   d| d  V  qd S )Nre   r   r   rangeir   r   r   gen  s    z%test_read_from_generator.<locals>.genr   r_   r   rB   r   re   rC   r   r   )r   r   ra   r   r   r   r   r   r   r   r   test_read_from_generator  s    *r   c                  C   s<   dd } t j|  ddd}t jdddgdd	}t|| d S )
Nc                  s   s&   t dD ]} |  d| d  V  qd S )NrC   r   re   r   r   r   r   r   r     s    z/test_read_from_generator_multitype.<locals>.genzi, dr   r_   )r   g        )rB   g      ?)r   r
   r;   )r   r   r   r   r   r   r   r   "test_read_from_generator_multitype  s    r   c               	   C   s8   dd } t jtdd tj|  ddd W 5 Q R X d S )Nc                  s   s   dD ]
} | V  qd S )N)z1,2s   3, 5i1  r   )entryr   r   r   r     s    z)test_read_from_bad_generator.<locals>.gen&non-string returned while reading datarm   zi, ir   r_   rw   )r   r   r   r   test_read_from_bad_generator  s     r   zPython lacks refcountsc               	      sh   t  d  fdd} tdd }tjtdd tj|t d| id W 5 Q R X td	ksdt	d S )
Nr   c                    s    dkrt d d7  S )Ni  zfailed half-way through!rB   )rt   r   Zalready_readsentinelr   r   r     s    z/test_object_cleanup_on_read_error.<locals>.convzx
i'  zat row 5000, column 1rm   )r<   r   r   )
objectr   rr   rs   rt   r   r   sysgetrefcountr   )r   r$   r   r   r   !test_object_cleanup_on_read_error  s    r   c               	   C   s0   t d} tt tj| dd W 5 Q R X dS )z9Test exception when a character cannot be encoded as 'S'.u   –r   r;   Nr   )r   r   r   r   #test_character_not_bytes_compatible  s    r   r   r   c              	   C   s4   d}t jt|d tjtd| d W 5 Q R X d S )Nz\converters must be a dictionary mapping columns to converter functions or a single callable.rm   1 2
3 4r   rr   rs   rx   r   r   r   )r   r   r   r   r   test_invalid_converter  s    r   c                	   C   sf   t jtdd tjtddtid W 5 Q R X t jtdd tjtddtidd W 5 Q R X d S )Nzkeys of the converters dictrm   r   r%   r   r   )r   r   )rr   rs   rx   r   r   r   ra   r   r   r   r   +test_converters_dict_raises_non_integer_key  s     r   bad_col_ind)rC   rp   c              	   C   s8   t d}tjtdd tj|| tid W 5 Q R X d S )Nr   zconverter specified for columnrm   r   )r   rr   rs   rt   r   r   ra   )r   r   r   r   r   'test_converters_dict_raises_non_col_key  s    r   c                	   C   s4   t jtdd tjtdddid W 5 Q R X d S )Nz4values of the converters dictionary must be callablerm   r   r   rB   r   r   r   r   r   r   ,test_converters_dict_raises_val_not_callable  s    r   q)"'`c                 C   st   t |  d|  d|  d|  d|  d|  d}tddtjfg}tjd	d
dg|d}tj||d| d}t|| d S )Nalpha, xz, 2.5
beta, yz, 4.5
gamma, zz, 5.0
)r'   r   r(   )r   r   )r   g      @)r   r^   r;   r   r<   r   	quotechar)r   r   r<   r>   r   r   r   )r   r$   r<   r   r   r   r   r   test_quoted_field  s    & r  c               	   C   s   t d} tddtjfdtjfg}tjtdd tj| |dd W 5 Q R X | d	 tj	d
g|d}tj| |ddd}t
|| dS )z1Support for quoted fields is disabled by default.z"lat,long", 45, 30
)r'   ZU24r(   r*   zthe number of columns changedrm   r   r_   r   )zlat,longg     F@g      >@r;   r   r  N)r   r   r<   r>   rr   rs   rt   r   seekr   r   )r$   r<   r   r   r   r   r   test_quote_support_default  s    
r  c               	   C   s:   t d} d}tjt|d tj| ddd W 5 Q R X d S )N1,2
3,4z,.*must be a single unicode character or Nonerm   r   z''r   r  r   rr   rs   rx   r   r   )r$   r   r   r   r   test_quotechar_multichar_error)  s    r	  c               	   C   s   t d} d}tjt|d tj| dddd W 5 Q R X tjt|d tj| ddd	gdd W 5 Q R X tj| dd
dd}t|ddgddgg d S )Nr  zWwhen multiple comments or a multi-character comment is given, quotes are not supported.rm   r   Z123r   )r   r   r  r   %)r   r   rB   r   rC   re   )r   rr   rs   rt   r   r   r   )r$   r   r   r   r   r   'test_comment_multichar_error_with_quote2  s     r  c                  C   sf   t d} tdtjfdtjfddtjfg}tjdddd	d
dg|d}tj| |ddd}t|| d S )Nz{1000;2.4;'alpha';-34
2000;3.1;'beta';29
3500;9.9;'gamma';120
4090;8.1;'delta';0
5001;4.4;'epsilon';-99
6543;7.8;'omega';-1
r'   r(   r)   r+   r,   r.   r1   r4   r6   r8   r;   rD   r   r  )	r   r   r<   r=   r>   r?   r   r   r   )r   r<   r   r   r   r   r   !test_structured_dtype_with_quotesB  s$    
r  c                  C   s<   t d} tjdddgdd}tj| dddd	}t|| d S )
Nz	1

"4"
""14r   U1r;   r   r   r   r<   r  r   r   r   r   r   r   r   r   r   test_quoted_field_is_not_empty_  s    r  c                  C   s<   t d} tjdddgdd}tj| dddd	}t|| d S )
Nz1

"4"
"r  r  r   r  r;   r   r   r  r  r   r   r   r   (test_quoted_field_is_not_empty_nonstricte  s    r  c                  C   s6   t d} tjddd}tj| dddd}t|| d S )Nz"Hello, my name is ""Monty""!"zHello, my name is "Monty"!ZU40r;   r   r   r  r  r   r   r   r   "test_consecutive_quotechar_escapedm  s    r  r   )r   z


z# 1 2 3
# 4 5 6
rz   )r   rB   r   r   )rB   r   rC   c              
   C   s   |dk	rd}n|dkrd}nd}t | }tjtdd tj|||d}W 5 Q R X |j|ks`ttd	d
R}|	|  |
d tjtdd tj|||d}W 5 Q R X |j|kstW 5 Q R X dS )zDCheck that a UserWarning is emitted when no data is read from input.N)r   rC   r   rN   )r   input contained no datarm   )rz   r   w)moder   )r   rr   warnsUserWarningr   r   r{   r   r   writer  )r   rz   r   Zexpected_shaper$   r   fhr   r   r   test_warn_on_no_datat  s    

r  rO   c              	   C   s8   d}t |}tjtdd tj|| d W 5 Q R X d S )Nz1 2 3
4 5 6r  rm   )rA   )r   rr   r  r  r   r   )rA   r   r$   r   r   r   test_warn_on_skipped_data  s    r  r   )r   rB   )u2rB   )i4 )Zu4r   )i8   
 )u8r"  )Zfloat16g#{ ?)r   g. 7)	complex64y. 7`F$:)r>   g
complex128ywfUD3":)Z
longdoubler"  Zclongdoubleyp`P@0 B B)ZU2u   𐈃򠬌swapTFc                 C   s~   t | } d| dg}|r$|  } t jdd| fgdd}|jd d dksPtt j||dd dd	}|d | |ksztd S )
Nzx,r   )r%   ZS1rH   Frd   rB   r   )r<   r   r   rl   )r   r<   Znewbyteorderfieldsr   r   r   )r<   r   r&  r   Zfull_dtr   r   r   r   test_byteswapping_and_unaligned  s    
r(  ZefdFD?c                 C   s8   t d}tj|| ddd}t|tddg|  d S )Nu    3 ," 2
"r   r   r  rC   r   )r   r   r   r   r   Zastyper   r   r   r   !test_unicode_whitespace_stripping  s    r*  ZFDc              
   C   sJ   d}|| ddg}tj|| dd}t|tdddd	d
dggd  d S )Nz0 1 , 2+3j , ( 4+5j ), ( 6+-7j )  , 8j , ( 9j ) 
r   u    r   r_   rB   y       @      @y      @      @y      @      y               @y              "@r   )r"   r   r   r   r   )r<   liner   r   r   r   r   )test_unicode_whitespace_stripping_complex  s    r,  r   z1 +2jz1+ 2jz1+2 jz1+-+3z(1jz(1z(1+2jz1+2j)c              	   C   s0   t t tj|d g| dd W 5 Q R X d S )Nr   r   r_   rq   )r<   r   r   r   r   test_bad_complex  s    r-  ZefgdFDGc              	   C   sD   |   dkrtd tt tjdg| ddd W 5 Q R X d S )Ngz0longdouble/clongdouble assignment may misbehave.1 r   r   r  )lowerrr   xfailrs   rt   r   r   r;   r   r   r   test_nul_character_error  s    
r2  c              	   C   s~   | dkrt d | dkr$t d tdtd  krNtd  krNdksTn tt t t	j
dg| d W 5 Q R X d S )	Nez5half assignment currently uses Python float converterZeGz2clongdouble assignment is buggy (uses `complex`?).Z1_1rh   z1_1
r;   )rr   skipr1  ra   r`   complexr   rs   rt   r   r   r;   r   r   r   test_no_thousands_support  s    

0r6  z1,2
z2
,3
z2,3
c              	   C   s0   d}t jt|d tj| dd W 5 Q R X d S )Nz7Found an unquoted embedded newline within a single linerm   r   r   rq   )r   r   r   r   r   test_bad_newline_in_iterator  s    r7  z2,3
z'2
',3
z'2',3
z'2
',3
c                 C   s*   t j| ddd}t|ddgddgg d S )Nr   r   r  r[   r\   r	   rE   )r   r   r   r   r   test_good_newline_in_iterator  s    r8  newliner   
c                    sV   dddg} fdd|D }t j|tddd}t|d	d
  gdd  d	gg d S )Nz1,"2
"
z3,"4
z1"
c                    s   g | ]}| d  qS )r   )r"   )r   r   r9  r   r   r     s     z2test_universal_newlines_quoted.<locals>.<listcomp>r   r   r  r  23r  )r   r   r   r   )r9  r   r   r   r<  r   test_universal_newlines_quoted  s    
r?  c                  C   sd   t jddgdd} t| dddgdd	d
gg t jddgdtd} |  dddgdddggks`td S )Nz1 2 3
z4 5 6 r   rB   r   rC   re   rf   r   z1 ,2 ,3
z4 ,5 ,6r   rR   r/  z2 r>  z4 z5 6)r   r   r   r   tolistr   )r   r   r   r   test_null_character  s    
 rC  c               	   C   s>   G dd d} t jtdd tj|  tdd W 5 Q R X d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z:test_iterator_fails_getting_next_line.<locals>.BadSequencec                 S   s   dS )NrZ   r   selfr   r   r   __len__#  s    zBtest_iterator_fails_getting_next_line.<locals>.BadSequence.__len__c                 S   s"   |dkrt d| d|d  S )N2   Bad things happened!z, rB   )RuntimeError)rE  itemr   r   r   __getitem__&  s    zFtest_iterator_fails_getting_next_line.<locals>.BadSequence.__getitem__N)__name__
__module____qualname__rF  rK  r   r   r   r   BadSequence"  s   rO  rH  rm   r   r_   )rr   rs   rI  r   r   ra   )rO  r   r   r   %test_iterator_fails_getting_next_line!  s    	rP  c                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
ddddgdd ZdS )TestCReaderUnitTestsc              	   C   s:   t jtdd" tjjjt tddd W 5 Q R X d S )Nz.*readrm   r   Tr<   filelike)	rr   rs   AttributeErrorr   core_multiarray_umath_load_from_fileliker   r<   rD  r   r   r   test_not_an_filelike2  s      z)TestCReaderUnitTests.test_not_an_filelikec              	   C   sH   G dd d}t jtdd" tjjj| tddd W 5 Q R X d S )Nc                   @   s   e Zd ZdZdd ZdS )zBTestCReaderUnitTests.test_filelike_read_fails.<locals>.BadFileLiker   c                 S   s$   |  j d7  _ | j dkr tddS )NrB      Bad bad bad!z1,2,3
)counterrI  rE  sizer   r   r   read>  s    
zGTestCReaderUnitTests.test_filelike_read_fails.<locals>.BadFileLike.readNrL  rM  rN  r[  r^  r   r   r   r   BadFileLike;  s   r`  rZ  rm   r   TrR  )rr   rs   rI  r   rU  rV  rW  r<   rE  r`  r   r   r   test_filelike_read_fails7  s    	  z-TestCReaderUnitTests.test_filelike_read_failsc              	   C   sH   G dd d}t jtdd" tjjj| tddd W 5 Q R X d S )Nc                   @   s   e Zd ZdZdd ZdS )z@TestCReaderUnitTests.test_filelike_bad_read.<locals>.BadFileLiker   c                 S   s   dS )Ni  r   r\  r   r   r   r^  P  s    zETestCReaderUnitTests.test_filelike_bad_read.<locals>.BadFileLike.readNr_  r   r   r   r   r`  M  s   r`  r   rm   r   TrR  )rr   rs   rx   r   rU  rV  rW  r<   ra  r   r   r   test_filelike_bad_readH  s      z+TestCReaderUnitTests.test_filelike_bad_readc              	   C   s:   t jtdd" tjjjt tddd W 5 Q R X d S )Nz/error reading from object, expected an iterablerm   r   FrR  	rr   rs   rx   r   rU  rV  rW  r   r<   rD  r   r   r   test_not_an_iterX  s      z%TestCReaderUnitTests.test_not_an_iterc              	   C   s4   t jtdd tjjjt ddd W 5 Q R X d S )Nzinternal error: dtype mustrm   r   FrR  )rr   rs   rx   r   rU  rV  rW  r   rD  r   r   r   test_bad_type^  s      z"TestCReaderUnitTests.test_bad_typec              	   C   s<   t jtdd$ tjjjt tdddd W 5 Q R X d S )Nzencoding must be a unicoderm   r   F{   )r<   rS  r   rd  rD  r   r   r   test_bad_encodingc  s       z&TestCReaderUnitTests.test_bad_encodingr9  r:  r   r;  c                 C   s\   t dd|dd}tjjj|tddddd	d
}t|d d df dd| ddg d S )Nz0
1
"2
"
3
4 #
r   r   r<  ZU10Tr   r   rB   )r<   rS  quoter   Z	skiplinesr   r  r=  r>  z4 )r   r"   r   rU  rV  rW  r<   r   )rE  r9  r   r   r   r   r   test_manual_universal_newlinesh  s        z3TestCReaderUnitTests.test_manual_universal_newlinesN)rL  rM  rN  rX  rb  rc  re  rf  rh  rr   markparametrizerj  r   r   r   r   rQ  /  s   rQ  c                	   C   s2   t jtdd tjtdddd W 5 Q R X d S )N".*control characters.*incompatiblerm   1, 2, 3r   r   r   r   r   r   r   'test_delimiter_comment_collision_raisesx  s    ro  c                	   C   s2   t jtdd tjtdddd W 5 Q R X d S )Nrm  rm   rn  r   r  r   r   r   r   r   )test_delimiter_quotechar_collision_raises}  s    rp  c                	   C   s2   t jtdd tjtdddd W 5 Q R X d S )Nrm  rm   1 2 3r   )r   r  r   r   r   r   r   'test_comment_quotechar_collision_raises  s    rr  c                	   C   s6   t jtdd tjtddddgd W 5 Q R X d S )Nz0Comment characters.*cannot include the delimiterrm   rn  r   r   r   r   r   r   r   r   5test_delimiter_and_multiple_comments_collision_raises  s
     rs  c                 C   s   t jtdd2 tjtd|  d|  d|  d|  d	| d W 5 Q R X t jtdd2 tjtd|  d|  d|  d|  d	| d	 W 5 Q R X d S )
Nrm  rm   r  r=  z3
45z6
r   r  r   )r   r   r   r   ,test_collision_with_default_delimiter_raises  s    6rw  nl)r   r:  c                 C   s   t d|  d|  d|  |  d|  d|  d|  |  }d}tjt|d tj|| d	 W 5 Q R X tjt|d tj|| d
 W 5 Q R X tjt|d tj|| d W 5 Q R X d S )Nr  r=  r>  r  rt  rA  z&control character.*cannot be a newlinerm   r   ru  rv  r  )rx  r$   r   r   r   r   %test_control_character_newline_raises  s    4ry  )generic_data
long_datumunitless_dtyper   )z2012-03z
2013-01-15ZM8zM8[D])
spam-a-lottis_but_a_scratchr   U17nrows)rg   r   `  c              	   C   s   | gd |g }t j||d}td|}t j||d}|j|jksJtt|| t \}	}
t	
|	 t|
d}|d| W 5 Q R X t j|
|d}t	|
 |j|jkstt|| dS )zCheck that the correct unit (e.g. month, day, second) is discovered from
    the data when a user specifies a unitless datetime.r   r;   r   r  Nr   r   r   r   r   r<   r   r   r   oscloseopenr  remove)rz  r{  r|  r   r  r   r   r$   r%   fdfnamer  r   r   r   test_parametric_unit_discovery  s    



r  c               	   C   s   dgd dg } t jdgd dg dd}dd }td	| }t j|d
|d d}|j|jksbtt|| t \}}t	
| t|d}|d	|  W 5 Q R X t j|d
|d d}t	| |j|jkstt|| d S )Nr}  r  ZXXXtis_but_a_scratchr~  r  r;   c                 S   s
   |  dS r   )stripr   r   r   r   r     r   z>test_str_dtype_unit_discovery_with_converter.<locals>.<lambda>r   r   )r<   r   r   r  r  )r   r   r   r$   r%   r  r  r  r   r   r   ,test_str_dtype_unit_discovery_with_converter  s$     



r  c                	   C   s   t jtdd tjtddd W 5 Q R X t jtdd tjtddd W 5 Q R X t jtdd tjtddd W 5 Q R X t jtdd tjtdd	dgd W 5 Q R X d S )
Nz#Text reading control character mustrm   rq  r   r   rv  z"comments cannot be an empty stringru  r   )rr   rs   rx   r   r   r   rt   r   r   r   r   test_control_character_empty  s    r  c                  C   s(   t jtdddd} t| dddg dS )	z<Byte control characters (comments, delimiter) are supported.z#header
1,2,3   #   ,)r   r   rB   r   rC   N)r   r   r   r   )r%   r   r   r    test_control_characters_as_bytes  s    r  zignore::UserWarningc                  C   s`   t jdgdtd} t| dks"ttddD ].}t jd| gdtd} t| |d ks,tq,d S )Nr   r   rR   r   rB   i   )r   r   r   lenr   r   )r   r   r   r   r   test_field_growing_cases  s
    r  )j__doc__r   r  rr   tempfiler   r   ior   Znumpyr   Znumpy.ma.testutilsr   Znumpy.testingr   r   r   r   rk  rl  r&   Zfixturer@   rF   rK   rU   rV   rc   rj   rv   ry   r|   r~   r   r   r`   r   r   Zskipifimplementationversionr<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	typecodesfilterwarningsr   r   r$  r%  r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r  r  reprr(  r*  r,  r-  r2  r6  r7  r8  r?  rC  rP  rQ  ro  rp  rr  rs  rw  ry  r  r  r  r  r  r   r   r   r   <module>   s  

 





















	




    




		
	


I


