o
     JAf>                  
   @   s4  	 d dl Z zd dlmZ W n ey   dZY nw zd dlmZ W n ey,   dZY nw zd dlmZ W n ey@   dZY nw e 	dZ
e 	dZe 	dZdd	d
dddddZedD ]Zeeede q^edZdd ZepweZdd ZepeZG dd deZeeeeeeeee ej!f
ddZ"dS )    N)encode_basestring_ascii)encode_basestring)make_encoderz[\x00-\x1f\\"\b\f\n\r\t]z([\\"]|[^\ -~])s   [-]z\\z\"z\bz\fz\nz\rz\t)\"
	    	\u{0:04x}infc                 C      	 dd }dt ||  d S )Nc                 S   s   t | d S )Nr   )
ESCAPE_DCTgroup)match r   #/usr/lib/python3.10/json/encoder.pyreplace(   s   z%py_encode_basestring.<locals>.replacer   )ESCAPEsubsr   r   r   r   py_encode_basestring$   s   r   c                 C   r   )Nc                 S   sv   |  d}zt| W S  ty:   t|}|dk r d| Y S |d8 }d|d? d@ B }d|d@ B }d|| Y S w )	Nr   i   r   i   
   i  i   z\u{0:04x}\u{1:04x})r   r   KeyErrorordformat)r   r   ns1s2r   r   r   r   4   s   

z+py_encode_basestring_ascii.<locals>.replacer   )ESCAPE_ASCIIr   r   r   r   r   py_encode_basestring_ascii0   s   r#   c                	   @   sL   e Zd Z	 dZdZdddddddddddZd	d
 Zdd ZdddZdS )JSONEncoderz, z: FTN)skipkeysensure_asciicheck_circular	allow_nan	sort_keysindent
separatorsdefaultc          	      C   s`   	 || _ || _|| _|| _|| _|| _|d ur|\| _| _n|d ur%d| _|d ur.|| _d S d S )N,)	r%   r&   r'   r(   r)   r*   item_separatorkey_separatorr,   )	selfr%   r&   r'   r(   r)   r*   r+   r,   r   r   r   __init__h   s   (
zJSONEncoder.__init__c                 C   s   	 t d|jj d)NzObject of type z is not JSON serializable)	TypeError	__class____name__)r0   or   r   r   r,      s   zJSONEncoder.defaultc                 C   sP   	 t |tr| jrt|S t|S | j|dd}t |ttfs#t|}d|S )NT)	_one_shot )	
isinstancestrr&   r   r   
iterencodelisttuplejoin)r0   r5   chunksr   r   r   encode   s   

zJSONEncoder.encodec                 C   s   	 | j ri }nd }| jrt}nt}| jtjtt fdd}|r<td ur<| j	d u r<t|| j
|| j	| j| j| j| j| j	}nt|| j
|| j	|| j| j| j| j|
}||dS )Nc                 S   sJ   | | krd}n| |krd}n| |krd}n|| S |s#t dt|  |S )NZNaNZInfinityz	-Infinityz2Out of range float values are not JSON compliant: )
ValueErrorrepr)r5   r(   Z_reprZ_infZ_neginftextr   r   r   floatstr   s   z(JSONEncoder.iterencode.<locals>.floatstrr   )r'   r&   r   r   r(   float__repr__INFINITYc_make_encoderr*   r,   r/   r.   r)   r%   _make_iterencode)r0   r5   r6   markers_encoderrC   _iterencoder   r   r   r:      s.   	



zJSONEncoder.iterencode)F)	r4   
__module____qualname__r.   r/   r1   r,   r?   r:   r   r   r   r   r$   I   s    8r$   c                    s   d ursd  	fdd	 	
fdd 	fddS )N c           	      3   s   | sdV  d S d ur| }|v r d| |< d}d ur5|d7 }d|  }| }||7 }nd }}d}| D ]s}|rDd}n|}|rS|| V  q=|d u r]|d V  q=|du rg|d	 V  q=|du rq|d
 V  q=|r~|| V  q=|
r|| V  q=|V  |fr||}n|	r||}n||}|E d H  q=|d ur|d8 }d|  V  dV  d ur̈|= d S d S )Nz[]Circular reference detected[   r	   TFnulltruefalse]r   )	Zlst_current_indent_levelmarkeridbufnewline_indent	separatorfirstvaluer>   )r@   rJ   	_floatstr_indent_intstr_item_separatorrK   _iterencode_dict_iterencode_listdictrD   idintr8   r;   rI   r9   r<   r   r   rb     s`   






z*_make_iterencode.<locals>._iterencode_listc           
      3   s(   | sdV  d S d ur| }|v r d| |< dV  d ur5|d7 }d|  }| }|V  nd }}d}rDt |  }n|  }|D ]\}}|rTn5|r^|}n+|du red}n$|du rld	}n|d u rsd
}n|r}|}n
rqJtd|jj |rd}n|V  |V  	V  |r|V  qJ|d u rd
V  qJ|du rdV  qJ|du rd	V  qJ|rǈ|V  qJ|r҈|V  qJ|fr߈||}	n|r||}	n||}	|	E d H  qJ|d ur|d8 }d|  V  dV  d ur|= d S d S )Nz{}rO   {rQ   r	   TrS   FrT   rR   z0keys must be str, int, float, bool or None, not })sorteditemsr2   r3   r4   )
ZdctrV   rW   rY   r.   r[   ri   keyr\   r>   )r@   rJ   r]   r^   r_   r`   rK   ra   rb   _key_separator	_skipkeys
_sort_keysrc   rD   rd   re   r8   r;   rI   r9   r<   r   r   ra   M  s   













z*_make_iterencode.<locals>._iterencode_dictc                 3   s   | r| V  d S | d u rdV  d S | du rdV  d S | du r(dV  d S | r4| V  d S | 	r@| V  d S | frQ| |E d H  d S | r`| |E d H  d S d urt
| }|v rp d| |< | } | |E d H  d ur|= d S d S )NrR   TrS   FrT   rO   r   )r5   rV   rW   )r@   _defaultrJ   r]   r_   rK   ra   rb   rc   rD   rd   re   r8   r;   rI   r9   r<   r   r   rK     s6   







z%_make_iterencode.<locals>._iterencoder   )rI   rn   rJ   r^   r]   rk   r`   rm   rl   r6   r@   rc   rD   rd   re   r8   r;   r9   r<   r_   r   )r@   rn   rJ   r]   r^   r_   r`   rK   ra   rb   rk   rl   rm   rc   rD   rd   re   r8   r;   rI   r9   r<   r   rH     s   .48,PrH   )#reZ_jsonr   Zc_encode_basestring_asciiImportErrorr   Zc_encode_basestringr   rG   compiler   r"   ZHAS_UTF8r   rangei
setdefaultchrr   rD   rF   r   r#   objectr$   r@   rc   rd   re   r8   r;   r9   r<   rE   rH   r   r   r   r   <module>   sb    


		 >