
    Mh`x                     (   S SK r S SKrS SKrS SKJrJrJrJr  S SK	J
r  S SKJr  \R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r\R                  S 5       r " S	 S
5      r " S S5      rg)    N)	DataFrameIndexSeriesjson_normalizenested_to_recordc                  n    SSSSS.SSS./S.S	S
SS.SSS./S./S.SSSSS./S.SSSS.SSS./S./S./$ )NUSA
CaliforniaSan Francisco90  )namepopLos Angeles:0  )r   citiesOhioColumbus  	Cleveland  )countrystatesGermanyBayernMunich;0  Nordrhein-WestfalenDuesseldorf  Koeln   r#       U/var/www/html/env/lib/python3.13/site-packages/pandas/tests/io/json/test_normalize.pydeep_nestedr&      s    
  )!0?!.u= #!+D9!,T:	
( !!x.N-OP1!.t<!(6		
)! !r$   c                  N    SSS.SSS.SSS./SS	0S
SS.SSS.SSS./SS0SSS./$ )NDader   r   
populationBroward@  
Palm Beach`  governor
Rick ScottFLFlorida)countiesinfo	shortnamestateSummitr   Cuyahoga9  John KasichOHr   r#   r#   r$   r%   
state_datar<   8   sl    
  u5"%8%U;
  .		
 "6#48  /	
 r$   c                       SS 0SSS.SSS.S./$ )	Nr4   
11/08/1993
26/05/2012
created_atlast_updatedJaneDoefirst	last_namer4   author_namer#   r#   r$   r%   author_missing_datarJ   Q   s*     
#/N%+%@	
 r$   c                  H    SSSSSSS./SS	S
0/0S.SSSSSS./SS	S0/0S./$ )NAliceZ%  
Morris St.	Massillonr;   f  )numberstreetcityr6   zipr   	city_nameFoo York City)r   	addressesprevious_residences!  
Spring St.ElizabethtonTN  
Barmingham)rW   rX   r#   r#   r$   r%   missing_metadatar_   \   su      #*'!  %-_/M.N#O	
  #**!  %-\/J.K#L	
 r$   c                  $    SS0SSSS.S.SS	0S
./$ )z8
input data to test json_normalize with max_level param
NameUser001	Some textID001Name001Idra   	TextField	UserFieldab	CreatedByLookupImager#   r#   r$   r%   max_level_test_input_datarq   {   s4     !),($+Y? 3Z	
	 	r$   c                   
   \ rS rSrS rS rS rS r\R                  R                  SSS0SS	0/S
S
4SSS0SS	0/0SS
4SS
\4S
S
\4/5      S 5       rS rS rS rS rS rS rS rS rS rS rS rS r\R                  R                  SSSSSS.SS0SS 0S!.SSSS.SS0SS 0S!./4S	SSSSS0SS 0S".SSSSS0SS 0S"./4/5      S# 5       rS$ rS% r\R                  R                  S&/ S'Q5      S( 5       rS) rS* rS+ rS,r g
)-TestJSONNormalize   c                     SSSS.SSSS.SS	S
S.SSSS./n[        U5      n[        U5      n[        R                  " X#5        g )N         )rk   rl   c               	   
         r   r   tmassert_frame_equalselfrecsresultexpecteds       r%   test_simple_records%TestJSONNormalize.test_simple_records   sT    !!$!!$!!$2B'	
  %T?
f/r$   c                    [        US   S5      n[        US   S   5      n[        R                  " X#5        [        US5      n/ nU H  nUR	                  US   5        M     [        U5      n[        R                  " X#5        [        USSS9n[
        R                  " SS/5      R                  SS/5      US'   [        R                  " X#5        g )	Nr   r3   r6   metar2   r   rx   rw   )r   r   r   r   extendnparrayrepeatr   r<   r   r   recs        r%   test_simple_normalize'TestJSONNormalize.test_simple_normalize   s    
1z:Z]:67
f/
J7COOC
O, X&
f/
JWEHHi%89@@!QH
f/r$   c                     / SQSSS/0S./n[        US/SS//S9n[        / SQSS/SS/SS//S	.5      n[        R                  " X#5        g )
Nrv   rw   rx   listdatarv   rw   )valuesmetadatar   r   record_pathr   )r   zmetadata.listdatar   )r   parse_metadata_fields_list_typer   r   s       r%   test_fields_list_type_normalize1TestJSONNormalize.test_fields_list_type_normalize   sq     zAq6.BC+
'  +!
z*+

 !Q!Q!Q0HI
 	f/r$   c                 Z    [        / 5      n[        5       n[        R                  " X5        g )Nr   r   r   r   s      r%   test_empty_array"TestJSONNormalize.test_empty_array   s!    #;
f/r$   z!data, record_path, exception_typerk   r   rv   Nz{"a": [{"a": 0}, {"a": 1}]}c                     Ub(  [         R                  " USS9   [        XS9  S S S 5        g [        XS9n[        SS/S/S9n[        R
                  " XE5        g ! , (       d  f       g = f)N matchr   r   rv   rk   columns)pytestraisesr   r   r   r   )r   datar   exception_typer   r   s         r%   test_accepted_input%TestJSONNormalize.test_accepted_input   s]     %~R8t= 98 $DBF !Q#7H!!&3 98s   
A
A'c                 X   [        SSSS.05      n[        SS//SS/S9n[        R                  " UR	                  U5      U5        [        SSSS.0SS	9n[        SS//S
S/S9n[        R                  " UR	                  U5      U5        [        SSSS.0SS	9n[        SS//SS/S9n[        R                  " UR	                  U5      U5        [        USS/SSS//SS9n[        / SQ5      R                  5       nUR                  R                  5       R                  U5      (       d   eg )NArv   rw   )r   BzA.AzA.Br   _sepA_AA_Bu   σu   AσAu   AσBr   r   r   r   )r   r   )r   r   r   states_name)	r   r   r   r   reindex_liker   sort_valuesr   equals)r   r&   r   r   s       r%   $test_simple_normalize_with_separator6TestJSONNormalize.test_simple_normalize_with_separator   s5   AA&6 78q!fXu~>
f11(;XFAA&6 7SAq!fXu~>
f11(;XFAA&6 7XFq!fX
J/GH
f11(;XFx h/0	
 BCOOQ~~))+228<<<<r$   c                 |    SS/SSS.S.n[        USS9n[        SS/SS/// SQS	9n[        R                  " X#5        g )
Nrv   rw   )rx   rz   )b_1b_2)rk   rl   __r   )rk   b__b_1b__b_2r   r   r   r   r   r   s       r%   'test_normalize_with_multichar_separator9TestJSONNormalize.test_normalize_with_multichar_separator   sJ    V!F";<$/1vq&12<UV
f/r$   c                 l    [        SSS/0SSS9n[        S/S//S/S9n[        R                  " X5        g )Nr   rv   rw   zPrefix.)record_prefixzPrefix.0r   r   r   s      r%   test_value_array_record_prefix0TestJSONNormalize.test_value_array_record_prefix   s<    q!fs)LqcA3Z*>
f/r$   c                     SSSSS.SSS.SS	S./S
.S.n[        USS/S9n[        SS/SS/SS	//SS/S9n[        R                  " X#5        g )Nr2   r0   r(   r   r)   r+   r,   r-   r.   )r/   r3   r6   r4   r4   r3   r   r   r*   r   r   r   s       r%   test_nested_object_record_path0TestJSONNormalize.test_nested_object_record_path   s     (#59&e<)?

  6:2FGe_y%0<2GH\*
 	f/r$   c                     [        USS/SSS//S9nS/S-  S/S	-  -   / S
Q/ SQ/ SQS.n[        X2R                  S9n[        R                  " X$5        g )Nr   r   r   r   r   r
   rz   r   rx   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r!   )r   r   r   r   r   r    r"   )r   zstates.namer   r   r   r   r   r   r   r   )r   r&   r   ex_datar   s        r%   test_more_deeply_nested)TestJSONNormalize.test_more_deeply_nested
  sm    (H-Y6@R4S
 w{i[1_4 A)
. Wnn=
f/r$   c                    SSSS0SSS.SS	S.S
SS./S.SSSS0SSS.SSS./S./n[        USSSSS//5      n/ SQS/S-  S/S-  -   / SQS/S-  S/S-  -   / SQS.n[        X2R                  S9n[        R                  " X$5        g )Nr2   r1   r/   r0   r(   r   r)   r+   r,   r-   r.   )r6   r5   r4   r3   r   r;   r:   r7   r   r8   r9   r3   r6   r5   r4   r(   r+   r-   r7   r8   rx   rw   )r1   r1   r1   r;   r;   r   r,   r.   r   r9   )r   r6   r5   info.governorr*   r   r   )r   r   r   r   r   s        r%   test_shallow_nested%TestJSONNormalize.test_shallow_nested(  s     #!#\2#59&e<)?		  !#]3%T:'t<	
,  *wfj5IJ
 L[1_x!|37*^a/=/A2EE;
 Wnn=
f/r$   c                     [        US/SSSS//SS9n/ SQ/ S	QS
/S-  S/S-  -   S/S-  S/S-  -   S/S-  S/S-  -   S.n[        U5      n[        R                  " X$5        g )Nr3   r6   r5   r4   r/   ignorer   r   r   errorsr   r   r2   rx   r   rw   r1   r;   r0   r:   )r   r*   r6   r5   r   r   )r   r<   r   r   r   s        r%   -test_nested_meta_path_with_nested_record_path?TestJSONNormalize.test_nested_meta_path_with_nested_record_pathL  s    #;(<=	
 L;[1_x!|3!tfqj0*^a/=/A2EE
 W%
f/r$   c                     SSSSS.SSS./S./nS	n[         R                  " [        US
9   [        USSS/S9  S S S 5        [        USSS/SS9nS H
  nXC;   a  M
   e   g ! , (       d  f       N-= f)Nhellothere	somethingelsefoobar
something2else2r   r   r   z?Conflicting metadata name (foo|bar), need distinguishing prefixr   r   r   r   r   r   r   meta_prefixmetafoometabarr   r   )r   r   
ValueErrorr   )r   r   msgr   vals        r%   test_meta_name_conflict)TestJSONNormalize.test_meta_name_conflict`  s     '7(9	
 Q]]:S14uen= 2  fE5>vV7C= = 8 21s   A  
A.c                 v    SSSSS.SSS./S./nS	S
/n[        USUSS9nUS	S
/:X  d   eS H
  nXC;   a  M
   e   g )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   )r   r   COLUMNSr   r   s        r%    test_meta_parameter_not_modified2TestJSONNormalize.test_meta_parameter_not_modifiedu  sl     '7(9	
 %.f7O5%.(((7C= = 8r$   c                    [        US   S5      n[        US   S   5      n[        R                  " X#5        [        USSSS9n/ nU H  nUR	                  US   5        M     [        U5      nUR                  S S9n[        R                  " SS	/5      R                  S
S/5      US'   [        R                  " X#5        g )Nr   r3   r6   county_)r   r   c                     SU -   $ )Nr   r#   )xs    r%   <lambda>6TestJSONNormalize.test_record_prefix.<locals>.<lambda>  s    Y]r$   r   r2   r   rx   rw   )	r   r   r   r   r   renamer   r   r   r   s        r%   test_record_prefix$TestJSONNormalize.test_record_prefix  s    
1z:Z]:67
f/
	
 COOC
O, X&??+B?CHHi%89@@!QH
f/r$   c                     SR                  S5      nSR                  S5      SS/SSS/SS	S
/0n[        U5      n[        [        R                  " U5      5      n[
        R                  " XC5        g )NsK   [{"Ünicøde":0,"sub":{"A":1, "B":2}},{"Ünicøde":1,"sub":{"A":3, "B":4}}]utf8s	   Ünicøder   rv   zsub.Arx   zsub.Brw   rz   )decoder   r   jsonloadsr   r   )r   testjsontestdatar   r   s        r%   test_non_ascii_key$TestJSONNormalize.test_non_ascii_key  sr    A
&. 	 %++F3aVaVaV

 X&

8 45
f/r$   c                    [        U5      n[        R                  [        R                  [        R                  [        R                  [        R                  S.S SSSSS./n[        U5      n[        R
                  " X$5        g )N)r4   info.created_atinfo.last_updatedauthor_name.firstauthor_name.last_namer>   r?   rC   rD   r   r   nanr   r   r   )r   rJ   r   r   r   s        r%   test_missing_field$TestJSONNormalize.test_missing_field  sn     34 #%66%'VV%'VV)+ #/%1%+).
  W%
f/r$   zmax_level,expectedrc   rd   re   rf   ra   rb   rl   )ri   rj   rn   rp   )ri   zUserField.IdzUserField.Namern   rp   c                     SS0SSSS.S.SSSS.S./SS	0S
SS.SSS./S./n[        US/S/S//US9n[        X$R                  R                  S9n[        R
                  " XT5        g )Nra   rb   rc   rd   re   rf   rh   rk   rl   r   r   r   r   r   )rn   ro   rp   tagsro   rn   rp   )r   r   	max_level)r   r   )r   r   r   r   r   assert_equal)r   r  r   
test_inputr   expected_dfs         r%    test_max_level_with_records_path2TestJSONNormalize.test_max_level_with_records_path  s    Z %i0 &1,3Y%G
 &1,3Y%G	 s'7(9

*  !
-'+	
  X~~7L7LM
,r$   c                 v    [        SSS00/5      n[        SSSS00/0S5      n[        R                  " X5        g )Nr   r   rv   dummy)r   r   r   )r   df1df2s      r%   !test_nested_flattening_consistent3TestJSONNormalize.test_nested_flattening_consistent
  sC    sS!Ho./gsAh'897C 	c'r$   c                 v    [        SUS.SSS0/S./S/S9n[        SS0S/S	9n[        R                  " X#5        g )
NTexasr   r2   irw   r4   r   r   )index)r   r   r   r  )r   nulls_fixturer   r   s       r%   test_nonetype_record_path+TestJSONNormalize.test_nonetype_record_path  sP      !=9#sAhZ8  
 c1XaS1
)r$   value)falsetruez{}1z"text"c                     [         R                  " U5      nSUS.nSnU SU SU S3n[        R                  " [        US9   [        U/U/S9  S S S 5        g ! , (       d  f       g = f)	Nr&  r   r4   z has non list value z
 for path z. Must be list or null.r   r   )r  r	  r   r   	TypeErrorr   )r   r,  parsed_valuer  	test_pathr   s         r%    test_non_list_record_path_errors2TestJSONNormalize.test_non_list_record_path_errors  sm     zz%(&=
	l.|nJyk R$ $ 	 ]]9C0J<i[A 100s   A
A&c           	          Sn[        [        R                  " U5      S/S/S9n[        S/S/[        R
                  " S/[        S9S	.5      n[        R                  " X#5        g )
Nz,[{"id": 99, "data": [{"one": 1, "two": 2}]}]r   idr   rv   rw   c   )dtype)onetwor7  )	r   r  r	  r   r   r   objectr   r   r   s       r%   test_meta_non_iterable(TestJSONNormalize.test_meta_non_iterable,  sW    A

4 0vhdVTC288RD+GH
 	f/r$   c                    ^ U4S jn[        U" 5       5      n[        TS   S   5      n[        R                  " X45        g )Nc               3   2   >#    T S   S    S h  vN   g  N7f)Nr   r3   r#   )r<   s   r%   generator_data8TestJSONNormalize.test_generator.<locals>.generator_data9  s     !!}Z000s   r   r3   r   )r   r<   rA  r   r   s    `   r%   test_generator TestJSONNormalize.test_generator6  s8    	1   01Z]:67
f/r$   c                 v    SSS0S.SS.n[        USS9n[        / S	Q// S
QS9n[        R                  " X#5        g )Nr   l3r   )a1l2rz   )_idggr   r   )rz   r   r   )rJ  _id_a1	_id_l2_l3r   r   r   s       r%   'test_top_column_with_leading_underscore9TestJSONNormalize.test_top_column_with_leading_underscoreA  s>     q	2!<#.j\3PQ
f/r$   r#   )!__name__
__module____qualname____firstlineno__r   r   r   r   r   markparametrizeNotImplementedErrorr   r   r   r   r   r   r   r   r   r   r  r  r  r  r#  r*  r4  r=  rC  rM  __static_attributes__r#   r$   r%   rs   rs      s   00&00
 [[+Aha!4.S!HsAh'(#t4*D2EF4,-		
44=.000(0<"0H0(!*!(0$0 0, [[  &1,3Y%G&,i%8"%s	 &1,3Y%G&,i%8"%s	$  &1(/*3&,i%8"%s &1(/*3&,i%8"%s%%	
(R-S(R-@(* [[W&LM
B N
B0	00r$   rs   c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS r\R                   R#                  SSSSSSSS./4SSS0SSSS.S.SS0S./4SSSSSS.SS./4/5      S 5       rS rS rS rg)!TestNestedToRecordiJ  c                 @    SSS.SSS./n[        U5      nUnX#:X  d   eg )Nrv   rw   )flat1flat2rx   rz   )flat3r[  r   r   s       r%   test_flat_stays_flat'TestNestedToRecord.test_flat_stays_flatK  s1    a(A*BC!$'!!!r$   c                 D    SSSS.S.n[        U5      nSSSS.nX#:X  d   eg )Nrv   rw   ry   d)rZ  dict1)dict1.cdict1.drZ  r   r   s       r%   test_one_level_deep_flattens/TestNestedToRecord.test_one_level_deep_flattensQ  s3    11%56!$' Q;!!!r$   c                 X    SSSS.SSS.SS.S.n[        U5      nSSSSSSS.nX#:X  d   eg )Nrv   rw   r`  )era  )rZ  rb  nested)rc  rd  rZ  znested.dz
nested.e.cz
nested.e.dr   r   s       r%   test_nested_flattens'TestNestedToRecord.test_nested_flattensY  sT    1%"#!,15
 "$'
 !!!r$   c                     Sn[         R                  " [        US9   [        USSSS9  S S S 5        g ! , (       d  f       g = f)N^Key 'name' not found. To replace missing values of 'name' with np.nan, pass in errors='ignore'r   rW   r   raiser   r   r   KeyErrorr   r   r_   r   s      r%   test_json_normalize_errors-TestNestedToRecord.test_json_normalize_errorsl  s<    : 	 ]]83/%'	 0//s	   2
A c                     [        USSSS9n/ SQSSSS	S
[        R                  //n/ SQn[        X4S9n[        R
                  " X%5        g )NrW   r   r   r   )rM   rN   rO   r;   rP   rL   rY   rZ   r[   r\   r]   )rQ   rR   rS   r6   rT   r   r   r  r   r_   r   r   r   r   s         r%   test_missing_meta$TestNestedToRecord.test_missing_meta}  sY      !{PX
 D<ubffE
 GW6
f/r$   c                 ~   SS SS0SS0/S.n[        USSSS	//S
S9nSS[        R                  /SS[        R                  //n/ SQn[        X4S9R	                  S[
        05      n[        R                  " X%5        [        R                  " [        SS9   [        USSSS	//SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   rv   rw   )r   nested_metar,  r,  r   ry  leafr   )r   r   r   )r   r   nested_meta.leafr   r{  z'leaf' not foundr   rn  )r   r   r  r   astyper<  r   r   r   r   rp  )r   r   r   r   r   r   s         r%   test_missing_nested_meta+TestNestedToRecord.test_missing_nested_meta  s     duaj5RS*=UV=&12	
 ubff%5"&&'9:5W6==(
 	f/ ]]8+=>#}f56	 ?>>s   B..
B<c                     Sn[         R                  " [        US9   [        USS/SSS9  S S S 5        g ! , (       d  f       g = f)Nrm  r   rX   r   r   rn  r   ro  rq  s      r%   5test_missing_meta_multilevel_record_path_errors_raiseHTestNestedToRecord.test_missing_meta_multilevel_record_path_errors_raise  sA    
: 	 ]]83/%2H=	 0//s	   4
Ac                     [        USS/SSS9nSS/S[        R                  //nS	S/n[        X4S
9n[        R
                  " X%5        g )NrX   r   r   r   r   rV   rL   r^   rU   r   r  ru  s         r%   6test_missing_meta_multilevel_record_path_errors_ignoreITestNestedToRecord.test_missing_meta_multilevel_record_path_errors_ignore  s`      !.9	
 g&266"
 'W6
f/r$   c                 h    S SSS.S.SSS.SS	S.S./n[        U5      nS SSS
.SS	SSS./nX#:X  d   eg )NSmith	AppleseedrE   rH   r>   r?   r@   rC   rD   )r4   r  r  )r  r  r  r  r   r   s       r%   test_donot_drop_nonevalues-TestNestedToRecord.test_donot_drop_nonevalues  sq     G+*VW'3\R)/eD
 "$' %,)4 &,).#/%1	
 !!!r$   c           
      `    S SSS S S SSSS.S.00S.n[        U5      nS S S S SSSS	.nX#:X  d   eg )
Nr   r6       gH@   @   ;@)r7  regionr   yzr7  z	town.infor7  location)r7  location.country.state.idz#location.country.state.town.info.id'location.country.state.town.info.region"location.country.state.town.info.x"location.country.state.town.info.y"location.country.state.town.info.zr   r   s       r%   $test_nonetype_top_level_bottom_level7TestNestedToRecord.test_nonetype_top_level_bottom_level  sp     ""&&*!3!4!3&	
" "$')-377;2D2E2D
 !!!r$   c           	      d    S S S S S SSSS.S.S.S.S.n[        U5      nS S S S S SSSS	.nX#:X  d   eg )
Nr  r  r  )r  r   r  r  r  )r7  r6   )r7  r   r  )r7  zlocation.idzlocation.country.idr  r  r  r  r  r   r   s       r%   test_nonetype_multiple_levels0TestNestedToRecord.test_nonetype_multiple_levels  sp     "&*!3!4!3	&
$ "$'#')-7;2D2E2D	
 !!!r$   zmax_level, expectedNrb   rc   rd   re   rl   )CreatedBy.NameLookup.TextFieldzLookup.UserField.IdzLookup.UserField.NameImage.ar   ra   rf   rh   rk   rm   rv   )r  r  zLookup.UserFieldr  c                 $    [        X1S9nXB:X  d   eg )Nr  r   )r   r  r   rq   outputs        r%   test_with_max_level&TestNestedToRecord.test_with_max_level%  s    V "";Q!!!r$   c           	      p    SnSSSSS.SSS	S
SS0S.S.S.0S.00/nSSSS	S
SS./n[        X!S9nXC:X  d   eg )Nd   rn   userLeoThomson)	firstnameLastNamefather	Father001	Father002	Father003ra   	Father004)r   r  )ra   r  )r   family_tree)zCreatedBy.user.name.firstnamezCreatedBy.user.name.LastNamez&CreatedBy.user.family_tree.father.namez-CreatedBy.user.family_tree.father.father.Namez4CreatedBy.user.family_tree.father.father.father.namez;CreatedBy.user.family_tree.father.father.father.father.Namer  r   )r   r  
input_datar   r  s        r%   test_with_large_max_level,TestNestedToRecord.test_with_large_max_levelS  s    	 .3 K$(3,70;39;2G/&+"	'(

. 2709:EALHSOZ	
 "*B!!!r$   c           	         SSSS0S.SSSS0S.SS	S
S0S.S.n[        U5      n/ SQUl        [        U5      n[        / SQ/ SQS[        R
                  [        R
                  /[        R
                  S[        R
                  /[        R
                  [        R
                  S/S.5      n[        R                  " X45        g )Nrv   Foork   )r7  r   elementsrw   Barrl   rx   Bazry   )r   rv   rw   r   )r  r  r  g      ?g       @g      @)r7  r   z
elements.az
elements.bz
elements.c)r   r(  r   r   r   r  r   r   )r   r   sr   r   s        r%   test_series_non_zero_index-TestNestedToRecord.test_series_non_zero_indexx  s     S!H=S!H=S!H=

 4L"-"BFFBFF3!vvsBFF3!vvrvvs3
 	f/r$   r#   )rO  rP  rQ  rR  r]  re  rj  rr  rv  r}  r  r  r  r  r  r   rS  rT  r  r  r  rV  r#   r$   r%   rX  rX  J  s    """&"06 0$"4"@ "D [[  +4,7/61:#&  '-i%8)407)K# #&s	  +4,73:I,N#&	
5%	
(R"S(R"
#"J0r$   rX  )r  numpyr   r   pandasr   r   r   r   pandas._testing_testingr   pandas.io.json._normalizer   fixturer&   r<   rJ   r_   rq   rs   rX  r#   r$   r%   <module>r     s         6 # #L  0    <   {0 {0|A0 A0r$   