
    Bwg                        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 Zej$                  j'                  dg d	      d
        Zej*                  d        Zej$                  j'                  dg d      d        Zd Zd Zd Zd Zd Zej$                  j'                  dd      d        Zej$                  j'                  dd      d        Zej$                  j'                  dddg      d        Zej$                  j'                  dg d      d        Z ej$                  j'                  dd       d!        Z!d" Z"ej$                  j'                  d#e#e$f      d$        Z%ej$                  jM                  exr ejN                  jP                  d%k  d&'      ej$                  j'                  d# e
jR                  d(       e
jR                  d)      f      d*               Z*d+ Z+d, Z,d- Z-d. Z.d/ Z/ej$                  j'                  d0g d1      ej$                  j'                  d2g d1      d3               Z0d4 Z1d5 Z2d6 Z3d7 Z4ej$                  j'                  d#d8      d9        Z5ej$                  j'                  d:d; e
jR                  d<      fd= e
jR                  d>      fg      d?        Z6d@ Z7dA Z8ej$                  jM                  exr ejN                  jP                  d%k  d&'      ej$                  j'                  d#e
jr                  dB         ej$                  ju                  dC      dD                      Z;ej$                  jM                  exr ejN                  jP                  d%k  d&'      ej$                  j'                  d#e
jr                  dB         ej$                  ju                  dC      dE                      Z<ej$                  j'                  d#e
jz                  e
j|                  f      ej$                  j'                  dFdG      dH               Z?dI Z@dJ ZAdK ZBej$                  jM                  e dL'      dM        ZCej$                  jM                  exr ejN                  jP                  d%k  d&'      dN        ZDej$                  j'                  dOde#gdPf      dQ        ZEej$                  jM                  exr ejN                  jP                  d%k  d&'      dR        ZFej$                  j'                  dSdT      dU        ZGdV ZHej$                  j'                  dWdX      dY        ZIej$                  j'                  dWdX      dZ        ZJd[ ZKej$                  jM                  exr ejN                  jP                  d%k  d&'      d\        ZLd] ZMd^ ZNd_ ZOd` ZPda ZQej$                  j'                  dbdc      ej$                  j'                  ddde      ej$                  j'                  dfddgg      dh                      ZRej$                  j'                  ddi      dj        ZSej$                  j'                  d#dkgdldmdndodpdqdrdsdtdudv eTdw      fdxdy eTdz      fd{g      ej$                  j'                  d|d}d~g      d               ZUej$                  j'                  d#e
jr                  dB   dz   dz         d        ZVej$                  j'                  d#d      d        ZWej$                  jM                  exr ejN                  jP                  d%k  d&'      ej$                  j'                  d#d      ej$                  j'                  dg d      d                      ZXej$                  jM                  exr ejN                  jP                  d%k  d&'      ej$                  j'                  d#e
jr                  dB   dz   dz         d               ZYej$                  jM                  exr ejN                  jP                  d%k  d&'      ej$                  j'                  d#e
jr                  dB   dz   dz         d               ZZej$                  j'                  dbddgddgg      d        Z[ej$                  j'                  dbddgddgddgddgg      d        Z\ej$                  j'                  dg d      d        Z]d Z^d Z_ G d d      Z`d Zad Zbd Zcd Zdej$                  j'                  dd       d        Zeej$                  j'                  dd      d        Zfej$                  j'                  dddg      ej$                  j'                  dd      d               Zgd Zhej$                  jM                  exr ejN                  jP                  d%k  d&'      d        Zid Zjej$                  ju                  d      d        Zkej$                  j'                  dd      d        Zly)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                      t        d      } t        j                  g dg dg dg dg      }t        t        j                  | d      |       y)	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.0)皙?g      4@      @)g{Gz?      ?   )gy&1|?g      T@	   )r   r      ,	delimiterN)r   nparrayr   loadtxt)dataexpecteds     S/var/www/horilla/myenv/lib/python3.12/site-packages/numpy/lib/tests/test_loadtxt.pytest_scientific_notationr      sD     D xx	./;GH rzz$#6A    comment)z..z//z@-zthis is a comment:c                     d}t        |j                  d|             }t        j                  |d|       }t	        |ddgddgd	d
gg       y )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as       r   test_comment_multiple_charsr*   "   sK    @G
7??30
1C


3#8Ac3Z#sc3Z89r   c                      t        d      } t        j                  dt        j                  fdt        j                  fddt        j
                  fg      }t        j                  g d|      }| ||fS )z}
    Fixture providing heterogeneous 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f2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   s      r   mixed_types_structuredrA   *   sr     "	D HH
			T2::.tRWWoNE xx	
 
H   r   skiprows)r      r      c                 `    |\  }}}t        j                  ||d|       }t        ||| d         y )N;)r=   r   rB   r   r   r   )rB   rA   r   r=   r   r)   s         r   1test_structured_dtype_and_skiprows_no_empty_linesrH   K   s5     3D%


4uhGAq(89-.r   c                     | \  }}}t        j                  ||dd      \  }}}}t        ||d          t        ||d          t        ||d          t        ||d          y )NrF   T)r=   r   unpackr,   r-   r/   r1   rG   )rA   r   r=   r   r)   bcds           r   test_unpack_structuredrN   S   sb    2D%DTJJAq!Qq(4.)q(4.)q(4.)q(4.)r   c                      t        j                  ddg      } t        d      }t        j                  ddg|       }t	        t        j
                  |d|       |       y )	N)r)   u1r   )rK   rP   r   z0,1,2,3
6,7,8,9
r   rC   r   rD   ))r      )   r   r<   r   r   r=   r   r=   r   r   r   r   r=   r   r   s      r    test_structured_dtype_with_shaperY   ]   sN    HHnn56E()Dxx)+;<EJHrzz$#UCXNr   c                      t        j                  dg      } t        d      }t        j                  dg|       }t	        t        j
                  ||       |       y )N)r)   rP   )r   r   z0 1 2 3
)rQ   r<   rW   rX   s      r   &test_structured_dtype_with_multi_shaper[   d   sG    HH)*+EK Dxx,-U;Hrzz$e4h?r   c                  &   t        j                  dt        fdt        fg      } t        j                  dt        fd| dfg      }t	        d      }t        j
                  ddd	gfd
ddgfg|      }t        t        j                  ||d      |       y )Nxycode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   )pointdtr   r   s       r   test_nested_structured_subarrayrk   k   s    HHsElS%L12E	FC=8UD"9:	;B01Dxx8X&'8X&'	
 H rzz$bC@(Kr   c                      t        j                  dd      } t        d      }t        j                  ddg|       }t	        t        j
                  |d| 	      |       y )
Nzi1, i4, i1, i4, i1, i4Talignz1,2,3,4,5,6
7,8,9,10,11,12
)rC   r   rD         r   )rT   rU   r   
         r<   r   rV   rW   )rj   r   r   s      r   test_structured_dtype_offsetsrt   z   sL    	*$	7B34Dxx+-BC2NHrzz$#R@(Kr   param)rB   max_rowsc                     t        j                  t        d      5  t        j                  di | di ddd       y# 1 sw Y   yxY w)z;skiprows and max_rows should raise for negative parameters.zargument must be nonnegativematchNfoo.barpytestraises
ValueErrorr   r   ru   s    r   "test_exception_negative_row_limitsr      s;     
z)G	H -


,,- - -	   =Ac                     t        j                  t        d      5  t        j                  di | di d d d        y # 1 sw Y   y xY w)Nzargument must be an integerrx   rb   r{   r~   r   	TypeErrorr   r   r   s    r   $test_exception_noninteger_row_limitsr      s9    	y(E	F .


--. . .r   zdata, shape)z
1 2 3 4 5
)rC   rp   )z
1
2
3
4
5
)rp   rC   c                    t        j                  g d      }|j                  |      }t        t        j                  t        |       t              |       t        t        j                  t        |       t        d      |       t        t        j                  t        |       t        d      |       t        t        j                  t        |       t        d      |       y )N)rC   r   rD   ro   rp   r<   r   )r=   ndminrC   r   )r   r   reshaper   r   r   rh   )r   shapearrarr2ds       r   test_ndmin_single_row_or_colr      s     ((?
#CKKErzz(4.<cBrzz(4.1EsKrzz(4.1EsKrzz(4.1EuMr   badval)r;   rD   Nzplate of shrimpc                     t        j                  t        d      5  t        j                  d|        d d d        y # 1 sw Y   y xY w)NzIllegal value of ndmin keywordrx   r|   )r   r}   )r   s    r   test_bad_ndminr      s4    	z)I	J ,


9F+, , ,r   ws) 	u        u   　c                     t        d|  d|  d|  d|  d|  d      }t        j                  g dg dg d	g d
g      }t        t        j                  |t
        d d      |       y )Nz1 2z30

z
4 5 60z
  z  
7 8 z 90
  # comment
3 2 1rC   r      ro   rp   <   rT   rU   Z   rD   r   rC   r   r=   r   r    r   r   r   r   r   rh   )r   r(   r   s      r   test_blank_lines_spaces_delimitr      st     
bTt D d 	C xxZYGHH


3cTC@(r   c                      t        d      } t        j                  g dg dg dg dg      }t        t        j                  | t
        dd      |       y )	Nz&1,2,30

4,5,60

7,8,90
# comment
3,2,1r   r   r   r   r   r   r   r   )r(   r   s     r   !test_blank_lines_normal_delimiterr      s@    
A
BCxxZYGHH


3cS3?r   r=   c                     t        d      }t        j                  || dd      }t        |j                  |        t        |t        j
                  ddgddgg| 	             y )
Nz1.5,2.5
3.0,4.0
5.5,6.0r   r   r=   r   rv   z1.5z2.5z3.0z4.0r<   )r   r   r   r   r=   r   r=   r(   ress      r   test_maxrows_no_blank_linesr      sQ    
.
/C
**Sq
ACE"bhh?uMNr   )rT   rD   rU   zPyPy bug in error formatting)reasonf8i2c                     t        d      }d|  d}t        j                  t        |      5  t	        j
                  || d       d d d        y # 1 sw Y   y xY w)Nz1,2
3,XXX
5,6z"could not convert string 'XXX' to z at row 1, column 2rx   r   rf   r   r~   r   r   r   r   )r=   r(   msgs      r   !test_exception_message_bad_valuesr      sQ     $
%C.ug5H
IC	z	- 4


3es34 4 4s   AAc                      t        d      } dd i}t        j                  ddgdt        j                  gddgg      }t        j                  | t        j
                  d	|
      }t        ||       y )Nz1.5,2.5
3.0,XXX
5.5,6.0r;   c                 B    | dk(  rt         j                  S t        |       S NXXXr   nanrg   ss    r   <lambda>z2test_converters_negative_indices.<locals>.<lambda>       AJ"&& E!H r   r!   r"   r   r$   r%   r   r=   r   
converters)r   r   r   r   r   r?   r   r(   convr   r   s       r    test_converters_negative_indicesr      s_    
.
/C<=Dxx#sc266]S#J?@H
**S

cd
KChr   c                  Z   t        d      } dd i}t        j                  ddgdt        j                  gddgg      }t        j                  | t        j
                  d	|d
dg      }t        ||       t        j                  t        d      d	d
dgdd i      }t        |d
dgd
dgg       y )Nz$1.5,2.5,3.5
3.0,4.0,XXX
5.5,6.0,7.5
r;   c                 B    | dk(  rt         j                  S t        |       S r   r   r   s    r   r   z?test_converters_negative_indices_with_usecols.<locals>.<lambda>   r   r   r!   g      @r   r$   g      @r   r   )r=   r   r   usecolsz0,1,2
0,1,2,3,4c                      y)Nr;    )r]   s    r   r   z?test_converters_negative_indices_with_usecols.<locals>.<lambda>   s    r   )r   r   r   )r   r   r   r   r   r?   r   r   r   s       r   -test_converters_negative_indices_with_usecolsr      s    
<
=C<=Dxx#sc266]S#J?@H
**jjBC h **X45W"|1EGCsaWq"g./r   c                      g d} t        j                  t        d      5  t        j                  | d       d d d        y # 1 sw Y   y xY w)N)1,2,3r   z4,3,2,1z2the number of columns changed from 3 to 4 at row 3rx   r   r   r}   )rowss    r   test_ragged_errorr      s<    (D	zF
H (


43'( ( (s   AA
c                  `   t        d      } t        j                  ddgddgddgg      }t        j                  | t        dddg      }t        ||       t        d      } t        j                  t        d      5  t        j                  | t        dddg       d d d        y # 1 sw Y   y xY w)	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 columnsrx   )	r   r   r   r   rg   r   r~   r   r   r(   r   r   s      r   test_ragged_usecolsr      s    
<
=Cxx!Q!Q!Q01H
**Sq"g
FCh
2
3C	zG
I E 	

3esQGDE E Es   ; B$$B-c                      t        d      } t        j                  | t        j                  g       dg       }|j                  dk(  sJ |j                  t        j                  g       k(  sJ y )Nr   r   r   )rD   )r   r   r   r=   r   r(   r   s     r   test_empty_usecolsr   
  sU    
<
=C
**SR
HC9999$$$r   c1)r)   u   のu   🫕c2c                 :   t        d|  d| d      }t        j                  |t        j                  d      d      }t        j                  d|  dj                  d      d| dj                  d      gt        j                  d      	      }t        ||       y )
Nza,z	,c,1.0
e,z,2.0,gU12r   rf   z,c,1.0ze,r<   )r   r   r   r=   r   splitr   )r   r   r(   r   r   s        r   test_large_unicode_charactersr     s     Rt:bT0
1C
**S3
?CxxbT		s	#r"V_%:%:3%?@hhuoH hr   c                      t        d      } dd i}t        j                  | t        j                  d      |dd       }t        j                  ddgd	d
gddgg      }t        ||       y )Nu   cat,dog
αβγ,δεζ
abc,def
r   c                 "    | j                         S Nupperr   s    r   r   z-test_unicode_with_converter.<locals>.<lambda>   s     r   r   r   r=   r   r   encodingCATdogu   ΑΒΓu   δεζABCdef)r   r   r   r=   r   r   r(   r   r   r   s       r   test_unicode_with_converterr     sk    
6
7C"#D
**hhuoC xx%(H)=u~NOHhr   c                     t        d      } t        j                  dt        j                  fdt        j                  fdg      }d d d}t        j
                  | |d|	      }t        j                  g d
|      }t        ||       y )Nz$1.5,2.5,Abc
3.0,4.0,dEf
5.5,6.0,ghI
mr)r_   U8c                 0    t        dt        |       z        S )Nrq   )rh   rg   r   s    r   r   z6test_converter_with_structured_dtype.<locals>.<lambda>/  s    Ra[) r   c                 "    | j                         S r   r   r   s    r   r   z6test_converter_with_structured_dtype.<locals>.<lambda>/  s     r   )r   r;   r   r   ))   r"   r   )r   r#   DEF)7   r%   GHIr<   )r   r   r=   int32float32r   r   r   )r(   rj   r   r   r   s        r   $test_converter_with_structured_dtyper   ,  sq    
<
=C	C?S"**$5~F	GB)/BCD
**Scd
CCxx>bH hr   c                      t        d      } t        j                  }t        j                  | t        j
                  d      |dd      }t        j                  ddgdd	gg      }t        ||       y
)aD  
    With the '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,xyzU3r   bytesr   r   r   RSTXYZN)r   r   r   r   r   r=   r   r   r   s       r   !test_converter_with_unicode_dtyper   7  sa     %
&C;;D
**rxx~$#C xx%%89Hhr   c                      ddz  } | d d dz   } t        | dz        }t        j                  |dt              }t	        |t        j
                  dd	gd
             y )Nz	1.5, 2.5,P  r;   
r   r   rV   r!   r"   )r   r   )r   r   r   rg   r   tile)rowr(   r   s      r   test_read_huge_rowr   I  sT    

C
cr(T/C
37
C
**SCu
5CbggsCj*56r   edfgFDGc                     d}t        j                  |       } t        j                  |g|       d   }|| j                  d      k(  sJ y )Na  0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.123456789r<   r   z0.123456789)r   r=   r   type)r=   fieldvalues      r   test_huge_floatr  Q  sD     &EHHUOEJJwe,R0EEJJ}----r   )given_dtypeexpected_dtypeSS5UU5c                     t        d      }t        j                  || d      }t        j                  ddgddgdd	gg|
      }t	        ||       t	        |j
                  |       y)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   rf   AAAz5-1BBBBBz0-3Cz4-9r<   N)r   r   r   r   r   r=   )r  r  r(   r   r   s        r   test_string_no_length_givenr  Z  sb     0
1C
**Ss
;Cxx
'5)C<8H hN+r   c                      g d} t        dj                  |             }t        j                  |      }t        j                  | D cg c]  }t        |       c}      }t        ||       yc c}w )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   N)r   joinr   r   r   rg   r   )stringsr(   r   r   r   s        r   test_float_conversionr  p  sW    G 499W%
&C
**S/Cxx73aq34Hh 4s   A-c                      t        d      } t        j                  | t        d      }|j                  t        k(  sJ t        |ddgddgg       t        |j                  t        j                        ddgddgg       y )Nz1, 0
10, -1r   rf   TFrC   r   )r   r   r   boolr=   r   viewuint8r   s     r   	test_boolr    sk    
>
"C
**S
4C99sdE]T4L9:sxx)QFQF+;<r   
AllIntegerz0error:.*integer via a float.*:DeprecationWarningc                    t        j                  |       } t        j                  dg|       dk(  sJ | j                  dk(  r;t	        j
                  t              5  t        j                  dg|        d d d        nt        j                  dg|       dk(  sJ dD ]?  }t	        j
                  t              5  t        j                  | d	g|        d d d        A y # 1 sw Y   NxY w# 1 sw Y   XxY w)
Nz+2r<   r   uz-1
z-2
r   )z++z+-z--z-+z2
)r   r=   r   kindr~   r   r   )r=   signs     r   test_integer_signsr    s    
 HHUOE::tfE*a///zzS]]:& 	.JJxu-	. 	. zz6(%0B666( 4]]:& 	4JJ4&~U3	4 	44	. 	.	4 	4s   C8C+C(+C4	c                     t        d      }t        j                  t              5  t	        j
                  || d       d d d        y # 1 sw Y   y xY w)Nz1.0, 2.1, 3.7
4, 5, 6r   rf   r   )r=   r(   s     r   %test_implicit_cast_float_to_int_failsr    s@    
 +
,C	z	" 4


3es34 4 4s   AAwith_parens)FTc                     d}|s"|j                  dd      j                  dd      }t        j                  t        |      | d      }t        j                  g dg dg| 	      }t        ||       y )
Nz*(1.0-2.5j),3.75,(7+-5.0j)
(4),(-19e2j),(0)( )r   rf   )y      ?      g      @y      @      )r#   y            r   r<   )r&   r   r   r   r   r   )r=   r  r   r   r   s        r   test_complex_parsingr$    sd     	6AIIc2&&sB/
**Xa[
=Cxx	!12%H hr   c                      d } t        j                   |        t        d      }t        j                  g dg dg dg dg      }t	        ||       y )Nc               3   P   K   t        d      D ]  } |  dd| z   d| dz     y w)Nro   r   r   rangeis    r   genz%test_read_from_generator.<locals>.gen  s8     q 	&ACq1Qq!tf%%	&s   $&r   rf   )r   r   r   )rC   r   rC   )r   ro   ro   )rD   r   r   )r   r   rh   r   r   r+  r   r   s      r   test_read_from_generatorr-    s>    & **SU#
5CxxIy)DEHhr   c                      d } t        j                   |        dd      }t        j                  g dd      }t        ||       y )Nc               3   D   K   t        d      D ]  } |  d| dz     y w)NrD   r   ro   r'  r)  s    r   r+  z/test_read_from_generator_multitype.<locals>.gen  s-     q 	!ACqQ. 	!s    zi, dr   rf   ))r   g        )rC   g      ?)r   r   r<   )r   r   r   r   r,  s      r   "test_read_from_generator_multityper0    s8    ! **SU&C
8Cxx7vFHhr   c                      d } t        j                  t        d      5  t        j                   |        dd       d d d        y # 1 sw Y   y xY w)Nc               3   (   K   g dE d {    y 7 w)N)z1,2s   3, 5i1  r   r   r   r   r+  z)test_read_from_bad_generator.<locals>.gen  s     ***s   &non-string returned while reading datarx   zi, ir   rf   r   )r+  s    r   test_read_from_bad_generatorr4    sC    + 
F
H 7


35#67 7 7s   AAzPython lacks refcountsc                     t               dfd} t        ddz        }t        j                  t        d      5  t        j                  |t         d| i       d d d        t        j                        dk(  sJ y # 1 sw Y   $xY w)	Nr   c                 2    dkD  rt        d      dz  S )Ni  zfailed half-way through!rC   )r   )r]   already_readsentinels    r   r   z/test_object_cleanup_on_read_error.<locals>.conv  s&    $788r   zx
'  zat row 5000, column 1rx   r=   r   r   )	objectr   r~   r   r   r   r   sysgetrefcount)r   r(   r7  r8  s     @@r   !test_object_cleanup_on_read_errorr>    su    xHL 55=
!C	z)@	A <


3f!T;< ??8$)))< <s   B  B	c                      t        d      } t        j                  t              5  t	        j
                  | d       ddd       y# 1 sw Y   yxY w)z9Test exception when a character cannot be encoded as 'S'.u   –r  r<   Nr   )r   s    r   #test_character_not_bytes_compatibler@    s<     E?D	z	" %


4t$% % %s   AAr   r"  c                     d}t        j                  t        |      5  t        j                  t        d      |        d d d        y # 1 sw Y   y xY w)Nz\converters must be a dictionary mapping columns to converter functions or a single callable.rx   1 2
3 4r   r~   r   r   r   r   r   )r   r   s     r   test_invalid_converterrE    sD    	*  
y	, :


8J'D9: : :s   !AAc                  ^   t        j                  t        d      5  t        j                  t        d      dt        i       d d d        t        j                  t        d      5  t        j                  t        d      dt        id       d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY w)Nzkeys of the converters dictrx   rB  r)   rC  r   )r   r   )r~   r   r   r   r   r   rh   r   r   r   +test_converters_dict_raises_non_integer_keyrG    s     
y(E	F @


8J'S#J?@	y(E	F K


8J'S#JJK K@ @K Ks   'B&(B#B #B,bad_col_ind)rD   rz   c                     t        d      }t        j                  t        d      5  t	        j
                  || t        i       d d d        y # 1 sw Y   y xY w)NrB  zconverter specified for columnrx   rC  )r   r~   r   r   r   r   rh   )rH  r   s     r   'test_converters_dict_raises_non_col_keyrJ    sC    JD	z)I	J 8


4[#$678 8 8s   AAc                      t        j                  t        d      5  t        j                  t        d      ddi       d d d        y # 1 sw Y   y xY w)Nz4values of the converters dictionary must be callablerx   rB  r   rC   rC  rD  r   r   r   ,test_converters_dict_raises_val_not_callablerL  
  s@    	yL
N <


8J'QF;< < <s   #AAq)"'`c                    t        |  d|  d|  d|  d|  d|  d      }t        j                  ddt        j                  fg      }t        j                  g d	|
      }t        j
                  ||d|       }t        ||       y )Nalpha, xz, 2.5
beta, yz, 4.5
gamma, zz, 5.0
r,   r   r-   )rR  r"   )rS  g      @)rT  re   r<   r   r=   r   	quotecharr   r   r=   r?   r   r   r   rM  r(   r=   r   r   s        r   test_quoted_fieldr[    s    
#XaSs'!GA3hqcIC HHlT2::$678Exx@H **S
BCsH%r   c                    t        |  d|  d|  d|  d|  d|  d      }t        j                  ddt        j                  fg      }t        j                  g d	|
      }t        j
                  ||d |       }t        ||       y )NrR  z	     2.5
rS  z 4.5
rT  z   5.0
rU  r-   rV  r<   rW  rY  rZ  s        r   *test_quoted_field_with_whitepace_delimiterr]    s    
#XaS
1#WQCvaS8LC HHlT2::$678Exx@H **S
CCsH%r   c                     t        d      } t        j                  ddt        j                  fdt        j                  fg      }t	        j
                  t        d      5  t        j                  | |d       d	d	d	       | j                  d
       t        j                  dg|      }t        j                  | |dd      }t        ||       y	# 1 sw Y   XxY w)z1Support for quoted fields is disabled by default.z"lat,long", 45, 30
)r,   U24r-   r/   z.the dtype passed requires 3 columns but 4 wererx   r   rf   Nr   )zlat,longg     F@g      >@r<   rN  rW  )r   r   r=   r?   r~   r   r   r   seekr   r   )r(   r=   r   r   s       r   test_quote_support_defaultra  ,  s    
)
*CHHmdBJJ%7$

9KLME	zB
D 4


3es34
 HHQKxx/0>H
**S
DCsH%4 4s   CCc                      t        d      } d}t        j                  t        |      5  t	        j
                  | dd       d d d        y # 1 sw Y   y xY w)N1,2
3,4z,.*must be a single unicode character or Nonerx   r   z''r   rX  r   r~   r   r   r   r   )r(   r   s     r   test_quotechar_multichar_errorrf  =  sF     :
C
9C	y	, 7


3#67 7 7s   AAc                     t        d      } d}t        j                  t        |      5  t	        j
                  | ddd       d d d        t        j                  t        |      5  t	        j
                  | ddd	gd       d d d        t	        j
                  | dd
d      }t        |ddgddgg       y # 1 sw Y   txY w# 1 sw Y   AxY w)Nrc  zWwhen multiple comments or a multi-character comment is given, quotes are not supported.rx   r   123rN  )r   r    rX  r   %)r   rO  rC   r   rD   ro   )r   r~   r   r   r   r   r   )r(   r   r   s      r   'test_comment_multichar_error_with_quoterj  F  s    
:
C	$  
z	- F


3#EF	z	- K


3#c
cJK **SC&C
HC1v1v&'F FK Ks   B6&C6B?Cc                  (   t        d      } t        j                  dt        j                  fdt        j                  fddt        j
                  fg      }t        j                  g d|      }t        j                  | |dd	
      }t        ||       y )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.   r1   r2   r<   rF   rO  rW  )	r   r   r=   r>   r?   r@   r   r   r   )r   r=   r   r   s       r   !test_structured_dtype_with_quotesrl  V  s    $	D HH
			T2::.tRWWoNE xx	
 
H **T#
ECsH%r   c                      t        d      } t        j                  g dd      }t        j                  | ddd      }t	        ||       y )Nz	1

"4"
""14r"  U1r<   r   rN  r   r=   rX  r   r   r   r   r   r   s      r   test_quoted_field_is_not_emptyrt  s  s:    
>
"Cxxd3H
**SCts
CChr   c                      t        d      } t        j                  g dd      }t        j                  | ddd      }t	        ||       y )Nz1

"4"
"rn  rq  r<   r   rN  rr  rs  r   s      r   (test_quoted_field_is_not_empty_nonstrictrv  y  s<     =
!Cxxd3H
**SCts
CChr   c                      t        d      } t        j                  dd      }t        j                  | ddd      }t	        ||       y )Nz"Hello, my name is ""Monty""!"zHello, my name is "Monty"!U40r<   r   rN  rW  rs  r   s      r   "test_consecutive_quotechar_escapedry    s<    
3
4Cxx4EBH
**S
DChr   r   )r"  z


z# 1 2 3
# 4 5 6
r   )r   rC   r   r   rC   r   rD   c                 $   |d}n
|dk(  rd}nd}t        |       }t        j                  t        d      5  t	        j
                  |||      }ddd       j                  |k(  sJ t        d	
      5 }|j                  |        |j                  d       t        j                  t        d      5  t	        j
                  |||      }ddd       |j                  |k(  sJ 	 ddd       y# 1 sw Y   xY w# 1 sw Y   0xY w# 1 sw Y   yxY w)zDCheck that a UserWarning is emitted when no data is read from input.N)r   rD   r   rR   )r   input contained no datarx   )r   r   w)moder   )
r   r~   warnsUserWarningr   r   r   r   writer`  )r   r   r   expected_shaper(   r   fhs          r   test_warn_on_no_datar    s    
 	!
4.C	k)B	C <jjE7;<99&&&		% +


\\+-FG 	@**Sw?C	@yyN***+ +	< <	@ 	@+ +s/   C.4>D2C:D.C7:D	?DDrS   c                     d}t        |      }t        j                  t        d      5  t	        j
                  ||        d d d        y # 1 sw Y   y xY w)Nz1 2 3
4 5 6r|  rx   )rB   )r   r~   r  r  r   r   )rB   r   r(   s      r   test_warn_on_skipped_datar    sB    D
4.C	k)B	C +


3*+ + +s   A

Ar  )r   rC   )u2rC   )i4 )u4r  )i8   
 )u8r  )float16g#{ ?)r   g. 7)	complex64y. 7`F$:)r?   g
complex128ywfUD3":)
longdoubler  clongdoubleyp`P@0 B B)U2u   𐈃򠬌swapTFc                 (   t        j                  |       } d| dg}|r| j                         } t        j                  dd| fgd      }|j                  d   d   dk(  sJ t        j                  ||dd	      }|d   | j                  |      k(  sJ y )
Nzx,r   )r)   S1rK   Frm   rC   r   r   )r   r=   newbyteorderfieldsr   r   )r=   r  r  r   full_dtr   s         r   test_byteswapping_and_unalignedr    s    ( HHUOErND""$hhc5\2%@G>>#q!Q&&&
**TC!Cs8uzz%((((r   efdFD?c                     t        d      }t        j                  || dd      }t        |t        j                  ddg      j                  |              y )Nu    3 ," 2
"r   rN  rW  rD   r   )r   r   r   r   r   astyper   s      r   !test_unicode_whitespace_strippingr    sE     $
%C
**S
DCsBHHaV,33E:;r   FDc                     d}||j                  dd      g}t        j                  || d      }t        |t        j                  g dgdz               y )Nz0 1 , 2+3j , ( 4+5j ), ( 6+-7j )  , 8j , ( 9j ) 
r   u    r   rf   )rC   y       @      @y      @      @y      @      y               @y              "@r   )r&   r   r   r   r   )r=   liner   r   s       r   )test_unicode_whitespace_stripping_complexr    sL     ?D$,,sH-.D
**T#
6CsBHH&C%Dq%HIJr   r   )z1 +2jz1+ 2jz1+2 jz1+-+3z(1jz(1z(1+2jz1+2j)c                     t        j                  t              5  t        j                  |dz   g| d       d d d        y # 1 sw Y   y xY w)Nr   r   rf   r}   )r=   r   s     r   test_bad_complexr    s;     
z	" ?


EDL>#>? ? ?s   A  A	efgdFDGc                     | j                         dk(  rt        j                  d       t        j                  t              5  t        j                  dg| dd       d d d        y # 1 sw Y   y xY w)Ngz0longdouble/clongdouble assignment may misbehave.1 r   rN  rW  )lowerr~   xfailr   r   r   r   r<   s    r   test_nul_character_errorr    sX     {{}GH	z	" I


G9ESCHI I Is   A&&A/c                 X   | dk(  rt        j                  d       | dv rt        j                  d       t        d      t	        d      cxk(  rt        d      cxk(  rdk(  sJ  J t        j                  t              5  t        j                  dg|        d d d        y # 1 sw Y   y xY w)	Nez5half assignment currently uses Python float convertereGz2clongdouble assignment is buggy (uses `complex`?).1_1rr   z1_1
r<   )
r~   skipr  rh   rg   complexr   r   r   r   r<   s    r   test_no_thousands_supportr    s     |KL}IJu:u==2=====	z	" +


G9E*+ + +s   >B  B)z1,2
z2
,3
z2,3
c                     d}t        j                  t        |      5  t        j                  | d       d d d        y # 1 sw Y   y xY w)Nz7Found an unquoted embedded newline within a single linerx   r   r   r}   )r   r   s     r   test_bad_newline_in_iteratorr    s;     DC	z	- (


43'( ( (s	   ?Az2,3
z'2
',3
z'2',3
z'2
',3
c                 X    t        j                  | dd      }t        |ddgddgg       y )Nr   rO  rd  rb   rc   r   rG   )r   r   s     r   test_good_newline_in_iteratorr    s-     **TSC
8Csb"XBx01r   newline)r   
c                     g d}|D cg c]  }|j                  d|        }}t        j                  |t        dd      }t	        |dd|  gdd	|  dgg       y c c}w )
N)z1,"2
"
z3,"4
z1"
r   r   rN  rW  ro  23rp  )r&   r   r   r;  r   )r  r   r   r   s       r   test_universal_newlines_quotedr    sg    
 +D2673CKKg&7D7
**T3#
FCscQwi=1C1WIQ3HIJ 8s   Ac                      t        j                  ddgd      } t        | g dg dg       t        j                  ddgd	t        
      } | j	                         g dg dgk(  sJ y )Nz1 2 3
z4 5 6 r   rz  )ro   rp   r   z1 ,2 ,3
z4 ,5 ,6r   rV   )r  z2 r  )z4 z5 6)r   r   r   r;  tolist)r   s    r   test_null_characterr  *  s^    
**o}5
HCsY	23 **'9"&2C::<35LMMMMr   c                       G d d      } t        j                  t        d      5  t        j                   |        t
        d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zd Zd Zy):test_iterator_fails_getting_next_line.<locals>.BadSequencec                      y)Nra   r   selfs    r   __len__zBtest_iterator_fails_getting_next_line.<locals>.BadSequence.__len__7  s    r   c                 6    |dk(  rt        d      | d|dz    S )N2   Bad things happened!z, rC   )RuntimeError)r  items     r   __getitem__zFtest_iterator_fails_getting_next_line.<locals>.BadSequence.__getitem__:  s*    rz"#9::V2d1fX&&r   N)__name__
__module____qualname__r  r  r   r   r   BadSequencer  6  s    		'r   r  r  rx   r   rf   )r~   r   r  r   r   rh   )r  s    r   %test_iterator_fails_getting_next_liner  5  sD    ' ' 
|+A	B <


;=s;< < <s   "AAc                   x    e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  dg d      d	        Zy
)TestCReaderUnitTestsc                     t        j                  t        d      5  t        j                  j
                  j                  t               t        j                  d      d       d d d        y # 1 sw Y   y xY w)Nz.*readrx   r*  Tr=   filelike)	r~   r   AttributeErrorr   _core_multiarray_umath_load_from_fileliker;  r=   r  s    r   test_not_an_filelikez)TestCReaderUnitTests.test_not_an_filelikeF  sS    ]]>: 	>HH&&:: ; >	> 	> 	>   AA--A6c                      G d d      }t        j                  t        d      5  t        j                  j
                  j                   |       t        j                  d      d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd ZdZd Zy)BTestCReaderUnitTests.test_filelike_read_fails.<locals>.BadFileLiker   c                 b    | xj                   dz  c_         | j                   dkD  rt        d      y)NrC      Bad bad bad!z1,2,3
)counterr  r  sizes     r   readzGTestCReaderUnitTests.test_filelike_read_fails.<locals>.BadFileLike.readR  s*    !<<"$&~66 r   Nr  r  r  r  r  r   r   r   BadFileLiker  O  s    G!r   r  r  rx   r*  Tr  )r~   r   r  r   r  r  r  r=   r  r  s     r   test_filelike_read_failsz-TestCReaderUnitTests.test_filelike_read_failsK  sd    	! 	! ]]<~> 	CHH&&::RXXc]T ; C	C 	C 	C   AA44A=c                      G d d      }t        j                  t        d      5  t        j                  j
                  j                   |       t        j                  d      d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd ZdZd Zy)@TestCReaderUnitTests.test_filelike_bad_read.<locals>.BadFileLiker   c                      y)Ni  r   r  s     r   r  zETestCReaderUnitTests.test_filelike_bad_read.<locals>.BadFileLike.readd  s    r   Nr  r   r   r   r  r  a  s    Gr   r  r3  rx   r*  Tr  )r~   r   r   r   r  r  r  r=   r  s     r   test_filelike_bad_readz+TestCReaderUnitTests.test_filelike_bad_read\  sh    
	 	 ]]9BD 	CHH&&::RXXc]T ; C	C 	C 	Cr  c                     t        j                  t        d      5  t        j                  j
                  j                  t               t        j                  d      d       d d d        y # 1 sw Y   y xY w)Nz/error reading from object, expected an iterablerx   r*  Fr  	r~   r   r   r   r  r  r  r;  r=   r  s    r   test_not_an_iterz%TestCReaderUnitTests.test_not_an_iterl  sW    ]]9KM 	?HH&&:: ; ?	? 	? 	?r  c                     t        j                  t        d      5  t        j                  j
                  j                  t               dd       d d d        y # 1 sw Y   y xY w)Nzinternal error: dtype mustrx   r*  Fr  )r~   r   r   r   r  r  r  r;  r  s    r   test_bad_typez"TestCReaderUnitTests.test_bad_typer  sL    ]]9,HI 	5HH&&::e ; 5	5 	5 	5s   5AA#c                     t        j                  t        d      5  t        j                  j
                  j                  t               t        j                  d      dd       d d d        y # 1 sw Y   y xY w)Nzencoding must be a unicoderx   r*  F{   )r=   r  r   r  r  s    r   test_bad_encodingz&TestCReaderUnitTests.test_bad_encodingw  s[    ]]9,HI 	MHH&&:: ; M	M 	M 	Ms   A	A..A7r  )r  r   r  c                     t        dj                  d|      d      }t        j                  j                  j                  |t        j                  d      dddd	
      }t        |d d df   dd| ddg       y )Nz0
1
"2
"
3
4 #
r   r"  )r  U10TrN  r   rC   )r=   r  quoter   	skiplinesr   ro  r  r  z4 )r   r&   r   r  r  r  r=   r   )r  r  r   r   s       r   test_manual_universal_newlinesz3TestCReaderUnitTests.test_manual_universal_newlines|  s{     /77gF "$ hh((<<$sa = 1 	3q!t9sayM3&EFr   N)r  r  r  r  r  r  r  r  r  r~   markparametrizer  r   r   r   r  r  C  sK    >
C"C ?5
M
 [[Y(<=G >Gr   r  c                      t        j                  t        d      5  t        j                  t        d      dd       d d d        y # 1 sw Y   y xY w)N".*control characters.*incompatiblerx   1, 2, 3r   r   rD  r   r   r   'test_delimiter_comment_collision_raisesr    s?    	y(L	M E


8I&#DE E E   "AAc                      t        j                  t        d      5  t        j                  t        d      dd       d d d        y # 1 sw Y   y xY w)Nr  rx   r  r   rd  rD  r   r   r   )test_delimiter_quotechar_collision_raisesr
    s?    	y(L	M F


8I&#EF F Fr  c                      t        j                  t        d      5  t        j                  t        d      dd       d d d        y # 1 sw Y   y xY w)Nr  rx   1 2 3r   )r    rX  rD  r   r   r   'test_comment_quotechar_collision_raisesr    s?    	y(L	M C


8G$scBC C Cr  c                      t        j                  t        d      5  t        j                  t        d      dddg       d d d        y # 1 sw Y   y xY w)Nz0Comment characters.*cannot include the delimiterrx   r  r   r   r   rD  r   r   r   5test_delimiter_and_multiple_comments_collision_raisesr    sH    	K
 L 	

8I&#c
KL L Ls   $A		Ac                 x   t        j                  t        d      5  t        j                  t        d|  d|  d|  d|  d	      |        d d d        t        j                  t        d      5  t        j                  t        d|  d|  d|  d|  d	      | 	       d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)
Nr  rx   ro  r  z3
45z6
r    rX  rD  )r   s    r   ,test_collision_with_default_delimiter_raisesr    s     
y(L	M I


8at1RDRD"S9:RHI	y(L	M J


8at1RDRD"S9:bIJ JI IJ Js   .B$-.B0$B-0B9nl)r   r  c                    t        d|  d|  d|  |  d|  d|  d|  |        }d}t        j                  t        |      5  t	        j
                  || 	       d d d        t        j                  t        |      5  t	        j
                  || 
       d d d        t        j                  t        |      5  t	        j
                  ||        d d d        y # 1 sw Y   xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)Nro  r  r  rp  r  r  z&control character.*cannot be a newlinerx   r   r  r  re  )r  r(   r   s      r   %test_control_character_newline_raisesr    s    
Qrd!B4qRD"Qrd!B4t<
=C
2C	y	, &


3"%&	y	, %


3$%	y	, &


3"%& &	& &% %& &s#   C:C"5C.C"C+.C7)generic_data
long_datumunitless_dtyper  )z2012-03z
2013-01-15M8zM8[D])
spam-a-lottis_but_a_scratchr  U17nrows)rq   r   `  c           	         | g|z  |gz   }t        j                  ||      }t        |      |dz   k(  sJ t        |      t        |      k(  sJ t        dj	                  |            }t        j
                  ||      }t        |      t        |      k(  sJ |j                  |j                  k(  sJ t        ||       t               \  }	}
t        j                  |	       t        |
d      5 }|j                  dj	                  |      dz          ddd       t        j
                  |
|      }t        |      t        |      k(  sJ |j                  |j                  k(  sJ t        ||       t        j
                  |
|t        |dz              }t        j                  |
       t        |      t        |dz        k(  sJ t        ||dt        |dz                y# 1 sw Y   xY w)zCheck that the correct unit (e.g. month, day, second) is discovered from
    the data when a user specifies a unitless datetime.r<   rC   r   r}  Nr   )r=   rv   )r   r   lenr   r  r   r=   r   r   oscloseopenr  rh   remove)r  r  r  r  r  r   r   r(   r)   fdfnamer  s               r   test_parametric_unit_discoveryr)    s    >E!ZL0DxxN3Ht9at9H%%% 499T?
#C


3n-Aq6S]"""77hnn$$$H 	IBHHRL	eS	 'R
4%&' 	

5/Aq6S]"""77hnn$$$H


5U1WFAIIeq6Sq\!!!H]c%'l+,' 's   -$G!!G*c                  |   dgdz  dgz   } t        j                  dgdz  dgz   d      }d }t        dj                  |             }t        j                  |d	|
      }|j
                  |j
                  k(  sJ t        ||       t               \  }}t        j                  |       t        |d      5 }|j                  dj                  |              d d d        t        j                  |d	|
      }t        j                  |       |j
                  |j
                  k(  sJ t        ||       y # 1 sw Y   ^xY w)Nr  r   XXXtis_but_a_scratchr  r  r<   c                 $    | j                  d      S r   )removeprefixr   s    r   r   z>test_str_dtype_unit_discovery_with_converter.<locals>.<lambda>  s    Q^^E* r   r   r  r:  r}  )r   r   r   r  r   r=   r   r   r#  r$  r%  r  r&  )r   r   r   r(   r)   r'  r(  r  s           r   ,test_str_dtype_unit_discovery_with_converterr.    s   >E!%;$<<Dxx	"5!66eH +D 499T?
#C


3cd3A77hnn$$$H 	IBHHRL	eS	 "R
4!"


55AIIe77hnn$$$H" "s   4!D22D;c                     t        j                  t        d      5  t        j                  t        d      d       d d d        t        j                  t        d      5  t        j                  t        d      d       d d d        t        j                  t        d      5  t        j                  t        d      d       d d d        t        j                  t        d      5  t        j                  t        d      d	dg       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y xY w)
Nz#Text reading control character mustrx   r  r"  r   r  z"comments cannot be an empty stringr  r   )r~   r   r   r   r   r   r   r   r   r   test_control_character_emptyr0    s     
y(M	N 4


8G$34	y(M	N 4


8G$34	z)M	N 3


8G$r23	z)M	N :


8G$Ry9: :4 44 43 3: :s/   !D !D $!D,(#D8D D),D58Ec                  b    t        j                  t        d      dd      } t        | g d       y)z<Byte control characters (comments, delimiter) are supported.z#header
1,2,3   #   ,)r    r   rz  N)r   r   r   r   )r)   s    r    test_control_characters_as_bytesr4    s$    


8,-MAIr   zignore::UserWarningc                      t        j                  dgdt              } t        |       dk(  sJ t	        dd      D ]6  }t        j                  d|z  gdt        d      } t        |       |dz   k(  r6J  y )	Nr"  r   rV   r   rC   i   rq   )r   r=   rv   )r   r   r   r"  r(  )r   r*  s     r   test_field_growing_casesr6    sk     **bTS
6Cs8q==1d^ jj#'cL3x1Q3r   nmax)r9  r   i  r   c                    d}dg|z  }t        dj                  |            }t        j                  |t        d|       }t        |      | k(  sJ t               \  }}t        j                  |       t        |d      5 }|j                  dj                  |             d d d        t        j                  |t        d|       }t        j                  |       t        |      | k(  sJ y # 1 sw Y   LxY w)Nr   za 0.5 1r   r   r   r}  )r   r  r   r   strr"  r   r#  r$  r%  r  r&  )r7  file_lengthr   r(   r   r'  r(  r  s           r    test_maxrows_exceeding_chunksizer;     s     K ;{"D
499T?
#C
**SsT
BCs8t 	IBHHRL	eS	 "R
4!"
**U#t
DCIIes8t	" "s   >!C**C3)m__doc__r<  r#  r~   tempfiler   r   ior   numpyr   numpy.ma.testutilsr   numpy.testingr   r   r	   r   r  r  r*   fixturerA   rH   rN   rY   r[   rk   rt   r   r   r   r   r   r   rg   r;  r   skipifimplementationversionr=   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  	typecodesfilterwarningsr  r  r  r  r$  r-  r0  r4  r>  r@  rE  rG  rJ  rL  r[  r]  ra  rf  rj  rl  rt  rv  ry  r  r  reprr  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r)  r.  r0  r4  r6  r;  r   r   r   <module>rI     s    	  0   + C CB  $LM: N: ! !@ \2/ 3/*O@LL ":;- <- ":;. <.
 #NN #CD, E,
 		  5&/2O 3O GG 2 2 : :i G9  ;8288D>8288D>"BC4 D;4 0&(E% 3434  5 5    $7 ),. -. %	hbhhtn	hbhhtn,, &= GG 2 2 : :i G9  ;",,|"<=NO4 P >;4 GG 2 2 : :i G9  ;",,|"<=NO4 P >;4
 2<<"?@6	  7 A	   7 $-EF* G*& GG 2 2 : :i G9  ;%;% !eWb!12: 3: GG 2 2 : :i G9  ;K;K 08 18< o.
& /
& o.
& /
&&" GG 2 2 : :i G9  ;7;7( &:    !EF),T9$56+ 7 - G+* V,+ -+ '7+."$>!I+ 
tHIJ 	)	GHI&!.( )" $/) 0#)$) 
\"W,s24<4< $'K (K GG 2 2 : :i G9  ;$'KM?M (;
?
 GG 2 2 : :i G9  ;LL&2S8:I:;I GG 2 2 : :i G9  ;
\"Y.46+6;+ ii" (( ikkm	" 22 $89K :KN<FG FGRE
F
C
L 	J	J |,& -& F07 "45 - 6 -F0 GG 2 2 : :i G9  ;:;: 12 3 !=> ?r   