ó
    ¬œ‘h<C  ã                  ó<  • S SK Jr  S SKJrJr  S SKrS SKJrJrJ	r	  S SK
rS SKJr  S SKrS SKJr  \(       a  S SKJr  S SKJrJr  SS	 jr    S       SS
 jjr          SS jrSS jr S     SS jjr       S                 SS jjrg)é    )Úannotations)ÚabcÚdefaultdictN)ÚTYPE_CHECKINGÚAnyÚDefaultDict©Úconvert_json_to_lines)Ú	DataFrame)ÚIterable)ÚIgnoreRaiseÚScalarc                óJ   • U S   S:X  d  U S   S:X  a  U $ U SS n [        U 5      $ )zB
Helper function that converts JSON lists to line delimited JSON.
r   Ú[éÿÿÿÿÚ]é   r	   )Úss    Ú]C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\pandas/io/json/_normalize.pyÚconvert_to_line_delimitsr       s4   € ð ˆQ‰4�3‹;˜1˜R™5 C›<ØˆØ	ˆ!ˆBˆ€Aä  Ó#Ð#ó    c                ó   • Sn[        U [        5      (       a  U /n Sn/ nU  HÝ  n[        R                  " U5      nUR	                  5        HŸ  u  pš[        U	[
        5      (       d  [        U	5      n	US:X  a  U	nOX-   U	-   n[        U
[        5      (       a  Ub"  X4:¼  a  US:w  a  UR                  U	5      n
X¨U'   Mo  UR                  U	5      n
UR                  [        X«X#S-   U5      5        M¡     UR                  U5        Mß     U(       a  US   $ U$ )a0  
A simplified json_normalize

Converts a nested dict into a flat dict ("record"), unlike json_normalize,
it does not attempt to extract a subset of the data.

Parameters
----------
ds : dict or list of dicts
prefix: the prefix, optional, default: ""
sep : str, default '.'
    Nested records will generate names separated by sep,
    e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar
level: int, optional, default: 0
    The number of levels in the json string.

max_level: int, optional, default: None
    The max depth to normalize.

Returns
-------
d - dict or list of dicts, matching `ds`

Examples
--------
>>> nested_to_record(
...     dict(flat1=1, dict1=dict(c=1, d=2), nested=dict(e=dict(c=1, d=2), d=2))
... )
{'flat1': 1, 'dict1.c': 1, 'dict1.d': 2, 'nested.e.c': 1, 'nested.e.d': 2, 'nested.d': 2}
FTr   r   )
Ú
isinstanceÚdictÚcopyÚdeepcopyÚitemsÚstrÚpopÚupdateÚnested_to_recordÚappend)ÚdsÚprefixÚsepÚlevelÚ	max_levelÚ	singletonÚnew_dsÚdÚnew_dÚkÚvÚnewkeys               r   r!   r!   -   s  € ðX €IÜ�"”d×ÑØˆTˆØˆ	Ø€FÛˆÜ—’˜aÓ ˆØ—G‘G–I‰DˆAä˜a¤×%Ñ%Ü˜“F�Ø˜‹zØ‘à™¨Ñ)�ô ˜a¤×&Ñ&ØÑ%¨%Ó*<à˜A“:ØŸ	™	 !›�AØ$%˜&‘MÙà—	‘	˜!“ˆAØ�L‰LÔ)¨!°SÀ!¹)ÀYÓOÖPñ- ð. 	�‰�eÖñ3 ö6 Ø�a‰yÐØ€Mr   c                óÆ   • [        U [        5      (       aG  U R                  5        H1  u  pEU U U 3nU(       d  UR                  U5      n[	        UUUUS9  M3     U$ XU'   U$ )a÷  
Main recursive function
Designed for the most basic use case of pd.json_normalize(data)
intended as a performance improvement, see #15621

Parameters
----------
data : Any
    Type dependent on types contained within nested Json
key_string : str
    New key (with separator(s) in) for data
normalized_dict : dict
    The new normalized/flattened Json dict
separator : str, default '.'
    Nested records will generate names separated by sep,
    e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar
©ÚdataÚ
key_stringÚnormalized_dictÚ	separator)r   r   r   ÚremoveprefixÚ_normalise_json)r1   r2   r3   r4   ÚkeyÚvalueÚnew_keys          r   r6   r6   ~   st   € ô. �$œ×ÑØŸ*™*ž,‰JˆCØ#˜ Y K°¨uÐ5ˆGæØ!×.Ñ.¨yÓ9�äØØ"Ø /Ø#ô	ñ 'ð Ðð '+˜
Ñ#ØÐr   c           
     ó(  • U R                  5        VVs0 s H  u  p#[        U[        5      (       a  M  X#_M      nnn[        U R                  5        VVs0 s H  u  p#[        U[        5      (       d  M  X#_M      snnS0 US9n0 UEUE$ s  snnf s  snnf )aK  
Order the top level keys and then recursively go to depth

Parameters
----------
data : dict or list of dicts
separator : str, default '.'
    Nested records will generate names separated by sep,
    e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar

Returns
-------
dict or list of dicts, matching `normalised_json_object`
Ú r0   )r   r   r   r6   )r1   r4   r,   r-   Ú	top_dict_Únested_dict_s         r   Ú_normalise_json_orderedr>   §   s‚   € ð #'§*¡*¤,ÔJ¢,™$˜!´jÀÄD×6I“�’¡,€IÑJÜ"Ø#Ÿz™zœ|ÔCš|‘t�q¬z¸!¼T×/B‹dˆaŠd™|ÒCØØØñ	€Lð )ˆiÐ(˜<Ð(Ð(ùó KùãCs   ”B³BÁB
Á3B
c                ó´   • 0 n[        U [        5      (       a  [        XS9nU$ [        U [        5      (       a  U  Vs/ s H  n[	        X1S9PM     nnU$ U$ s  snf )a0  
A optimized basic json_normalize

Converts a nested dict into a flat dict ("record"), unlike
json_normalize and nested_to_record it doesn't do anything clever.
But for the most basic use cases it enhances performance.
E.g. pd.json_normalize(data)

Parameters
----------
ds : dict or list of dicts
sep : str, default '.'
    Nested records will generate names separated by sep,
    e.g., for sep='.', { 'foo' : { 'bar' : 0 } } -> foo.bar

Returns
-------
frame : DataFrame
d - dict or list of dicts, matching `normalised_json_object`

Examples
--------
>>> _simple_json_normalize(
...     {
...         "flat1": 1,
...         "dict1": {"c": 1, "d": 2},
...         "nested": {"e": {"c": 1, "d": 2}, "d": 2},
...     }
... )
{'flat1': 1, 'dict1.c': 1, 'dict1.d': 2, 'nested.e.c': 1, 'nested.e.d': 2, 'nested.d': 2}

)r1   r4   ©r%   )r   r   r>   ÚlistÚ_simple_json_normalize)r#   r%   Únormalised_json_objectÚrowÚnormalised_json_lists        r   rB   rB   À   si   € ðV  Ðä�"”d×ÑÜ!8¸bÑ!PÐð "Ð!ô 
�Bœ×	Ñ	ÙPRÓSÒPRÈÔ 6°sÔ DÑPRÐÐSØ#Ð#Ø!Ð!ùò  Ts   ¼Ac                ó  ^^^^^^^^^^^^•  S       SU4S jjjmSU4S jjm[        U [        5      (       a  U (       d
  [        5       $ [        U [        5      (       a  U /n OF[        U [        R
                  5      (       a!  [        U [        5      (       d  [        U 5      n O[        eUc  Uc  Uc  Tc  Tc  [        [        U TS95      $ Uc-  [        S U  5       5      (       a  [        U TTS9n [        U 5      $ [        U[        5      (       d  U/nUc  / nO[        U[        5      (       d  U/nU Vs/ s H  n[        U[        5      (       a  UOU/PM     snm/ m/ m[        [        5      mT V	s/ s H  n	TR                  U	5      PM     sn	mSSUUUUUUUUUU4
S jjjmT" X0 SS9  [        T5      n
Tb  U
R                  U4S	 jS
9n
TR                  5        H—  u  p¼Ub  X;-   nXº;   a  [        SU S35      e[         R"                  " U[$        S9nUR&                  S:”  a;  [         R(                  " [+        U5      4[$        S9n[-        U5       H	  u  pìXÍU'   M     UR/                  T5      X«'   M™     U
$ s  snf s  sn	f )aØ  
Normalize semi-structured JSON data into a flat table.

Parameters
----------
data : dict or list of dicts
    Unserialized JSON objects.
record_path : str or list of str, default None
    Path in each object to list of records. If not passed, data will be
    assumed to be an array of records.
meta : list of paths (str or list of str), default None
    Fields to use as metadata for each record in resulting table.
meta_prefix : str, default None
    If True, prefix records with dotted (?) path, e.g. foo.bar.field if
    meta is ['foo', 'bar'].
record_prefix : str, default None
    If True, prefix records with dotted (?) path, e.g. foo.bar.field if
    path to records is ['foo', 'bar'].
errors : {'raise', 'ignore'}, default 'raise'
    Configures error handling.

    * 'ignore' : will ignore KeyError if keys listed in meta are not
      always present.
    * 'raise' : will raise KeyError if keys listed in meta are not
      always present.
sep : str, default '.'
    Nested records will generate names separated by sep.
    e.g., for sep='.', {'foo': {'bar': 0}} -> foo.bar.
max_level : int, default None
    Max number of levels(depth of dict) to normalize.
    if None, normalizes all levels.

Returns
-------
frame : DataFrame
Normalize semi-structured JSON data into a flat table.

Examples
--------
>>> data = [
...     {"id": 1, "name": {"first": "Coleen", "last": "Volk"}},
...     {"name": {"given": "Mark", "family": "Regner"}},
...     {"id": 2, "name": "Faye Raker"},
... ]
>>> pd.json_normalize(data)
    id name.first name.last name.given name.family        name
0  1.0     Coleen      Volk        NaN         NaN         NaN
1  NaN        NaN       NaN       Mark      Regner         NaN
2  2.0        NaN       NaN        NaN         NaN  Faye Raker

>>> data = [
...     {
...         "id": 1,
...         "name": "Cole Volk",
...         "fitness": {"height": 130, "weight": 60},
...     },
...     {"name": "Mark Reg", "fitness": {"height": 130, "weight": 60}},
...     {
...         "id": 2,
...         "name": "Faye Raker",
...         "fitness": {"height": 130, "weight": 60},
...     },
... ]
>>> pd.json_normalize(data, max_level=0)
    id        name                        fitness
0  1.0   Cole Volk  {'height': 130, 'weight': 60}
1  NaN    Mark Reg  {'height': 130, 'weight': 60}
2  2.0  Faye Raker  {'height': 130, 'weight': 60}

Normalizes nested data up to level 1.

>>> data = [
...     {
...         "id": 1,
...         "name": "Cole Volk",
...         "fitness": {"height": 130, "weight": 60},
...     },
...     {"name": "Mark Reg", "fitness": {"height": 130, "weight": 60}},
...     {
...         "id": 2,
...         "name": "Faye Raker",
...         "fitness": {"height": 130, "weight": 60},
...     },
... ]
>>> pd.json_normalize(data, max_level=1)
    id        name  fitness.height  fitness.weight
0  1.0   Cole Volk             130              60
1  NaN    Mark Reg             130              60
2  2.0  Faye Raker             130              60

>>> data = [
...     {
...         "state": "Florida",
...         "shortname": "FL",
...         "info": {"governor": "Rick Scott"},
...         "counties": [
...             {"name": "Dade", "population": 12345},
...             {"name": "Broward", "population": 40000},
...             {"name": "Palm Beach", "population": 60000},
...         ],
...     },
...     {
...         "state": "Ohio",
...         "shortname": "OH",
...         "info": {"governor": "John Kasich"},
...         "counties": [
...             {"name": "Summit", "population": 1234},
...             {"name": "Cuyahoga", "population": 1337},
...         ],
...     },
... ]
>>> result = pd.json_normalize(
...     data, "counties", ["state", "shortname", ["info", "governor"]]
... )
>>> result
         name  population    state shortname info.governor
0        Dade       12345   Florida    FL    Rick Scott
1     Broward       40000   Florida    FL    Rick Scott
2  Palm Beach       60000   Florida    FL    Rick Scott
3      Summit        1234   Ohio       OH    John Kasich
4    Cuyahoga        1337   Ohio       OH    John Kasich

>>> data = {"A": [1, 2]}
>>> pd.json_normalize(data, "A", record_prefix="Prefix.")
    Prefix.0
0          1
1          2

Returns normalized data with columns prefixed with the given string.
c                ó*  >• U n [        U[        5      (       a  U H  nUc  [        U5      eX4   nM     U$ X1   n U$ ! [         aJ  nU(       a  [        SU S35      UeTS:X  a  [        R                  s SnA$ [        SU SU S35      UeSnAff = f)zInternal function to pull fieldNzKey zS not found. If specifying a record_path, all elements of data should have the path.Úignorez) not found. To replace missing values of z% with np.nan, pass in errors='ignore')r   rA   ÚKeyErrorÚnpÚnan)ÚjsÚspecÚextract_recordÚresultÚfieldÚeÚerrorss         €r   Ú_pull_fieldÚ#json_normalize.<locals>._pull_field‚  sÉ   ø€ ð ˆð	Ü˜$¤×%Ñ%Û!�EØ‘~Ü& u›oÐ-Ø#™]’Fñ "ð( ˆð  ™‘ð ˆøô ó 	ÞÜØ˜1˜#ð 1ð 2óð ðð ˜Ó!Ü—v‘v•äØ˜1˜#ÐFÀqÀcð J6ð 7óð ðûð	ús%   …0> ·> ¾
BÁ,BÁ4BÁ:BÂBc                ó¦   >• T" XSS9n[        U[        5      (       d3  [        R                  " U5      (       a  / nU$ [	        U  SU SU S35      eU$ )z–
Internal function to pull field for records, and similar to
_pull_field, but require to return list. And will raise error
if has non iterable value.
T)rN   z has non list value z
 for path z. Must be list or null.)r   rA   ÚpdÚisnullÚ	TypeError)rL   rM   rO   rS   s      €r   Ú_pull_recordsÚ%json_normalize.<locals>._pull_recordsŸ  sn   ø€ ñ ˜R°dÑ;ˆô ˜&¤$×'Ñ'Ü�yŠy˜× Ñ Ø�ð ˆô	  Ø�dÐ.¨v¨h°jÀÀð G,ð ,óð ð ˆr   r@   c              3  óˆ   #   • U  H3  oR                  5        Vs/ s H  n[        U[        5      PM     snv •  M5     g s  snf 7f©N)Úvaluesr   r   )Ú.0ÚyÚxs      r   Ú	<genexpr>Ú!json_normalize.<locals>.<genexpr>Ì  s-   é € ÐGÂ$¸Q¯X©X¬ZÓ8ªZ¨”
˜1œdÖ#©ZÖ8Â$ùÒ8ùs   ‚A™=³A©r%   r'   r   c           
     ó|  >
• [        U [        5      (       a  U /n [        U5      S:”  aS  U  HL  n[        T
T5       H&  u  pVUS-   [        U5      :X  d  M  T" XES   5      X&'   M(     T" XAS      USS  X#S-   S9  MN     g U  H¶  nT" XAS   5      nU Vs/ s H%  n[        U[        5      (       a  [	        UTTS9OUPM'     nnTR                  [        U5      5        [        T
T5       H;  u  pVUS-   [        U5      :”  a  X&   n	OT" XEUS  5      n	TU   R                  U	5        M=     TR                  U5        M¸     g s  snf )Nr   r   r   ©r&   rc   )r   r   ÚlenÚzipr!   r"   Úextend)r1   ÚpathÚ	seen_metar&   ÚobjÚvalr7   ÚrecsÚrÚmeta_valÚ_metarS   rY   Ú_recursive_extractÚlengthsr'   Ú	meta_keysÚ	meta_valsÚrecordsr%   s             €€€€€€€€€€r   rq   Ú*json_normalize.<locals>._recursive_extractç  sO  ø€ Ü�dœD×!Ñ!Ø�6ˆDÜˆt‹9�q‹=Û�Ü # E¨9Ö 5‘H�CØ˜q‘y¤C¨£HÕ,Ù)4°S¸b¹'Ó)B˜	›ñ !6ñ # 3¨A¡w¡<°°a°b°¸9ÐTUÉIÔVò ó �Ù$ S¨q©'Ó2�ñ
 "ó	ò "˜ô " !¤T×*Ñ*ô % Q¨C¸9ÒEàòñ "ð	 ð ð —‘œs 4›yÔ)Ü # E¨9Ö 5‘H�CØ˜q‘y¤3 s£8Ó+Ø#,¡>™á#.¨s¸¸°KÓ#@˜Ø˜c‘N×)Ñ)¨(Ö3ñ !6ð —‘˜tÖ$ò# ùòs   Â,D9re   c                ó   >• T U  3$ r\   © )r`   Úrecord_prefixs    €r   Ú<lambda>Ú json_normalize.<locals>.<lambda>
  s   ø€ °M°?À1À#Ñ1Fr   )ÚcolumnszConflicting metadata name z, need distinguishing prefix )Údtyper   )F)rL   údict[str, Any]rM   ú
list | strrN   ÚboolÚreturnzScalar | Iterable)rL   r~   rM   r   r�   rA   )r   )r&   Úintr�   ÚNone)r   rA   r   r   r   r   r   ÚNotImplementedErrorrB   Úanyr!   r   ÚjoinÚrenamer   Ú
ValueErrorrJ   ÚarrayÚobjectÚndimÚemptyrf   Ú	enumerateÚrepeat)r1   Úrecord_pathÚmetaÚmeta_prefixry   rR   r%   r'   Úmrl   rO   r,   r-   r]   Úirp   rS   rY   rq   rr   rs   rt   ru   s       ````       @@@@@@@@r   Újson_normalizer”   õ   sq  ÿû€ ð\ FKðØðØ",ðØ>Bðà	÷ð ÷:ô( �$œ×Ñ¦dÜ‹{ÐÜ	�Dœ$×	Ñ	àˆv‰Ü	�Dœ#Ÿ,™,×	'Ñ	'´
¸4Ä×0EÑ0Eô �D‹z‰ä!Ð!ð 	ÑØ‰LØÑØÑ!ØÑäÔ/°¸#Ñ>Ó?Ð?àÑÜÑGÁ$ÓG×GÑGô $ D¨c¸YÑGˆDÜ˜‹ÐÜ˜¤T×*Ñ*Ø"�mˆà�|Ø‰Ü˜œd×#Ñ#Øˆvˆá8<Ó=º°1”*˜Q¤×%Ñ%‰Q¨A¨3Ò.¹Ñ=€Eð €GØ€Gä(¬Ó.€IÙ*/Ó0ª% 3�—‘˜#–©%Ñ0€I÷%÷ %ò %ñ< �t¨"°AÒ6ä�wÓ€FàÑ Ø—‘Ô'F�ÐGˆð —‘Ö!‰ˆØÑ"Ø‘ˆAà‹;ÜØ,¨Q¨CÐ/LÐMóð ô
 —’˜!¤6Ñ*ˆà�;‰;˜‹?ä—X’Xœs 1›v˜i¬vÑ6ˆFÜ! !ž‘�Ø�q“	ñ %ð —M‘M 'Ó*ˆ‹	ñ% "ð& €MùòE >ùò 1s   Ä8$I=Å6J)r   r   r�   r   )r;   Ú.r   N)r$   r   r%   r   r&   r‚   r'   ú
int | None)
r1   r   r2   r   r3   r~   r4   r   r�   r~   )r1   r~   r4   r   r�   r~   )r•   )r#   údict | list[dict]r%   r   r�   zdict | list[dict] | Any)NNNNÚraiser•   N)r1   r—   r�   zstr | list | Noner�   z"str | list[str | list[str]] | Noner‘   ú
str | Nonery   r™   rR   r   r%   r   r'   r–   r�   r   )Ú
__future__r   Úcollectionsr   r   r   Útypingr   r   r   ÚnumpyrJ   Úpandas._libs.writersr
   ÚpandasrV   r   Úcollections.abcr   Úpandas._typingr   r   r   r!   r6   r>   rB   r”   rx   r   r   Ú<module>r¢      sU  ðõ #÷ó ÷ñ ó å 6ã Ý æÝ(÷ô
$ð ØØØ ðNàðNð 
ðNð ð	Nð
 õNðb&Ø
ð&àð&ð $ð&ð ð	&ð
 ô&ôR)ð6 ð2"Øð2"à	ð2"ð õ2"ðn &*Ø/3Ø"Ø $Ø!ØØ ðkØ
ðkà"ðkð -ðkð ð	kð
 ðkð ðkð 
ðkð ðkð ökr   