
    01i(<                    r   S r SSKJr  SSKrSSKJrJrJrJrJ	r	  SSK
JrJrJr  SSKJrJr  SSKJr  SSKJrJrJrJrJr  S	S
KJrJr  S	SKJrJrJrJ r J!r!J"r"J#r#  S	SK$J%r%J&r&J'r'  SS/r(\RR                  \RT                  \RV                  \RX                  1r- " S S\5      r.       SS jr/ " S S5      r0g)a  
This serialiser will output an RDF Graph as a JSON-LD formatted document. See http://json-ld.org/

Example:
    ```python
    >>> from rdflib import Graph
    >>> testrdf = '''
    ... @prefix dc: <http://purl.org/dc/terms/> .
    ... <http://example.org/about>
    ...     dc:title "Someone's Homepage"@en .
    ... '''

    >>> g = Graph().parse(data=testrdf, format='n3')

    >>> print(g.serialize(format='json-ld', indent=2))
    [
      {
        "@id": "http://example.org/about",
        "http://purl.org/dc/terms/title": [
          {
            "@language": "en",
            "@value": "Someone's Homepage"
          }
        ]
      }
    ]

    ```
    )annotationsN)IOAnyDictListOptional)DATASET_DEFAULT_GRAPH_IDGraph_ObjectType)RDFXSD)
Serializer)BNodeIdentifiedNode
IdentifierLiteralURIRef   )UNDEFContext)CONTEXTGRAPHIDLANGLISTSETVOCAB)_HAS_ORJSONjsonorjsonJsonLDSerializerfrom_rdfc                  T   ^  \ rS rSrSrSU 4S jjr  S         SS jjrSrU =r$ )	r!   9   zJSON-LD RDF graph serializer.c                ,   > [         [        U ]  U5        g N)superr!   __init__)selfstore	__class__s     [/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/serializers/jsonld.pyr(   JsonLDSerializer.__init__<   s    .u5    c           	     6   U=(       d    SnUS;  a  [         R                  " SU 35        UR                  S5      nUR                  SS5      4nUR                  SS5      nUR                  SS5      nUR                  S	S
5      n	UR                  SS5      n
UR                  SS5      nUR                  SS5      n[        U R                  UUUUUS9n[
        (       a  [        R                  nU	b  U[        R                  -  nU(       a  U[        R                  -  nU(       a  [         R                  " S5        [        R                  " XS9nUR                  U5        g [        R                  " UU	U
UUS9nUR                  UR                  US5      5        g )Nutf-8)r0   zutf-16z7JSON should be encoded as unicode. Given encoding was: contextuse_native_typesFuse_rdf_typeauto_compactindentr   
separators),z: 	sort_keysTensure_ascii)r4   z#Cannot use ensure_ascii with orjson)option)r5   r6   r8   r9   replace)warningswarngetr"   r*   r   r    OPT_NON_STR_KEYSOPT_INDENT_2OPT_SORT_KEYSdumpswriter   encode)r)   streambaseencodingkwargscontext_datar2   r3   r4   r5   r6   r8   r9   objr:   
data_bytesdatas                    r,   	serializeJsonLDSerializer.serialize?   sm    &w..MMLXJW zz),"JJ'95ACzz.%8zz.%8Ha(ZZk:
JJ{D1	zz.%8JJ%
 ; 11F!&---&...CDc9JLL$::%#)D LLXy9:r.    )r*   r
   NN)
rE   z	IO[bytes]rF   Optional[str]rG   rQ   rH   r   returnNone)	__name__
__module____qualname____firstlineno____doc__r(   rM   __static_attributes____classcell__)r+   s   @r,   r!   r!   9   sM    '6 #"&	2;2; 2;  	2;
 2; 
2; 2;r.   c                   U(       d'  U(       a   [        S U R                  5        5       5      n[        U[        5      (       a  UnUR	                  5       nO	[        XS9n[        XU5      n	U	R                  U 5      n
U	R                  R                  (       a4  [        U
[        5      (       a  UR                  [        5      U
0n
X[        '   U
$ )Nc              3  t   #    U  H.  u  pU(       d  M  [        U5      S :w  d  M  U[        U5      4v   M0     g7f)z$http://www.w3.org/XML/1998/namespaceN)str).0pfxnss      r,   	<genexpr>from_rdf.<locals>.<genexpr>   s8      
/	 2w"HH S#b'N/s   888)rF   )dict
namespaces
isinstancer   to_dict	Converterconvertr1   activelistget_keyr   r   )graphrI   rF   r2   r3   r4   	startnodeindexr1   	converterresults              r,   r"   r"   t   s     L 
"--/
 
 ,(((,2'\BIu%Ffd##ooe,f5F&wMr.   c                      \ rS rSrSS jrSS jrSS jrSS jr          SS jrSS jr	        SS jr
SS	 jrS
rg)rg      c                P    Xl         UR                  =(       d    UU l        X0l        g r&   )r1   ri   r2   r3   )r)   r1   r2   r3   s       r,   r(   Converter.__init__   s     ' B2B(r.   c                F   UR                   (       a  [        UR                  5       5      n[        S U 5       5      nU(       a+  UR                  R
                  [        :X  a  UR                  nO
[        5       nU/nUR
                  nU H@  nXu;   a  M
  [        UR
                  [        5      (       a  UR                  U5        M<  XG-  nMB     OU/nUR
                  nU R                  n/ n	U GH  n0 n
S n[        UR
                  [        5      (       a9  UR
                  U:w  a)  UR                  UR
                  5      nXUR                  '   U R                  U5      nU(       d$  [        U5      S:X  a  U
R!                  US   5        OU(       d  M  XUR"                  '   U	(       aA  U	S   R%                  UR'                  [(        5      5      U:X  a  U	S   R!                  U
5        M  U	R                  U
5        GM     [        U5      S:X  ad  [        U	5      S:X  aU  U R                  R*                  (       d:  U	S   nUR%                  UR"                  5      n[        U5      S:X  a	  U(       a  Un	U	$ [        U	5      S:X  a   U R                  R*                  (       a  U	S   n	U	$ )Nc              3  F   #    U  H  oR                   [        :H  v   M     g 7fr&   )
identifierr	   )r^   cs     r,   ra   $Converter.convert.<locals>.<genexpr>   s      )BNQ 88,s   !   r   )context_awarerj   contextsanydefault_contextrw   r	   r
   re   r   appendr1   
shrink_iriid_key
from_graphlenupdate	graph_keyr>   rk   r   ri   )r)   rl   all_contextshas_dataset_default_iddefault_graphgraphsdefault_graph_idgr1   objsrJ   	graphnamenodesdefaultitemss                  r,   rh   Converter.convert   s     01L%( )BN) &" '))448PP % 5 5 %#_F,77!;allF33MM!$!&M " WF$//,,ACI!,,//<<#33 ' 2 21<< @I*3'OOA&EUq

58$).G%%&QGOOB$78IEQs#C + . v;!D	Qt||7J7J1gGKK 1 12E7|q U  Y!^ 3 37Dr.   c                8   0 n[        UR                  5       5       Hc  n[        U[        5      (       d9  [        U[        5      (       d  M/  [        UR                  S U5      5      (       a  MQ  U R                  XU5        Me     [        UR                  5       5      $ r&   )	setsubjectsre   r   r   r}   process_subjectrj   values)r)   rl   nodemapss       r,   r   Converter.from_graph   sp    "$U^^%&A!V$$1e$$Sa1H-I-I$$Uw7 ' GNN$%%r.   c           	     Z   [        U[        5      (       a  U R                  R                  U5      nO([        U[        5      (       a  UR                  5       nOS nXC;   a  g 0 nXEU R                  R                  '   XSU'   UR                  U5       H  u  pgU R                  XXgXS5        M     U$ r&   )	re   r   r1   r   r   n3r   predicate_objectsadd_to_node)r)   rl   r   r   node_idnodepos           r,   r   Converter.process_subject   s    a  ll--a0G5!!ddfG G $+T\\  !++A.DA UqT; /
 r.   c           	        U R                   n[        U[        5      (       aN  UR                  (       a  [	        UR                  5      OS nUR
                  n	UR                  [	        U5      XS9n
O~UR                  U[        R                  5      (       a  [        S /OS /nU HH  n[        [        [        4 H'  nUR                  [	        U5      X5      n
U
(       d  M'    O   W
(       d  MH    O   S nUR                  (       + nW
(       Ga  U
R                  nU
R                   (       a  U R#                  XJR                   5      nOmU
R
                  (       a&  UR
                  U
R
                  :X  a  [	        U5      nO6UR
                  (       a%  U
R
                  c  UR
                  c  [	        U5      n[        U
R$                  ;   aW  U R'                  X5       Vs/ s H9  nU R#                  UU
R                   5      =(       d    U R)                  XUU5      PM;     nnGOe[*        U
R$                  ;   a  W	(       a~  UR-                  U0 5      nUR/                  U	5      n[	        U5      nU(       d  [0        U
R$                  ;   a/  [        U[2        5      (       d  U/=UU	'   nUR5                  U5        g UUU	'   g [0        U
R$                  ;   a  SnOUR7                  U5      nUR8                  R/                  U5      nU(       a$  UR                   (       d  UR$                  (       a  UnU
(       dW  U[        R                   :X  aC  U R:                  (       d2  [        U[<        5      (       a  UR7                  U5      nUR>                  nUc  U R)                  XXF5      nUR/                  U5      nU(       a*  [        U[2        5      (       d  U/nUR5                  U5        OU(       a  U/nOUnUUU'   g s  snf )N)languageT) r1   re   r   datatyper]   r   	find_termvaluer   firstr   r   r   r   ri   nametypetype_coerce	containerto_collectionto_raw_valuer   
setdefaultr>   r   rj   r   	to_symboltermsr3   r   type_key)r)   rl   r   r   r   s_noder   r1   r   r   term
containersr   coercionr   use_setp_keyvr   r   key_terms                        r,   r   Converter.add_to_node  s    ,,a!!*+**s1::$HzzH$$SVX$ID).Q		)B)B$J'	!#UE 2H #,,SVXIDt !3 4 ( nn$IIEyy''9951::#>1v!!t}}'<AS1vt~~% "//9 : $$Q		2 ?((1g>?9  
 'H))%48,1vSDNN2%fd334:8;h&MM$'  '+E(O& %%a(E}}((/HX]]h.@.@AM$2C2Ca((",,Q/D((<$$Uq:D

5!eT**LLFEEuUs   A O)c                   U[         :X  aW  [        U[        5      (       a  U R                  R	                  U5      $ [        U[
        5      (       a  UR                  5       $ U$ U[        :X  a0  [        U[        5      (       a  U R                  R                  U5      $ [        U[        5      (       a  [        UR                  5      U:X  a  U$ g r&   )r   re   r   r1   r   r   r   r   r   r   r]   r   )r)   r   coerce_types      r,   r   Converter.type_coerce]  s    "!V$$||..q11Au%%ttvE!jF&;&;<<))!,,7##AJJ;(FHr.   c           	       ^ U R                   nU R                  X5      nUb@  U R                  X5       Vs/ s H  nU R                  UTXt5      PM     nnUR                  U0$ [	        U[
        5      (       az  SnU R                  XU5      n	U	(       aC  U(       a,  [        U4S jUR                  S U5       5       5      (       d  U	$ XXR                     '   UR                  UR                  5       0$ [	        U[        5      (       a  UR                  UR                  U5      0$ [	        U[        5      (       GaC  U R                  =(       a    UR                  [         ;   n
U
(       a  UR#                  5       nO[%        U5      nUR                  (       aW  U
(       a  U R                   R&                  (       a  U$ UR(                  UR+                  UR                  5      UR,                  U0$ UR.                  (       a>  UR.                  UR.                  :w  a$  UR0                  UR.                  UR,                  U0$ UR&                  (       a"  UR.                  (       a  UR.                  (       d  UR,                  U0$ U$ g s  snf )NFc              3  6   >#    U  H  oT:w  d  M
  Uv   M     g 7fr&   rO   )r^   s2r   s     r,   ra   )Converter.to_raw_value.<locals>.<genexpr>}  s     $U2IBSTWRR2Is   		)r1   r   r   list_keyre   r   r   r}   r   r   r   r   r   r   r2   r   PLAIN_LITERAL_TYPEStoPythonr]   ri   r   r   	value_keyr   lang_key)r)   rl   r   r   r   r1   collloembedonodenativer   s     `         r,   r   Converter.to_raw_valuel  s    ,,!!%+ ,,U66B !!%B86   $$d++5!!  ((7;E$U%..q2I$U!U!U L5:E..12NNADDF++6""NNG$6$6q$9::7##**Pqzz=P/PFJJLFzzdll11H$$g&7&7

&C%%q  

g.>.> >((!**g6G6GKK^^w'7'7

))1--) $'s   I=c                n   U[         R                  :w  a&  UR                  U[         R                  5      (       d  g / n[	        U/5      nU(       a  U[         R                  :X  a  U$ [        U[        5      (       a  g Su  pVUR                  U5       Hm  u  pxU(       d  U[         R                  :X  a  UnM$  U(       d  U[         R                  :X  a  UnMC  U[         R                  :w  d  U[         R                  :w  d  Mm    g    UR                  U5        UnX$;   a  g UR                  U5        U(       a  M  g g )NrP   )r   nilr   r   r   re   r   r   restr   r   r   add)	r)   rl   l_
list_nodeschainr   r   r   r   s	            r,   r   Converter.to_collection  s    =R!;!;24
RD	SWW}!!"f%%$KE//3ciiE!sxx-D#((]a388m 4 e$B{IIbM% br.   )r1   r2   r3   N)r1   r   r2   boolr3   r   )rl   r
   )rl   r
   r   r   )
rl   r
   r   r   r   r   r   r   r   Dict[str, Any])r   r   r   r]   )rl   r
   r   r   r   r   r   r   )rl   r
   r   r   )rT   rU   rV   rW   r(   rh   r   r   r   r   r   r   rY   rO   r.   r,   rg   rg      s    )
AF
&0UU U 	U
 U Un----2<-GU-^r.   rg   )NNFFFNF)1rX   
__future__r   r<   typingr   r   r   r   r   rdflib.graphr	   r
   r   rdflib.namespacer   r   rdflib.serializerr   rdflib.termr   r   r   r   r   shared.jsonld.contextr   r   shared.jsonld.keysr   r   r   r   r   r   r   shared.jsonld.utilr   r   r    __all__booleanintegerdoublestringr   r!   r"   rg   rO   r.   r,   <module>r      s   H #  0 0 E E % ( J J 2 K K K : :z
* {{CKKSZZH 8;z 8;z 	
"JY Yr.   