
    Owg`x                     (   d dl Z d dlZd dlZd dlmZmZmZmZ d dl	m
Z d dlmZ ej                  d        Zej                  d        Zej                  d        Zej                  d        Zej                  d        Z G d	 d
      Z G d d      Zy)    N)	DataFrameIndexSeriesjson_normalizenested_to_recordc                  n    ddddddddgdd	d
dddddgdgddddddgddddddddgdgdg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#       Z/var/www/horilla/myenv/lib/python3.12/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    dddddddddgdd	id
ddddddddgddidddg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                       dd idddddddg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    dddddddgdd	d
igidddddddgdd	digidg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                  $    ddiddddddd	id
gS )z@
    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                      e Zd Zd Zd Zd Zd Zej                  j                  dddiddigd	d	fdddiddigidd	fd
d	e
fd	d	e
fg      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j                  ddddddddiddid ddddddiddid gfddddddiddid!dddddiddid!gfg      d"        Zd# Zd$ Zej                  j                  d%g d&      d'        Zd( Zd) Zd* Zy	)+TestJSONNormalizec                     dddddddddd	d
dddddg}t        |      }t        |      }t        j                  ||       y )N         )rk   rl   c               	   
         r   r   tmassert_frame_equalselfrecsresultexpecteds       r%   test_simple_recordsz%TestJSONNormalize.test_simple_records   sV    !!$!!$!!$2B'	
  %T?
fh/r$   c                    t        |d   d      }t        |d   d         }t        j                  ||       t        |d      }g }|D ]  }|j	                  |d           t        |      }t        j                  ||       t        |dd      }t        j                  ddg      j                  ddg      |d<   t        j                  ||       y )	Nr   r3   r6   metar2   r   rw   rv   )r   r   r   r   extendnparrayrepeatr   r<   r   r   recs        r%   test_simple_normalizez'TestJSONNormalize.test_simple_normalize   s    
1z:Z]:67
fh/
J7 	-COOC
O,	-X&
fh/
JWEHHi%89@@!QH
fh/r$   c                     g ddddgidg}t        |dgddgg      }t        g dddgddgddggd	      }t        j                  ||       y )
Nru   rv   rw   listdataru   rv   )valuesmetadatar   r   record_pathr   )r   zmetadata.listdatar   )r   parse_metadata_fields_list_typer   r   s       r%   test_fields_list_type_normalizez1TestJSONNormalize.test_fields_list_type_normalize   ss     zAq6.BC+
'  +!
z*+

 !Q!Q!Q0HI
 	fh/r$   c                 Z    t        g       }t               }t        j                  ||       y )Nr   r   r   r   s      r%   test_empty_arrayz"TestJSONNormalize.test_empty_array   s#    #;
fh/r$   z!data, record_path, exception_typerk   r   ru   Nz{"a": [{"a": 0}, {"a": 1}]}c                     |.t        j                  |d      5  t        ||       d d d        y t        ||      }t        ddgdg      }t	        j
                  ||       y # 1 sw Y   y xY w)N matchr   r   ru   rk   columns)pytestraisesr   r   r   r   )r   datar   exception_typer   r   s         r%   test_accepted_inputz%TestJSONNormalize.test_accepted_input   sl     %~R8 >t=> > $DkBF !Q#7H!!&(3> >s   A%%A.c                 l   t        ddddi      }t        ddggddg      }t        j                  |j	                  |      |       t        ddddid	      }t        ddggd
dg      }t        j                  |j	                  |      |       t        ddddid	      }t        ddggddg      }t        j                  |j	                  |      |       t        |ddgdddggd      }t        g d      j                         }|j                  j                         j                  |      sJ y )NAru   rv   )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_separatorz6TestJSONNormalize.test_simple_normalize_with_separator   s2   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                     ddgdddd}t        |d      }t        ddgddggg d	      }t        j                  ||       y )
Nru   rv   )rw   ry   )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_separatorz9TestJSONNormalize.test_normalize_with_multichar_separator   sL    V!F";<$/1vq&12<UV
fh/r$   c                 x    t        dddgidd      }t        dgdggdg      }t        j                  ||       y )Nr   ru   rv   zPrefix.)record_prefixzPrefix.0r   r   r   s      r%   test_value_array_record_prefixz0TestJSONNormalize.test_value_array_record_prefix   s>    q!fs)LqcA3Z*>
fh/r$   c                     dddddddddd	dgd
d}t        |ddg      }t        ddgddgdd	ggddg      }t        j                  ||       y )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_pathz0TestJSONNormalize.test_nested_object_record_path   s     (#59&e<)?

  6:2FGe_y%0<2GH\*
 	fh/r$   c                     t        |ddgdddgg      }dgdz  dgd	z  z   g d
g dg dd}t        ||j                        }t        j                  ||       y )Nr   r   r   r   r   r
   ry   r   rw   )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_nestedz)TestJSONNormalize.test_more_deeply_nested
  sq    (H-Y6@R4S
 w{i[1_4 A)
. Wfnn=
fh/r$   c                    ddddiddddd	dd
ddgdddddiddddddgdg}t        |dddddgg      }g ddgdz  dgdz  z   g ddgdz  dgdz  z   g dd}t        ||j                        }t        j                  ||       y )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   rw   rv   )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_nestedz%TestJSONNormalize.test_shallow_nested(  s     #!#\2#59&e<)?		  !#]3%T:'t<	
,  *wfj5IJ
 L[1_x!|37*^a/=/A2EE;
 Wfnn=
fh/r$   c                     t        |dgddddggd      }g dg d	d
gdz  dgdz  z   dgdz  dgdz  z   dgdz  dgdz  z   d}t        |      }t        j                  ||       y )Nr3   r6   r5   r4   r/   ignorer   r   r   errorsr   r   r2   rw   r   rv   r1   r;   r0   r:   )r   r*   r6   r5   r   r   )r   r<   r   r   r   s        r%   -test_nested_meta_path_with_nested_record_pathz?TestJSONNormalize.test_nested_meta_path_with_nested_record_pathL  s    #;(<=	
 L;[1_x!|3!tfqj0*^a/=/A2EE
 W%
fh/r$   c                     ddddddddgdg}d	}t        j                  t        |
      5  t        |dddg       d d d        t        |dddgd      }dD ]  }||v rJ  y # 1 sw Y   (xY w)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_conflictz)TestJSONNormalize.test_meta_name_conflict`  s     '7(9	
 Q]]:S1 	>4uen=	>  fE5>vV7 	!C&= =	!	> 	>s   A%%A.c                 t    ddddddddgdg}d	d
g}t        |d|d      }|d	d
gk(  sJ dD ]  }||v rJ  y )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_modifiedz2TestJSONNormalize.test_meta_parameter_not_modifiedu  ss     '7(9	
 %.f7O5%.(((7 	!C&= =	!r$   c                    t        |d   d      }t        |d   d         }t        j                  ||       t        |ddd      }g }|D ]  }|j	                  |d           t        |      }|j                  d       }t        j                  dd	g      j                  d
dg      |d<   t        j                  ||       y )Nr   r3   r6   county_)r   r   c                     d| z   S )Nr   r#   )xs    r%   <lambda>z6TestJSONNormalize.test_record_prefix.<locals>.<lambda>  s
    Y] r$   r   r2   r   rw   rv   )	r   r   r   r   r   renamer   r   r   r   s        r%   test_record_prefixz$TestJSONNormalize.test_record_prefix  s    
1z:Z]:67
fh/
	
  	-COOC
O,	-X&??+B?CHHi%89@@!QH
fh/r$   c                     dj                  d      }dj                  d      ddgdddgdd	d
gi}t        |      }t        t        j                  |            }t        j                  ||       y )NsK   [{"Ünicøde":0,"sub":{"A":1, "B":2}},{"Ünicøde":1,"sub":{"A":3, "B":4}}]utf8s	   Ünicøder   ru   zsub.Arw   zsub.Brv   ry   )decoder   r   jsonloadsr   r   )r   testjsontestdatar   r   s        r%   test_non_ascii_keyz$TestJSONNormalize.test_non_ascii_key  st    A
&. 	 %++F3aVaVaV

 X&

8 45
fh/r$   c                    t        |      }t        j                  t        j                  t        j                  t        j                  t        j                  dd dddddg}t        |      }t	        j
                  ||       y )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_fieldz$TestJSONNormalize.test_missing_field  sp     34 #%66%'VV%'VV)+ #/%1%+).
  W%
fh/r$   zmax_level,expectedrc   rd   re   rf   ra   rb   rl   )ri   rj   rn   rp   )ri   zUserField.IdzUserField.Namern   rp   c                     ddiddddddddddgdd	id
dddddgdg}t        |dgdgdgg|      }t        ||j                  j                        }t	        j
                  ||       y )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_pathz2TestJSONNormalize.test_max_level_with_records_path  s    Z %i0 &1,3Y%G
 &1,3Y%G	 s'7(9

*  !
-'+	
  Xv~~7L7LM
V,r$   c                 v    t        dddiig      }t        ddddiigid      }t        j                  ||       y )Nr   r   ru   dummy)r   r   r   )r   df1df2s      r%   !test_nested_flattening_consistentz3TestJSONNormalize.test_nested_flattening_consistent
  sE    sS!Ho./gsAh'897C 	c3'r$   c                     t        d|ddddigdgdg      }t        ddidg	      }t        j                  ||       y )
NTexasr   r2   irv   r4   r   r   )index)r   r   r   r  )r   nulls_fixturer   r   s       r%   test_nonetype_record_pathz+TestJSONNormalize.test_nonetype_record_path  sR      !=9#sAhZ8  
 c1XaS1
)r$   value)falsetruez{}1z"text"c                     t        j                  |      }d|d}d}| d| d| d}t        j                  t        |      5  t        |g|g       d d d        y # 1 sw Y   y xY w)	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_errorsz2TestJSONNormalize.test_non_list_record_path_errors  sz     zz%(&=
	l.|nJyk R$ $ 	 ]]9C0 	BJ<i[A	B 	B 	Bs   AA%c                     d}t        t        j                  |      dgdg      }t        dgdgt	        j
                  dgt              d	      }t        j                  ||       y )
Nz,[{"id": 99, "data": [{"one": 1, "two": 2}]}]r   idr   ru   rv   c   )dtype)onetwor   )	r   r   r   r   r   r   objectr   r   r   s       r%   test_meta_non_iterablez(TestJSONNormalize.test_meta_non_iterable,  sY    A

4 0vhdVTC288RD+GH
 	fh/r$   c                 ~    fd}t         |             }t        d   d         }t        j                  ||       y )Nc               3   2   K    d   d   E d {    y 7 w)Nr   r3   r#   )r<   s   r%   generator_dataz8TestJSONNormalize.test_generator.<locals>.generator_data9  s     !!}Z000s   r   r3   r   )r   r<   r)  r   r   s    `   r%   test_generatorz TestJSONNormalize.test_generator6  s:    	1   01Z]:67
fh/r$   c                     dddiddd}t        |d      }t        g d	gg d
      }t        j                  ||       y )Nr   l3r   )a1l2ry   )_idggr   r   )ry   r   r   )r0  _id_a1	_id_l2_l3r   r   r   s       r%   'test_top_column_with_leading_underscorez9TestJSONNormalize.test_top_column_with_leading_underscoreA  s@     q	2!<#.j\3PQ
fh/r$   )__name__
__module____qualname__r   r   r   r   r   markparametrizeNotImplementedErrorr   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r&  r*  r3  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                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zej                  j!                  ddddddddgfdddidddddddidgfddddddddgfg      d        Zd Zd Zy)TestNestedToRecordc                 @    ddddddg}t        |      }|}||k(  sJ y )Nru   rv   )flat1flat2rw   ry   )flat3r>  r   r   s       r%   test_flat_stays_flatz'TestNestedToRecord.test_flat_stays_flatK  s3    a(A*BC!$'!!!r$   c                 D    ddddd}t        |      }dddd}||k(  sJ y )Nru   rv   rx   d)r=  dict1)dict1.cdict1.dr=  r   r   s       r%   test_one_level_deep_flattensz/TestNestedToRecord.test_one_level_deep_flattensQ  s5    11%56!$' Q;!!!r$   c                 X    dddddddddd}t        |      }ddddddd}||k(  sJ y )Nru   rv   rB  )erC  )r=  rD  nested)rE  rF  r=  znested.dz
nested.e.cz
nested.e.dr   r   s       r%   test_nested_flattensz'TestNestedToRecord.test_nested_flattensY  sV    1%"#!,15
 "$'
 !!!r$   c                     d}t        j                  t        |      5  t        |ddd       d d d        y # 1 sw Y   y xY w)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_errorsz-TestNestedToRecord.test_json_normalize_errorsl  sE    : 	 ]]83/ 	%'		 	 	s	   7A c                     t        |ddd      }g ddddd	d
t        j                  gg}g d}t        ||      }t	        j
                  ||       y )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_metaz$TestNestedToRecord.test_missing_meta}  s]      !{PX
 D<ubffE
 GWg6
fh/r$   c                    dd ddiddigd}t        |dddd	ggd
      }ddt        j                  gddt        j                  gg}g d}t        ||      j	                  dt
        i      }t        j                  ||       t        j                  t        d      5  t        |dddd	ggd       d d d        y # 1 sw Y   y xY w)Nr   r   ru   rv   )r   nested_metar  r  r   rW  leafr   )r   r   r   )r   r   nested_meta.leafr   rY  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_metaz+TestNestedToRecord.test_missing_nested_meta  s     duaj5RS*=UV=&12	
 ubff%5"&&'9:5Wg6==(
 	fh/ ]]8+=> 	#}f56		 	 	s   B::Cc                     d}t        j                  t        |      5  t        |ddgdd       d d d        y # 1 sw Y   y xY w)NrM  r   rX   r   r   rN  r   rO  rQ  s      r%   5test_missing_meta_multilevel_record_path_errors_raisezHTestNestedToRecord.test_missing_meta_multilevel_record_path_errors_raise  sJ    
: 	 ]]83/ 	%2H=		 	 	s	   9Ac                     t        |ddgdd      }ddgdt        j                  gg}d	dg}t        ||
      }t	        j
                  ||       y )NrX   r   r   r   r   rV   rL   r^   rU   r   r  rT  s         r%   6test_missing_meta_multilevel_record_path_errors_ignorezITestNestedToRecord.test_missing_meta_multilevel_record_path_errors_ignore  sd      !.9	
 g&266"
 'Wg6
fh/r$   c                 h    d ddddddddd	ddg}t        |      }d ddd
dd	dddg}||k(  sJ y )NSmith	AppleseedrE   rH   r>   r?   r@   rC   rD   )r4   r   r   )r   r   r   r   r   r   s       r%   test_donot_drop_nonevaluesz-TestNestedToRecord.test_donot_drop_nonevalues  ss     G+*VW'3\R)/eD
 "$' %,)4 &,).#/%1	
 !!!r$   c           
      `    d ddd d d dddddiid}t        |      }d d d d dddd	}||k(  sJ y )
Nr   r6       gH@   @   ;@)r   regionr   yzr   z	town.infor   location)r   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_levelz7TestNestedToRecord.test_nonetype_top_level_bottom_level  sr     ""&&*!3!4!3&	
" "$')-377;2D2E2D
 !!!r$   c           	      d    d d d d d dddddddd}t        |      }d d d d d dddd	}||k(  sJ y )
Nre  rf  rg  )rh  r   ri  rj  rk  )r   r6   )r   r   rl  )r   zlocation.idzlocation.country.idrn  ro  rp  rq  rr  r   r   s       r%   test_nonetype_multiple_levelsz0TestNestedToRecord.test_nonetype_multiple_levels  sr     "&*!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   ru   )rv  rw  zLookup.UserFieldrx  c                 ,    t        ||      }||k(  sJ y )Nr  r   )r   r  r   rq   outputs        r%   test_with_max_levelz&TestNestedToRecord.test_with_max_level%  s     V "";yQ!!!r$   c           	      x    d}dddddddd	d
ddidddidiig}dddd	d
ddg}t        ||      }||k(  sJ y )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.Namerz  r   )r   r  
input_datar   r{  s        r%   test_with_large_max_levelz,TestNestedToRecord.test_with_large_max_levelS  s    	 .3 K$(3,70;39;2G/&+"	'(

. 2709:EALHSOZ	
 "*	B!!!r$   c           	         ddddidddddiddd	d
didd}t        |      }g d|_        t        |      }t        g dg ddt        j
                  t        j
                  gt        j
                  dt        j
                  gt        j
                  t        j
                  dgd      }t        j                  ||       y )Nru   Foork   )r   r   elementsrv   Barrl   rw   Bazrx   )r   ru   rv   r   )r  r  r  g      ?g       @g      @)r   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_indexz-TestNestedToRecord.test_series_non_zero_indexx  s     S!H=S!H=S!H=

 4L"-"BFFBFF3!vvsBFF3!vvrvvs3
 	fh/r$   )r4  r5  r6  r@  rG  rK  rR  rU  r[  r]  r_  rc  rs  ru  r   r7  r8  r|  r  r  r#   r$   r%   r;  r;  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$   r;  )r   numpyr   r   pandasr   r   r   r   pandas._testing_testingr   pandas.io.json._normalizer   fixturer&   r<   rJ   r_   rq   rs   r;  r#   r$   r%   <module>r     s         6 # #L  0    <   {0 {0|A0 A0r$   