
    EgzV                     	   d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
mZ ddlmZ ej                            d          Zej                            d          Zej                            d          Zd	 Zd
 Zej                            dddgddgddgdgdgdgdgg          ej                            dddg          d                         Zd Zej                            dddgg          d             Zd Zd Zej                            ddg e	ej        gdgdgd e
dgd                    fdd g e	ej        gdgd! ej        d"gdd#g$                    fdd#g e	ej        gdgd! ej        d"gdd#g$                    fg          d%             Zej                            d&i  e	dd'ej        d(d)ej        d*gg d+d,d-d.ej        d/ej        d0gd1          fg g d2d3d4 e	g d5g d+g d6d1          fdgd3d4 e	ej        d'd7d(d)d8d*gg d+g d6d1          fdg g d2i e	dd'ej        d(d)ej        d*gg d+d,d-d.ej        d/ej        d0gd1          fg          d9             Z d: Z!d; Z"d< Z#ej                            d=d>d?g          d@             Z$eej                            dAdBddCgej        ej        gdDdEggfd3dFdCgd8dGgdHdEggfg          dI                         Z%edJ             Z&ej                            dKdej        dLgdLej        ggfd ddMdNdLgej        ej        ggfg          dO             Z'dP Z(dQ Z)ej                            dR e*dS          dTz    e*dU          z   ddSgi e	 e*dS           e*dU          g          f e*dS          dVz   dWz   i  e	 e*dS          dgd7d gg          f e*dS          dXz   ddSgi e	ej        dg          fg          dY             Z+dZ Z,ej                            d[d3d7d\gfdBej        d]gfg          d^             Z-d_ Z.eej                            d`dBd3g          da                         Z/eej                            dbdcdddedfdgdhgfdgddhifg          di                         Z0edj             Z1dk Z2edl             Z3dm Z4dn Z5dS )ozg
Tests that NA values are properly handled during
parsing for all of the parsers defined in parsers.py
    )StringION)STR_NA_VALUES)	DataFrameIndex
MultiIndexz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningpyarrow_xfailpyarrow_skipc                    | }d}|                     t          |                    }t          g ddt          j        dgt          j        ddggg d          }|j        d	k    rd |j        d
<   d |j        d<   t          j        ||           d S )NzA,B,C
a,b,c
d,,f
,g,h
abcdfghABCcolumnspyarrow)   r   )   r   )	read_csvr   r   npnanengineloctmassert_frame_equalall_parsersparserdataresultexpecteds        Z/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/tests/io/parser/test_na_values.pytest_string_nasr*      s    FD
 __Xd^^,,F	3,rvsC.@A  H }	!!#V#V&(+++++    c                 6   | }d}t          ddgt          j        dgt          j        t          j        ggddg          }|j        dk    rd |j        d	d
gdf<   d |j        d<   |                    t          |                    }t          j        ||           d S )NzA,B
foo,bar
NA,baz
NaN,nan
foobarbazr   r   r   r   r   r   r   r   )	r   r   r   r   r    r   r   r!   r"   )r$   r%   r&   r(   r'   s        r)   test_detect_string_nar1   -   s    FD
 
"&%2626*:;c3Z  H }	!!$(aVS[!#V__Xd^^,,F&(+++++r+   	na_valuesz-999.0z-999ig     8r&   zA,B
-999,1.2
2,-999
3,4.5
z"A,B
-999,1.200
2,-999.000
3,4.500
c                 b   | }t          t          j        dgdt          j        gddggddg          }|j        dk    rtt	          d	 |D                       s[d
}t          j        t          |          5  |                    t          |          |           d d d            n# 1 swxY w Y   d S |j        dk    r9d|v r5t
          j
                            d          }|                    |           |                    t          |          |          }t          j        ||           d S )Ng333333?       @g      @g      @r   r   r   r   c              3   @   K   | ]}t          |t                    V  d S )N)
isinstancestr).0xs     r)   	<genexpr>z,test_non_string_na_values.<locals>.<genexpr>_   s,      -T-TQjC.@.@-T-T-T-T-T-Tr+   9The 'pyarrow' engine requires all na_values to be stringsmatchr2   z-999.000z4pyarrow engined does not recognize equivalent floatsreason)r   r   r   r   allpytestraises	TypeErrorr   r   markxfailapplymarkerr!   r"   )	r$   r&   r2   requestr%   r(   msgrE   r'   s	            r)   test_non_string_na_valuesrJ   >   s   < F263-#rvc
CcSVZXXXH}	!!#-T-T)-T-T-T*T*T!I]9C000 	A 	AOOHTNNiO@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A	)	#	#
d(:(: {  I ! 
 
 	D!!!__Xd^^y_AAF&(+++++s   4%B%%B),B)c                    h d}|t           k    sJ | }t          |          fdt          d                    fdt	          |          D                                 }t          t          j        t                    t                              }|	                    |d           }t          j        ||           d S )N>   #NAN/An/a#N/A-NaN-nan<NA>1.#IND-1.#IND1.#QNAN#N/A N/A-1.#QNAN NANaNr   NULLNonenullc                     | dk    rd}n| dk    rd                     dg| z            }| | }| dz
  k     r%d                     dg| z
  dz
  z            }| | }|S )Nr   rX   ,r   )join)ivbufjoinednvs       r)   r   z!test_default_na_values.<locals>.f   s    66CCUU''3%!)$$CkakkrAv::WWcUb1fqj122F"&""C
r+   
c                 .    g | ]\  }} ||          S  rh   )r8   ra   rb   r   s      r)   
<listcomp>z*test_default_na_values.<locals>.<listcomp>   s'    III41aqqAwwIIIr+   )r   index)header)r   lenr   r`   	enumerater   r   r   ranger   r!   r"   )r$   
_NA_VALUESr%   r&   r(   r'   r   re   s         @@r)   test_default_na_valuesrp   q   s      J* &&&&F	ZB     DIIIIII9Z3H3HIIIJJKKDr%))DDDH__T$_//F&(+++++r+   r/   c                    | }d}t          dt          j        dgt          j        dt          j        gddt          j        ggg d          }|j        d	k    r]d
}t	          j        t          |          5  |                    t          |          |dg           d d d            n# 1 swxY w Y   d S |                    t          |          |dg          }t          j
        ||           d S )Nz3A,B,C
ignore,this,row
1,NA,3
-1.#IND,5,baz
7,8,NaN
      ?            r   r   r   z@skiprows argument must be an integer when using engine='pyarrow'r<   r   )r2   skiprowsr   r   r   r   rB   rC   
ValueErrorr   r   r!   r"   )r$   r2   r%   r&   r(   rI   r'   s          r)   test_custom_na_valuesrz      s<   FD 
rvq	BFArv.Arv?  H }	!!P]:S111 	O 	OOOHTNNi1#ONNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O__Xd^^yA3_OOF&(+++++s   4'B''B+.B+c                 |   d}| }|                     t          |                    }t          t          j        dt          j        dgt                    t          j        ddt          j        gt                    g dd          }|j        dk    rd |j        d<   d |j        d	<   t          j
        ||           d S )
Nz1A,B,C
True,False,True
NA,True,False
False,NA,TrueTFdtype)TFTr   r   )r   r   r0   )r   r   r   r   arrayr   objectr   r    r!   r"   r$   r&   r%   r'   r(   s        r)   test_bool_na_valuesr      s    D F__Xd^^,,F4/v>>>5$/v>>>$$$	
 	
 H }	!!#V#V&(+++++r+   c                    d}| }|j         dk    r`d}t          j        t          |          5  |                    t          |          dgdgd           d d d            n# 1 swxY w Y   d S |                    t          |          dgdgd          }t          t          j        dt          j        dgt          j        dt          j        dgt          j        dt          j        dgd	          }t          j
        ||           d S )
Nz3A,B,C
foo,bar,NA
bar,foo,foo
foo,bar,NA
bar,foo,foor   z;pyarrow engine doesn't support passing a dict for na_valuesr<   r-   r.   )r   r   r>   r   r   rB   rC   ry   r   r   r   r   r   r!   r"   r$   r&   r%   rI   dfr(   s         r)   test_na_value_dictr      sU   D
 F}	!!K]:S111 	T 	TOOHTNNUG5'6R6ROSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T	$%w3O3O	P	PB&%/&%/&%/	
 	
 H "h'''''s   *A##A'*A'zindex_col,expectedr   rt   )r   r   r   r   namerj   r   )r   r   )r   r   r   )namesc                     d}| }|                     t          |          t                      |          }t          j        ||           d S )Nza,b,c,d
0,NA,1,5
)r2   	index_col)r   r   setr!   r"   )r$   r   r(   r&   r%   r'   s         r)   test_na_value_dict_multi_indexr      sJ    0D F__Xd^^suu	_RRF&(+++++r+   zkwargs,expectedr   r   er   r   r   rs      rt      ru   onetwothreefivesevenr   )r   r   Fr2   keep_default_nar   r   rX   r   r   r   r   )r   r   r   r   r   rX   r   rX   r   c                    d}| }|j         dk    rd|v rmt          |d         t                    rRd}t          j        t
          |          5   |j        t          |          fi | d d d            n# 1 swxY w Y   d S t          j        	                                }|
                    |            |j        t          |          fi |}t          j        ||           d S )NzAA,B,C
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven
r   r2   ?The pyarrow engine doesn't support passing a dict for na_valuesr<   )r   r6   dictrB   rC   ry   r   r   rE   rF   rG   r!   r"   )	r$   kwargsr(   rH   r&   r%   rI   rE   r'   s	            r)   test_na_values_keep_defaultr     s0   \	D F}	!!&  Z{0CT%J%J SCz555 : :99&999: : : : : : : : : : : : : : :F{  ""D!!!V_Xd^^66v66F&(+++++s   A44A8;A8c                     d}| }|                     t          |          d          }t          g dg dg dd          }t          j        ||           d S )NzAA,B,C
a,1,None
b,2,two
,3,None
d,4,nan
e,5,five
nan,6,
g,7,seven
F)r   r   r   )r\   r   r\   r   r   rX   r   r   r   r   r   r!   r"   r   s        r)   !test_no_na_values_no_keep_defaultr   K  sz    	D F__Xd^^U_CCF555&&&DDD	
 	
 H &(+++++r+   c                    d}| }|j         dk    r_d}t          j        t          |          5  |                    t          |          ddgid           d d d            n# 1 swxY w Y   d S |                    t          |          ddgid          }t          d	gt          j        gd
          }t          j
        ||           d S )Nza,b
,2r   r   r<   r   2Fr   rX   r   r   r   )r$   r&   r%   rI   r'   r(   s         r)   &test_no_keep_default_na_dict_na_valuesr   e  s   DF}	!!O]:S111 	 	OO3,    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	__3,   F t26(3344H&(+++++s   )A""A&)A&c                    d}| }|j         dk    r^d}t          j        t          |          5  |                    t          |          ddid           d d d            n# 1 swxY w Y   d S |                    t          |          ddid          }t          d	gt          j        gd
          }t          j
        ||           d S )Nza,b
1,2r   r   r<   r   r   Fr   r   r   r   r   s         r)   -test_no_keep_default_na_dict_na_scalar_valuesr   y  s    DF}	!!O]:S111 	W 	WOOHTNNsAhPUOVVV	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W	$C8U	S	SBs"&2233H"h'''''s   (A!!A%(A%col_zero_na_valuesi 113125c                    d}| }t          t          j        dgt          j        dgdt          j        gddgddgd	d
gt          j        dgd          }|j        dk    rbd}t	          j        t          |          5  |                    t          |          d dd
dd|d           d d d            n# 1 swxY w Y   d S |                    t          |          d dd
dd|d          }t          j
        ||           d S )Nz_113125,"blah","/blaha",kjsdkj,412.166,225.874,214.008
729639,"qwer","",asdfkj,466.681,,252.373
g    ND&Aqwerz/blahakjsdkjasdfkjg-y@g7A`*}@z225.874rX   g-o@)r   r   r   rs   r   rt   r   r   r   r<   Fz214.008blah)r   r   r   r   )rk   r   r2   rx   )r$   r   r&   r%   r(   rI   r'   s          r)   1test_no_keep_default_na_dict_na_values_diff_reprsr     sy   D F!"&!(#!2 	
 	

 
H }	!!O]:S111 	 	OO % Y6>PQQ	    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	__Y66HII	   F &(+++++s   :,B22B69B6zna_filter,row_dataTr   rs   r   1r   3c                     d}| }|                     t          |          dg|          }t          |ddg          }t          j        ||           d S )NzA,B
1,A
nan,B
3,C
r   )r2   	na_filterr   r   r   )r$   r   row_datar&   r%   r'   r(   s          r)   !test_na_values_na_filter_overrider     s^    D F__Xd^^u	_RRFC:666H&(+++++r+   c                 >   | }d}|                     t          |                    }t          dddddt          j        t          j        t          j        gdddd	d
t          j        t          j        t          j        ggg d          }t          j        ||           d S )NzlDate,Currency,Symbol,Type,Units,UnitPrice,Cost,Tax
2012-03-14,USD,AAPL,BUY,1000
2012-05-12,USD,SBUX,SELL,500z
2012-03-14USDAAPLBUYi  z
2012-05-12SBUXSELLi  )DateCurrencySymbolTypeUnits	UnitPriceCostTaxr   )r   r   r   r   r   r!   r"   r#   s        r)   test_na_trailing_columnsr     s    F D
 __Xd^^,,F5&%rvrvrvN5&&#rvrvrvN	
	
 	
 	
  H  &(+++++r+   zna_values,row_datar4   r   rr   c                    | }ddg}d}|j         dk    rt          |t                    r}t          |t                    r
t          }d}n	t          }d}t          j        ||          5  |                    t          |          ||           d d d            n# 1 swxY w Y   d S |j         dk    r\d}t          j        t          |          5  |                    t          |          ||           d d d            n# 1 swxY w Y   d S |                    t          |          ||          }t          ||	          }	t          j        ||	           d S )
Nr   r   1,2
2,1r   r   r;   r<   r   r2   r   )r   r6   r   ry   rD   rB   rC   r   r   r   r!   r"   )
r$   r2   r   r%   r   r&   errrI   r'   r(   s
             r)   test_na_values_scalarr     s    F#JED}	!!jD&A&A!i&& 	NCSCCCMC]3c*** 	N 	NOOHTNN%9OMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N	)	#	#I]9C000 	N 	NOOHTNN%9OMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N__Xd^^5I_NNF5111H&(+++++s$   '&BB B&D  DDc                 
   | }ddd}|                                 }ddg}d}t          ddgt          j        t          j        gg|	          }|j        d
k    r\d}t          j        t          |          5  |                    t          |          ||           d d d            n# 1 swxY w Y   d S |                    t          |          ||          }t          j        ||           t          j        ||           d S )Nr   r   r   r   r   r   rr   r4   r   r   r   r<   r   )copyr   r   r   r   rB   rC   ry   r   r   r!   r"   assert_dict_equal)	r$   r%   r2   na_values_copyr   r&   r(   rI   r'   s	            r)   test_na_values_dict_aliasingr     sN   Fa  I^^%%N#JED3*rvrv&67GGGH}	!!O]:S111 	N 	NOOHTNN%9OMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N__Xd^^5I_NNF&(+++N33333s   5&B''B+.B+c                    d}| }ddi}|j         dk    r[d}t          j        t          |          5  |                    t          |          |           d d d            n# 1 swxY w Y   d S |                    t          |          |          }t          dt          j        d	gi          }t          j
        ||           d S )
Nza
foo
1r   r-   r   r   r<   r>   r   r   r   )r$   r&   r%   r2   rI   r'   r(   s          r)   test_na_values_dict_col_indexr     s   DFE
I}	!!O]:S111 	A 	AOOHTNNiO@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A__Xd^^y_AAF#{+,,H&(+++++s   %A""A&)A&zdata,kwargs,expectedl            rf   l           z,1z
,2z
1c                    | }|j         dk    rXd|v rTd}t          j        t          |          5   |j        t          |          fdd i| d d d            n# 1 swxY w Y   d S |j         dk    r5t          j                            d          }|                    |            |j        t          |          fdd i|}t          j
        ||           d S )Nr   r2   r;   r<   rk   z!Returns float64 instead of objectr?   )r   rB   rC   rD   r   r   rE   rF   rG   r!   r"   )	r$   r&   r   r(   rH   r%   rI   rE   r'   s	            r)   test_na_values_uint64r   .  sA    F}	!!kV&;&;I]9C000 	C 	CFOHTNNBB4B6BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C	)	#	#{  (K LLD!!!V_Xd^^CCDCFCCF&(+++++s   AA Ac                     d}| }t          ddgit          dgd                    }|                    t          |          dd	
          }t	          j        ||           d S )Nza,1
b,2r   r   r   r   r   r   r   F)r   r   )r   r   r   r   r!   r"   )r$   r&   r%   r(   r'   s        r)   *test_empty_na_values_no_default_with_indexr   K  si    DF#s5#S+A+A+ABBBH__Xd^^q%_PPF&(+++++r+   zna_filter,index_data5g      @c                 Z   | }d}|j         dk    r9|du r5t          j                            d          }|                    |           t          ddgdd	gd
t          |d                    }|                    t          |          dg|          }t          j
        ||           d S )Na,b,c
1,,3
4,5,6r   Fzmismatched index resultr?   r   r   rs   r   )r   r   r   r   r   )r   r   )r   rB   rE   rF   rG   r   r   r   r   r!   r"   )	r$   r   
index_datarH   r%   r&   rE   r(   r'   s	            r)   test_no_na_filter_on_indexr   U  s     FD}	!!i5&8&8{  (A BBD!!!1vQF335RU;V;V;VWWWH__Xd^^si_PPF&(+++++r+   c                    | }d}|                     t          |          dgddg          }t          dt          j        gdt          j        gdt          d	d
gd                    }t          j        ||           d S )Nzidx,col1,col2
1,3,4
2,inf,-infr   infz-inf)r   r2   rs   r   )col1col2r   r   idxr   r   )r   r   r   r   r   r   r!   r"   )r$   r%   r&   outr(   s        r)   !test_inf_na_values_with_int_indexr   h  s    F-D //(4..QCE6?/
S
SCRVq"&k22%AU:S:S:S  H #x(((((r+   r   c                     | }d}|rt           j        nd}t          ddg|dgddgd          }|                    t	          |          |t
          	          }t          j        ||           d S )
Nr   rX   r   4r   r   6r   )r   r}   )r   r   r   r   r   r7   r!   r"   )r$   r   r%   r&   emptyr(   r'   s          r)   +test_na_values_with_dtype_str_and_na_filterr   u  sy     FD  'BFFRESzC:NNOOH__Xd^^y_LLF&(+++++r+   zdata, na_values)zfalse,1
,1
trueN)zfalse,1
null,1
trueN)zfalse,1
nan,1
trueN)false,1
foo,1
truer-   r   r-   c                     | }d                     ddg          }t          j        t          |          5  |                    t          |          d ddgddi|           d d d            d S # 1 swxY w Y   d S )	N|z(Bool column has NA values in column [0a]zRcannot safely convert passed user dtype of bool for object dtyped data in column 0r<   r   r   bool)rk   r   r}   r2   )r`   rB   rC   ry   r   r   )r$   r&   r2   r%   rI   s        r)   !test_cast_NA_to_bool_raises_errorr     s     F
((66	
 C 
z	-	-	- 
 
TNN*- 	 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   ,A..A25A2c           	         | }d}|                     t          |          d g dt          t          t          d                                          }t	          ddgddgdd	gdd
dg          }t          j        ||           d S )NzDFile: small.csv,,
10010010233,0123,654
foo,,bar
01001000155,4530,898)r   r   col3)rk   r   r}   100100102330100100015501234530654898r   rs   r   )r   r   r7   dropnar   r!   r"   r#   s        r)   test_str_nan_droppedr     s     FD
 __&&&C55	   
 fhh  "M2V$EN	
 	

 !f  H &(+++++r+   c           	          | }d}|j         dk    rxd}t          j        t          |          5  |                    t          |          t          t          d                    ddi           d d d            n# 1 swxY w Y   d S |                    t          |          t          t          d                    ddi          }t          d	gdgt          j
        gd
          }t          j        ||           d S )NzA,B,B
X,Y,Z
1,2,infr   r   r<   r   r   Zr   )rk   r2   r   ))r   X)r   Yr   )r   rB   rC   ry   r   r   listrn   r   r   r   r!   r"   )r$   r%   r&   rI   r'   r(   s         r)   test_nan_multi_indexr     sE   F"D}	!!O]:S111 	 	OOtE!HH~~*eAT    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	__tE!HH~~*e9L   F 	
 	
 H &(+++++s   AA;;A?A?c                     | }d}t          j        t          d          5  |                    t	          |          d           d d d            d S # 1 swxY w Y   d S )N0
NaN
True
False
z	NA valuesr<   r   r|   rB   rC   ry   r   r   r$   r%   r&   s      r)   test_bool_and_nan_to_boolr    s     FD
 
z	5	5	5 6 6f5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6   %AAAc                     | }d}t          j        t          d          5  |                    t	          |          d           d d d            d S # 1 swxY w Y   d S )Nr   zconvert|NoneTyper<   intr|   r   r   s      r)   test_bool_and_nan_to_intr    s    FD
 
z);	<	<	< 5 5e4445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5r  c                     | }d}|                     t          |          d          }t          j        dt          j        ddgi          }t          j        ||           d S )Nr   floatr|   0rr   g        )r   r   r   	from_dictr   r   r!   r"   r#   s        r)   test_bool_and_nan_to_floatr
    sb    FD
 __Xd^^7_;;F"C"&#s);#<==H&(+++++r+   )6__doc__ior   numpyr   rB   pandas._libs.parsersr   pandasr   r   r   pandas._testing_testingr!   rE   filterwarnings
pytestmarkusefixturesxfail_pyarrowskip_pyarrowr*   r1   parametrizerJ   rp   rz   r   r   r   from_tuplesr   r   r   r   r   r   r   r   r   r   r   r7   r   r   r   r   r   r   r   r   r  r  r
  rh   r+   r)   <module>r     s               . . . . . .         
      [''C 
 ''88{&&~66, , ,$, , ," 	6	v		
			  
	
	 , ,  6,0-, -, -,` uug&677, , 87,*, , ,(( ( (2  CIRVHA3aS99sQTAUAUAUVVV	

 FIvhaS)),j,fXc3ZHHH  	
 #JIvhaS)),j,fXc3ZHHH  	
 ., ,/ .,  IsBFCbfcB...Q  		
 !#,,GGI===...LLL  		
 %E::I&#r3UC@...LLL  		
 ,,-IsBFCbfcB...Q  		
?), ,Z, ,[, ,Z,2, , ,4, , ,(( ( ($ -/ABB$, $, CB$,N 	C2626*QH56	#seS\C:67 , ,  , , , ,6 	
bfc]S"&M*+q		S#J(89: , , ,64 4 4,, , ,"  CJJI.5'"Iss5zz33y>>233	

 
Ud	V	#RSSZZOb!W3M)N)NO	Ue	kE73YY{5K5KL , , ,", , , eb#Y/$1FG , , , 
) 
) 
) tUm44, , 54 , #'&'	%)	#u.
 

 

 
 
, , , ,8, , ,8 	6 	6 	6	5 	5 	5
, 
, 
, 
, 
,r+   