
    EgAI                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z
d dl	mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ ej        j        Zd Zd Zd	 Zd
 Z d Z!d Z"d Z#d Z$d Z%ej        &                    d          d             Z'd Z(d Z)ej        &                    d          d             Z*d Z+ej        ,                    dd ej-        dej.                  g          d             Z/d Z0ej        ,                    dej1        ej2        e3ddg          d             Z4d  Z5d! Z6ej        ,                    dd ej-        dej.                  g          d"             Z7d*d#Z8d*d$Z9d% Z:d& Z;d' Z<d( Z=d) Z>dS )+    N)	Timestamp)is_platform_windows)	DataFrameDatetimeIndexIndexSeries_testingbdate_range
date_rangeread_hdf)_maybe_removeensure_clean_store)_test_decoratorsc                     t          j                    5 fd} t          t          j        dt          j                  t          dd                    }t          j        | | d|                     t          t          d          dd	 t          d          D             
          }t          j        | | d|                     t          dt          j        d          
                    d          z  t          t          d          t                    t          d t          d          D             t                              }t          j        | | d|                     t          t          d          t          d          d          }|                    dd           t!          ddg          }t          j        ||j        dk             |           d d d            d S # 1 swxY w Y   d S )Nc                 D     |j         fd| i| t          |           S )Nkey)to_hdfr   )r   objkwargspaths      ]/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/tests/io/pytables/test_round_trip.py	roundtripz'test_conv_read_write.<locals>.roundtrip!   s2    CJt//////D#&&&    
   dtype
2020-01-01periodsindexseriesfloat64c                     g | ]}d | S i_ .0is     r   
<listcomp>z(test_conv_read_write.<locals>.<listcomp>*   s    5R5R5R1h1hh5R5R5Rr   r   r!   string_series皙?x         ABCDc                     g | ]}d | S zi-r'   r(   s     r   r+   z(test_conv_read_write.<locals>.<listcomp>0       555aa555r   r1   columnsr!   frame   ABtableTr   appendzindex>2)where   )tmensure_cleanr   nparanger#   r   assert_series_equalranger   reshaper   listobjectassert_frame_equalr   r   r!   )r   odfresultr   s       @r   test_conv_read_writerP      s1   			 8d	' 	' 	' 	' 	' Ib
+++:lTV3W3W3W
 
 
 	q))Ha"8"8999599I5R5Rb		5R5R5RSSS
q))OQ"?"?@@@")C..((111$v,,f55555599555VDDD
 
 

 	a7A!6!6777 U1XXE!HH5566
		$GD	111$	{;;;
bA.77738 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   GG::G>G>c                    dgdz  }t          d|i|          }t          |           5 }|                    d|dg           |                    d          }t	          j        ||           d d d            d S # 1 swxY w Y   d S )N2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   ar    rN   )data_columns)r   r   r@   selectrC   rL   )
setup_pathdatarN   storerO   s        r   test_long_stringsrY   ;   s    :?D	C;d	+	+	+B	J	'	' *5T2SE222d##
b&)))	* * * * * * * * * * * * * * * * * *s   AA::A>A>c                    | |z  }t          t          d                    }|j        d d                             |ddd           |j        dd                              |ddd           t	          j        t          |d          |           |j        d d                             |ddd           |j        dd                              |ddd           t	          j        t          |d          |           d S )N   r   rN   Tr>   r   r@   formatFr   rH   ilocr   rC   rL   r   tmp_pathrV   r   rN   s       r   test_apirb   G   s     j D	599		BGCRCL$tGDDDGBCCL$tGDDD(4..333 GCRCL$uWEEEGBCCL$tGDDD(4..33333r   c                     | |z  }t          t          d                    }|j        d d                             |dd           |j        dd                              |ddd           t	          j        t          |d          |           |j        d d                             |ddd           |j        dd                              |dd           t	          j        t          |d          |           d S )	Nr[   r   rN   Tr?   r>   r\   Fr^   r`   s       r   test_api_appendrd   W   s    j D	599		BGCRCL$t444GBCCL$tGDDD(4..333 GCRCL$uWEEEGBCCL$t444(4..33333r   c                    | |z  }t          t          d                    }|                    |ddd           t          j        t          |d          |           |                    |ddd           t          j        t          |d          |           |                    |dd           t          j        t          |d          |           |                    |d           t          j        t          |d          |           t          |          5 }t          t          d                    }t          |d           |                    d|j	        d d	         d
d           |                    d|j	        d	d          d
d           t          j        |
                    d          |           t          |d           |                    d|j	        d d	         dd           |                    d|j	        d	d          d
d           t          j        |
                    d          |           t          |d           |                    d|j	        d d	         dd           |                    d|j	        d	d          d
d           t          j        |
                    d          |           t          |d           |                    d|j	        d d	         dd           |                    d|j	        d	d          d
d            t          j        |
                    d          |           d d d            d S # 1 swxY w Y   d S )Nr[   rN   Ffixedr\   fr?   )r   r   Tr>   )r@   r]   )r   rH   r   rC   rL   r   r   r   r@   r_   rU   )ra   rV   r   rN   rX   s        r   
test_api_2rh   e   sW   j D	599		BIIdU7I;;;(4..333IIdU3I777(4..333IIdUI+++(4..333IIdI(4..333	J	'	' 65uRyy!!eT"""T273B3<WEEET27233<WEEE
ell400"555 	eT"""T273B3<gFFFT27233<WEEE
ell400"555 	eT"""T273B3<gFFFT27233<WEEE
ell400"555eT"""T273B3<gFFFT27233<TBBB
ell400"555/6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   H-MMMc           
         | |z  }t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }d	}t          j	        t          |
          5  |                    |ddd           d d d            n# 1 swxY w Y   t          j	        t          |
          5  |                    |ddd           d d d            n# 1 swxY w Y   d}t          j	        t          |
          5  |                    |ddd           d d d            n# 1 swxY w Y   t          j	        t          |
          5  |                    |ddd           d d d            n# 1 swxY w Y   d}d| d}t          j	        t          |
          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nr.   r/   r0   r3   r   c                     g | ]}d | S r5   r'   r(   s     r   r+   z$test_api_invalid.<locals>.<listcomp>       111!X!XX111r   r1   r7   zCan only append to TablesmatchrN   Trg   r\   rf   z)invalid HDFStore format specified \[foo\]fooF zFile z does not exist)r   rE   rF   rI   r   rJ   rK   rH   pytestraises
ValueErrorr   	TypeErrorFileNotFoundErrorr   )ra   rV   r   rN   msgs        r   test_api_invalidrv      s<   j D	binn$$W---d6ll&11111uRyy111@@@
 
 
B &C	z	-	-	- ; ;
		$Dc	:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 
z	-	-	- ? ?
		$Dg	>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 7C	y	,	,	, = =
		$De	<<<= = = = = = = = = = = = = = = 
y	,	,	, > >
		$Du	===> > > > > > > > > > > > > > > D
'$
'
'
'C	(	4	4	4  t                 sZ   )CCC5DD"DE))E-0E-F55F9<F9#HHHc                 0   t          |           5 }t          t          j        dt          j                  t          dd                    |d<   |                    d          }|d         }t          j        ||           |                    d          }|d         }t          j        ||           t          j
        t          d	          5  |                    d
           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r    rS   z/az'No object named b in the file'rl   b)r   r   rE   rF   r#   r   getrC   rG   rp   rq   KeyError)rV   rX   leftrights       r   test_getr}      s   	J	'	' 5Ib
+++:lTV3W3W3W
 
 
c
 yy~~c

tU+++yyd
tU+++]8+LMMM 	 	IIcNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s6   CDC3'D3C7	7D:C7	;DDDc                     t          t          j                            d                              d                    }t          |t          j        |            d S )NrB   )2   d   )r   rE   randomdefault_rngstandard_normal_check_roundtriprC   rL   )rV   rN   s     r   test_put_integerr      sH    	29((++;;IFF	G	GBR.
;;;;;r   c                    t          |           5 }t          dg did          }|                    d|           t          j        |j        |d         j                   t          dg did          }|                    d|           t          j        |j        |d         j                   t          j        d          }t          j	        t          |	          5  |                    d|           d d d            n# 1 swxY w Y   t          t          j        d
gdgdggd          dg          }|                    d|           t          j        |j        |d         j                   |j        j        d         dk    sJ t          d dD                       }d|d<   d|d<   |d                             d          |d<   |d         dk    |d<   t          d          |d<   t          d          |d<   |                    d|           |                    d          j                                        }d |j        D             |_        t'          dd
d
d
d
d
d
d
dd 	d!"          }|                                }|                                }t          j        ||           d d d            d S # 1 swxY w Y   d S )#NrS      rB      f8r   df_f8i8df_i8zinvalid combination of [values_axes] on appending data [name->values_block_0,cname->values_block_0,dtype->float64,kind->float,shape->(1, 3)] vs current table [name->values_block_0,cname->values_block_0,dtype->int64,kind->integer,shape->None]rl   r   rB   r   f4r<   r8   df_f4r   float32c                     i | ]D}|t          t          j                            d                               d          |          ES )rB   r:   r   )r   rE   r   r   integers)r)   cs     r   
<dictcomp>z6test_table_values_dtypes_roundtrip.<locals>.<dictcomp>   sU        6")//22;;A>>aHHH  r   )r   r#   int32int64int16int8rn   string      ?float322bool20130101time120130102time2df_mixed_dtypes1c                 ,    g | ]}t          |          S r'   )strr(   s     r   r+   z6test_table_values_dtypes_roundtrip.<locals>.<listcomp>   s    5551A555r   )	r   r#   r   r   r   r   r   rK   zdatetime64[ns]count)name)r   r   r@   rC   rG   dtypesreescaperp   rq   rr   rE   arrayr_   astyper   rU   value_countsr!   r   
sort_index)rV   rX   df1df2ru   rO   expecteds          r   "test_table_values_dtypes_roundtripr      sm   	J	'	' =15iii(555Wc"""
sz5>+@AAAiii(555Wc"""
sz5>+@AAA i
 
 ]:S111 	' 	'LL#&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 1#sQC===uMMMWc"""
sz5>+@AAAzq!Y....  R  
 
 HJj/00;;J)nq(F ,,G ,,G'---0118EEGG55555"#
 
 
 
 
 ""$$&&((
vx000{=1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1 =1s7   CJ> D7J>D	J>
D	F&J>>KKz(ignore::pandas.errors.PerformanceWarningc           	         t          t          d          dd t          d          D                       }t          |t          j        |            t          t          j        dt
          j                  t          dd          	          }t          |t          j        |            t          |j	        t          |j	        t                              }t          |t          j        |            t          |j        t          t          j        |j	        t                    t                              }t          |t          j        | d
           d S )Nr   r#   c                     g | ]}d | S r%   r'   r(   s     r   r+   ztest_series.<locals>.<listcomp>
  s    1N1N1Nq(q((1N1N1Nr   r,   r   r   r   r   r    F)r   check_index_type)r   rH   r   rC   rG   rE   rF   r#   r   r!   r   rK   valuesasarray)rV   ststs2ts3s        r   test_seriesr     s/   uRyy	1N1NE"II1N1N1NOOOAQ.Z@@@@	
	"BJ'''z,PR/S/S/S
 
 
B R/jAAAA
5888
9
9CS"0zBBBB
E"*RXV"D"D"DFSSS
T
TCR#*u     r   c                 $   t           j                            d                              d          }t	          t           j                            d                              d          |          }t          |t          j        |            d S )NrB   r   r    r   )rE   r   r   r   r   r   rC   rG   )rV   r!   r   s      r   test_float_indexr     ss    I!!!$$44R88Ery$$Q''77;;5IIIAQ.Z@@@@@@r   c                    t          j        d          }g d}t           j                            d                              d                              d          }t          |||          }t          j        t          j
        j                  5  t          |t          j        |            d d d            d S # 1 swxY w Y   d S )Nr   ))g        r   )       @      @)g      @g      @rB   r1   )r   r   )r!   r8   r   )rE   rF   r   r   r   rI   r   rC   assert_produces_warningpderrorsPerformanceWarningr   rL   )rV   colidxrW   DFs        r   test_tuple_indexr   "  s   
)B--C
.
.
.C9  ##33B77??HHD	4sC	0	0	0B		#BI$@	A	A E ER2DDDDE E E E E E E E E E E E E E E E E Es   B==CCc                 6   t           j                            d                              d          }d }t	          |ddg          }t          |||            t	          |t          j                                        dg          }t          |||            t	          |ddg          }t          |||            t	          |t          j                                        dg          }t          |||            t	          |ddg          }t          |||            t	          |t          j                                        dg          }t          |||            t	          |ddg          }t          |||            t	          |t          j                                        dg          }t          |||            t	          |ddg          }t          |||            t	          |d	d
g          }t          |||            t	          |d	dg          }t          |||            t          ddgd          }t	          ||          }t          |||            |j
                            d          |_
        t          |||            d S )NrB   c                 0    t          j        | |d          S )NT)r   )rC   rG   )lhsrhss     r   <lambda>z"test_index_types.<locals>.<lambda>1  s    B23dSSS r   r   yr   rS   gGz?rx   r   g{Gz?r:   z
2012-01-01z
2012-01-02M8[ns]r   r    r   )rE   r   r   r   r   r   datetimetodaydater   r!   as_unit)rV   r   funcserdtis        r   test_index_typesr   -  s   Y""1%%55a88FSSD
!S
"
"CS$Z0000
(+1133Q7
8
8CS$Z0000
#q
"
"CS$Z0000
(---//5
6
6CS$Z0000
!S
"
"CS$Z0000
(+1133Q7
8
8CS$Z0000
#q
"
"CS$Z0000
(---//5
6
6CS$Z0000
$
%
%CS$Z0000
!T
#
#CS$Z0000
!Q
 
 CS$Z0000
|4H
E
E
EC
s
#
#
#CS$Z0000	!!#&&CIS$Z000000r   c                    t          dd          }t          t          j                            d                              t          |                    |          }	 t          |t          j	        |            d S # t          $ rB t                      r2|                    t          j                            d                      w xY w)Nz1/1/1940z1/1/1960rB   r    r   z'known failure on some windows platforms)r
   r   rE   r   r   r   lenr   rC   rG   OverflowErrorr   applymarkerrp   markxfail)rV   requestdrr   s       r   test_timeseries_preepochr   \  s    	Z	,	,B		%%a((88RAA	L	L	LBR3*EEEEEE      	!!"KLL   	s    A> >AC
compressionFT)marksc           
      b   t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }t          j        |j	        d	<   t          j        |j	        d
<   t          |t          j        ||            t          |t          j        ||            t          t          j                            d                              d          t	          t          d          t                    t#          ddd                    }t          |t          j        ||            t%          |          5 }t          j                            d                              t'          |                    |d<   ||d<   |d         }|j                                        sJ 	 d d d            n# 1 swxY w Y   t          |d d         t          j        |           d S )Nr.   r/   r0   r3   r   c                     g | ]}d | S r5   r'   r(   s     r   r+   ztest_frame.<locals>.<listcomp>p  rk   r   r1   r7   )r   r   )r:   r   r   r   rB   )r   r2   z
2000-01-01r   r=   )r   freqrn   rN   r   r   )r   rE   rF   rI   r   rJ   rK   rH   nanr_   _check_roundtrip_tablerC   rL   r   r   r   r   r   r   r   _mgris_consolidated)r   rV   rN   tdfrX   reconss         r   
test_framer   i  s?    
binn$$W---d6ll&11111uRyy111@@@
 
 
B FBGDMFBGDM
B!
    
B!
    
	a  0099d6ll&111r<<<  C
 R"    
J	'	' -5I))!,,<<SWWEE5	dt{**,,,,,,- - - - - - - - - - - - - - - RVR2DDDDDDs   A+H  HHc                    t          t                    }t          dt                    }t                      }t          g d          }t          g d          }t          |t          j        |            t          |t          j        |            t          |t          j        |            t          |t          j        |            t          |t          j        |            d S )	Nr   myseries)r   r   rS   rx   r   r    )derg   r   r   )r   rK   r   r   rC   rG   rL   )rV   s0s1df0r   r   s         r   test_empty_series_framer     s    	f			B	Zv	.	.	.B
++C
///
*
*
*C
OOO
,
,
,CR/jAAAAR/jAAAAS"/jAAAAS"/jAAAAS"/jAAAAAAr   r   zm8[ns]r   c                 ^    t          |           }t          |t          j        |           d S )Nr   r   )r   r   rC   rG   )r   rV   r   s      r   test_empty_seriesr     s0    UAQ.Z@@@@@@r   c                    d t          dd          D             }t          t          j                            d                              t          |          df          |          }t          |t          j	        |            d S )Nc                 6    g | ]}|                                 S r'   )r   )r)   xs     r   r+   z,test_can_serialize_dates.<locals>.<listcomp>  s     
B
B
B16688
B
B
Br   z1/1/2000z	1/30/2000rB   r2   r    r   )
r
   r   rE   r   r   r   r   r   rC   rL   )rV   rngr9   s      r   test_can_serialize_datesr     s    
B
B[[AA
B
B
BC
	a  00#c((A??s  E UB1
CCCCCCr   c                 \   |}t          |t          j        |            t          |j        t          j        |            t          |d         t          j        |            t          |           5 }||d<   |d         }t          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r<   r9   )r   rC   rL   TrG   r   )rV    multiindex_dataframe_random_datar9   rX   r   s        r   test_store_hierarchicalr    s    ,EUB1
CCCCUWb3*EEEEU3Z!7jIIII 
J	'	' -5gw
fe,,,- - - - - - - - - - - - - - - - - -s   1#B!!B%(B%c                 D   d } |            } |            }t          |t          j        |           t          |t          j        |           t          |          5 }||d<   t          j        |d         |           ||d<   t          j        |d         |           d d d            n# 1 swxY w Y   t          |d         t          j        ||            t          |d         t          j        ||            t          |d         t          j        ||            d S )Nc            
         t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              } d	| d
<   d| d<   | d         dk    | d<   | d         dk    | d<   d| d<   d| d<   |                                 S )Nr.   r/   r0   r3   r   c                     g | ]}d | S r5   r'   r(   s     r   r+   z7test_store_mixed.<locals>._make_one.<locals>.<listcomp>  r6   r   r1   r7   rn   obj1barobj2r<   r   bool1r=   bool2r   int1rB   int2)	r   rE   rF   rI   r   rJ   rK   rH   _consolidate)rN   s    r   	_make_onez#test_store_mixed.<locals>._make_one  s    ")C..((111$v,,f55555599555VDDD
 
 

 6
6
gk7gk76
6
   r   r   r   r  r   r	  r  )r   rC   rL   r   rG   )r   rV   r  r   r   rX   s         r   test_store_mixedr    s   ! ! ! )++C
)++CS"/jAAAAS"/jAAAA	J	'	' 15e
eElC000e
eElC000	1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F
	    G
	    F
	     s   AB,,B03B0c                     i }|rd|d<   t          |dfi |5 }| |d<   |d         } ||| fi | d d d            d S # 1 swxY w Y   d S )Nblosccomplibwr   )r   )r   
comparatorr   r   r   optionsrX   	retrieveds           r   r   r     s    G %$		D#	1	1	1	1 -Ue%L	
9c,,V,,,- - - - - - - - - - - - - - - - - -s   =AAc                     i }|rd|d<   t          |dfi |5 }|                    d| d           |d         } |||            d d d            d S # 1 swxY w Y   d S )Nr  r  r  r   r>   )r]   )r   put)r   r  r   r   r  rX   r  s          r   r   r     s    G %$		D#	1	1	1	1 #U		%W	---%L	
9c"""	# # # # # # # # # # # # # # # # # #s   -AAAc                     ddg}t          t          j                            d                              t          |                    |          }t          |t          j        |            d S )Nu   σu   σσrB   r   )	r   rE   r   r   r   r   r   rC   rG   )rV   unicode_valuesr   s      r   test_unicode_indexr    sg    /N
	a  00^1D1DEE	 	A Q.Z@@@@@@r   c                    d}t          d|gi          }t          |           5 }|                    d|dd           |                    d          }t	          j        ||           d d d            n# 1 swxY w Y   t          d|gddgd	          }t          |           5 }|                    d|dd           |                    d          }t	          j        ||           d d d            d S # 1 swxY w Y   d S )
Nu   Δr<   rN   r>   zutf-8)r]   encodingrS   rx   r;   )r   r   r  ry   rC   rL   )rV   charrN   rX   rO   s        r   test_unicode_longer_encodedr    s   D	C$=	!	!B	J	'	' *5		$7W	===4
fb)))* * * * * * * * * * * * * * *
 
#tC:66	7	7B	J	'	' *5		$7W	===4
fb)))* * * * * * * * * * * * * * * * * *s%   AA44A8;A8$AC55C9<C9c                    t          g dg dg dd          }t          t          j        dt          j                  t          dd                    }|j        d d	         |d
<   t          |t          j	        |            d S )Nr   )r   r   r   r   r   r   r   r   r    r   r   r   )
r   r   rE   rF   r#   r   r!   r   rC   rL   )rV   rN   r   s      r   test_store_datetime_mixedr!  !  s    	OO	P	PB	
	"BJ'''z,PR/S/S/S
 
 
B hrrlBsGR.Z@@@@@@r   c                    t          ddgddgd          }| |z  }|                    |dd           t          |d          }t          j        ||           |                    |          sJ |                    |          sJ d S )	Nr   rB   r   r   )r=   r<   rN   r>   r   r]   )r   r   r   rC   rL   equals)ra   rV   rN   r   others        r   test_round_trip_equalsr&  *  s    	!QsCj11	2	2Bj DIIdWI---T4  E"e$$$99U<<r   c           
         t          j        d           | |z  }t          j        dd          5  t	          dt          d          t          t          d                                                  dd	g          }|                                }|	                    |d
d           t          |d
          }t          j        ||           d d d            d S # 1 swxY w Y   d S )Npyarrowzfuture.infer_stringTr   r3   r   r7   r<   r=   rN   r>   r#  )rp   importorskipr   option_contextr   rJ   rH   	set_indexcopyr   r   rC   rL   )ra   rV   r   rN   r   rO   s         r   test_infer_string_columnsr-  6  s   
	"""j D		0$	7	7 0 0q$v,,d599ooFFFPP#J
 
 7799
		$D	111$%%
fh///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   B CC #C )F)?r   r   numpyrE   rp   pandas._libs.tslibsr   pandas.compatr   pandasr   r   r   r   r   r	   rC   r
   r   r   pandas.tests.io.pytables.commonr   r   pandas.utilr   tdr   
single_cpu
pytestmarkrP   rY   rb   rd   rh   rv   r}   r   r   filterwarningsr   r   r   r   r   parametrizeparamskip_if_windowsr   r   r   r#   rK   r   r   r  r  r   r   r  r  r!  r&  r-  r'   r   r   <module>r;     s    				      ) ) ) ) ) ) - - - - - -    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	        / . . . . .[#
8 8 8:	* 	* 	*4 4 4 4 4 4'6 '6 '6T  B  "< < <>1 >1 >1B FGG  HG$A A AE E E FGG+1 +1 HG+1\
 
 
 E<6<B4FGGGH #E #E #ELB B B 28RZ8"TUUA A VUA
D D D- - - E<6<B4FGGGH - - -`- - - -	# 	# 	# 	#A A A* * * A A A	 	 	0 0 0 0 0r   