
    hc                         S SK r S SKJr  S SKJr  S SKrS SKrSSKJrJ	r	J
r
JrJrJr  SSKJrJrJr  SSKJr  SSKJr  S	S
KJ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!S r"\ RF                  RI                  S/ SQS4SSS.S4SS  S!4/5      S" 5       r%\ RF                  RI                  S/ S#Q5      S$ 5       r&\ RF                  RI                  S%/ S&Q5      S' 5       r'S( r(S) r)S* r*S+ r+g),    N)StringIO)Path   )	read_json
write_json
read_jsonlwrite_jsonlread_gzip_jsonlwrite_gzip_jsonl)write_gzip_json
json_dumpsis_json_serializable
json_loads)force_string   )make_tempdirc                  4    SSSS.n [        U SS9nUS:X  d   eg )Nr      r   )acbT)	sort_keysz{"a":1,"b":2,"c":3})r   )dataresults     S/home/james-whalen/.local/lib/python3.13/site-packages/srsly/tests/test_json_api.pytest_json_dumps_sort_keysr      s)    #D-F****    c                      Sn [        SU 05       nUS-  nUR                  5       (       d   e[        U5      nS S S 5        [        W5      S:X  d   eUS   S:X  d   eg ! , (       d  f       N+= f)N{
    "hello": "world"
}tmp.jsonr   helloworld)r   existsr   lenfile_contentstemp_dir	file_pathr   s       r   test_read_json_filer*      sq    0M	z=1	2hz)	!!!!# 
3 t9>>=G### 
3	2s   (A
A+c                     Sn [        SU 05       nUS-  nUR                  5       (       d   e[        R                  " [        5         [        U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nz{
    "hello": world
}r!   )r   r$   pytestraises
ValueErrorr   )r'   r(   r)   s      r   test_read_json_file_invalidr/   %   sh    .M	z=1	2hz)	!!!!]]:&i  ' 
3	2 '& 
3	2s#   7A5A$A5$
A2	.A55
Bc                     SnU R                  S[        U5      5        [        S5      n[        U5      S:X  d   eUS   S:X  d   eg )Nr    	sys.stdin-r   r"   r#   )setattrr   r   r%   monkeypatch
input_datar   s      r   test_read_json_stdinr7   .   sG    -JXj%9:S>Dt9>>=G###r   c                     SSS.n SS/n[        5        nUS-  n[        X05        [        U5      R                  SSS	9 nUR	                  5       U;   d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nr#   {   r"   test#{
  "hello":"world",
  "test":123
}#{
  "test":123,
  "hello":"world"
}r!   rutf8encoding)r   r   r   openreadr   expectedr(   r)   fs        r   test_write_json_filerG   6   s    c*D 	10H 
8z)	9#)_!!#!71668x''' 8 
 87 
s"   *A8A'A8'
A5	1A88
Bc                  >   SSS.n SS/n[        5        n[        US-  5      n[        X05        [        R                  " US5       nUR                  5       R                  S5      U;   d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr#   r9   r:   r<   r=   r!   r>   r?   )r   r   r   gziprB   rC   decoderD   s        r   test_write_json_file_gziprK   D   s    c*D 	10H 
8 J!67		(YYy#&!668??6*h666 ' 
 '& 
s#   1B&A=,B=
B	B
Bc                 r    SSS.nSS/n[        SU5        U R                  5       nUR                  U;   d   eg )Nr#   r9   r:   z${
  "hello":"world",
  "test":123
}
z${
  "test":123,
  "hello":"world"
}
r2   )r   
readouterrout)capsysr   rE   captureds       r   test_write_json_stdoutrQ   R   sG    c*D 	32H sD  "H<<8###r   c                     Sn [        SU 05       nUS-  nUR                  5       (       d   e[        U5      n[        US5      (       a   e[	        U5      nS S S 5        [        W5      S:X  d   e[        US   5      S:X  d   e[        US   5      S:X  d   eUS   S   S:X  d   eUS   S	   S
:X  d   eg ! , (       d  f       Nd= f)N {"hello": "world"}
{"test": 123}r!   __len__r   r   r   r"   r#   r;   r9   )r   r$   r   hasattrlistr%   r&   s       r   test_read_jsonl_filerW   ^   s    7M	z=1	2hz)	!!!!)$4++++Dz 
3 t9>>tAw<1tAw<177w&&&76?c!!! 
3	2s   AB44
Cc                     Sn [        SU 05       nUS-  nUR                  5       (       d   e[        R                  " [        5         [        [        U5      5      nS S S 5        [        [        USS95      nS S S 5        [        W5      S:X  d   e[        US   5      S:X  d   eUS   S   S:X  d   eg ! , (       d  f       N]= f! , (       d  f       NS= f)	Nz{"hello": world}
{"test": 123}r!   T)skipr   r   r;   r9   )r   r$   r,   r-   r.   rV   r   r%   r&   s       r   test_read_jsonl_file_invalidrZ   n   s    5M	z=1	2hz)	!!!!]]:&
9-.D 'Jyt45 
3 t9>>tAw<176?c!!! '& 
3	2s#   7CB3C3
C	=C
Cc                 :   SnU R                  S[        U5      5        [        S5      n[        US5      (       a   e[	        U5      n[        U5      S:X  d   e[        US   5      S:X  d   e[        US   5      S:X  d   eUS   S   S	:X  d   eUS   S
   S:X  d   eg )NrS   r1   r2   rT   r   r   r   r"   r#   r;   r9   )r3   r   r   rU   rV   r%   r4   s      r   test_read_jsonl_stdinr\   {   s    4JXj%9:c?DtY'''':Dt9>>tAw<1tAw<177w&&&76?c!!!r   c                     SS0SS0/n [        5        nUS-  n[        X 5        [        U5      R                  SSS9 nUR	                  5       S	:X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)
Nr"   r#   r;   r9   r!   r>   r?   r@   {"hello":"world"}
{"test":123}
r   r	   r   rB   rC   )r   r(   r)   rF   s       r   test_write_jsonl_filer`      sy    g.D	8z)	I$)_!!#!71668BBBB 8 
 87 
s"   *A7A&A7&
A4	0A77
Bc                  (   SS0SS0/n Sn[        5        nUS-  n[        X05        [        X0SS9  [        U5      R                  S	S
S9 nUR	                  5       U:X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr"   r#   r;   r9   z?{"hello":"world"}
{"test":123}

{"hello":"world"}
{"test":123}
r!   Tappendr>   r?   r@   r_   rD   s        r   test_write_jsonl_file_appendrd      s    g.DUH	8z)	I$ID1)_!!#!71668x''' 8	 
 87	 
s#   4B	A2!B2
B 	<B
Bc                  *   SS0SS0/n Sn[        5        nUS-  n[        X05        [        X0SSS	9  [        U5      R                  S
SS9 nUR	                  5       U:X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr"   r#   r;   r9   z>{"hello":"world"}
{"test":123}
{"hello":"world"}
{"test":123}
r!   TF)rc   append_new_liner>   r?   r@   r_   rD   s        r   (test_write_jsonl_file_append_no_new_linerg      s    g.DSH	8z)	I$ID%H)_!!#!71668x''' 8	 
 87	 
s#   5B
A3"B3
B	=B
Bc                 p    SS0SS0/n[        SU5        U R                  5       nUR                  S:X  d   eg )Nr"   r#   r;   r9   r2   r^   )r	   rM   rN   )rO   r   rP   s      r   test_write_jsonl_stdoutri      s@    g.DT  "H<<>>>>r   zobj,expected)r   r   r   r   Tr   r9   )r   r   )r"   Tc                     U $ N )xs    r   <lambda>rn      s    1r   Fc                 &    [        U 5      U:X  d   eg rk   )r   objrE   s     r   test_is_json_serializablerr      s      $000r   ))z-32i)32    )0r   )z-0r   c                 &    [        U 5      U:X  d   eg rk   r   rp   s     r   test_json_loads_number_stringrw      s     c?h&&&r   rq   )HIr2   z-?z?!zTHIS IS A STRINGc                     [         R                  " [        5         [        U 5        S S S 5        g ! , (       d  f       g = frk   )r,   r-   r.   r   )rq   s    r   test_json_loads_raisesrz      s#    
 
z	"3 
#	"	"s   0
>c                      [         R                  " 5       n [        R                  " [        5         [        U 5      nS S S 5        g ! , (       d  f       g = frk   )numpyfloat32r,   r-   	TypeErrorr   )rF   ss     r   test_unsupported_type_errorr      s.    A	y	!qM 
"	!	!s   A
Ac                  \   SS0SS0/n SS/n[        5        nUS-  n[        X05        [        R                  " US5       nUR	                  5        Vs/ s H  oUR                  S	5      PM     snU:X  d   e S
S
S
5        S
S
S
5        g
s  snf ! , (       d  f       N= f! , (       d  f       g
= f)z,Tests writing data to a gzipped .jsonl file.r"   r#   r;   r9   {"hello":"world"}
{"test":123}
r!   r>   r?   Nr   r   rI   rB   	readlinesrJ   r   rE   r(   r)   rF   lines         r   test_write_jsonl_gzipr      s    g.D%'78H	8z)	)YYy#&!45KKMBMDKK'MBhNNN ' 
 C '& 
s4   (BBB,	B6BB
B	B
B+c                  p   SS0SS0/n / SQn[        5        nUS-  n[        X05        [        X0SS9  [        R                  " US	5       nUR	                  5        Vs/ s H  oUR                  S
5      PM     snU:X  d   e SSS5        SSS5        gs  snf ! , (       d  f       N= f! , (       d  f       g= f)z.Tests appending data to a gzipped .jsonl file.r"   r#   r;   r9   )r   r   
r   r   r!   Trb   r>   r?   Nr   r   s         r   test_write_jsonl_gzip_appendr      s    g.DH 
8z)	)6YYy#&!45KKMBMDKK'MBhNNN '	 

 C '&	 
s5   2B'	BB6	B B'B
B$	 B''
B5c            
      v   SS0SS0/n [        5        nUS-  n[        R                  " US5       nUR                  U  Vs/ s H   n[	        U5      S-   R                  S5      PM"     sn5        S	S	S	5        UR                  5       (       d   e[        U5      n[        US
5      (       a   e[        U5      nS	S	S	5        [        W5      S:X  d   e[        US   5      S:X  d   e[        US   5      S:X  d   eUS   S   S:X  d   eUS   S   S:X  d   eg	s  snf ! , (       d  f       N= f! , (       d  f       Nz= f)z.Tests reading data from a gzipped .jsonl file.r"   r#   r;   r9   r!   wr   zutf-8NrT   r   r   r   )r   rI   rB   
writelinesr   encoder$   r
   rU   rV   r%   )r'   r(   r)   rF   r   r   s         r   test_read_jsonl_gzipr      s2   w'&#7M	8z)	YYy#&!LLGTU}t*T"T)11':}U ' !!!!y)4++++Dz 
 t9>>tAw<1tAw<177w&&&76?c!!! V '& 
s5   D*D 'D'D.AD*D
D'	#D**
D8),r,   ior   pathlibr   rI   r|   	_json_apir   r   r   r	   r
   r   r   r   r   r   utilr   r   r   r*   r/   r7   rG   rK   rQ   rW   rZ   r\   r`   rd   rg   ri   markparametrizerr   rw   rz   r   r   r   r   rl   r   r   <module>r      s,         J I "  +$!$(7	$" 
""C((? 	4 	t$	e	11 '' 	/	
	OO$"r   