
    01iL                      % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSKJ
r
JrJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SSKJr  SS	KJrJ r J!r!  SS
K"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+  / SQr,SSK-J.r.  \(       a  SSK-J/r/  \" S5      r0S^S_S jjr1\" S\2S9r3S`S jr4SaS jr5SbS jr6Sr7Sr8Sr9Sr:\8\9\:4r;\7\8\9\:4r<Sr=Sr>Sr?Sr@SrASrBSrCSrD\DS-   rE\DS-   rF\DS-   rGSrHS rIS!rJ\JS"-   rK\DS#-   rLS$rM\IrNS%rO\=\NS&-   4rP\=\NS'-   4rQ\=\NS(-   4rR\=\NS)-   4rS\=\NS*-   4rT\=\NS+-   4rUSqVS,\WS-'   SaS. jrXSqYSaS/ jrZS0r[S1r\ScS2 jr]ScS3 jr^\Fr_\Gr`S4ra\=\H4rb\=\K4rcS5rd\#S6-   re\#S7-   rf\#S8-   rg\#S9-   rh\#S:-   riSrj\k" S;5      rl\lS<1-  rm\lS=1-  rnS ro\k" S>5      rp\k" S?5      rq\k" S@5      rr\rSAS<1-  rsSdSB jrt\R                  " SC5      rv\R                  " SD5      rwS4rx\R                  " SE5      ry\R                  " SF5      rz\R                  " SG5      r{\R                  " SH5      r|\R                  " SH5      r}\R                  " SI5      r~\R                  " SJ5      r\R                  " SK5      r\R                  " SL5      r\R                  " SM5      r " SN SO\25      r " SP SQ5      r " SR SS\5      r " ST SU5      r\R                  " SV5      r " SW SX5      rSeSY jr " SZ S[\.5      r " S\ S]\5      rg)fa  
notation3.py - Standalone Notation3 Parser
Derived from CWM, the Closed World Machine

Authors of the original suite:

* Dan Connolly <@@>
* Tim Berners-Lee <@@>
* Yosi Scharf <@@>
* Joseph M. Reagle Jr. <reagle@w3.org>
* Rich Salz <rsalz@zolera.com>

http://www.w3.org/2000/10/swap/notation3.py

Copyright 2000-2007, World Wide Web Consortium.
Copyright 2001, MIT.
Copyright 2001, Zolera Systems Inc.

License: W3C Software License
http://www.w3.org/Consortium/Legal/copyright-software

Modified by Sean B. Palmer
Copyright 2007, Sean B. Palmer.

Modified to work with rdflib by Gunnar Aastrand Grimnes
Copyright 2010, Gunnar A. Grimnes

    )annotationsN)Decimal)IOTYPE_CHECKINGAnyCallableDictMatchMutableSequenceNoReturnOptionalPatternSetTupleTypeVarUnion)uuid4)	long_type)ParserError)DatasetGraphQuotedGraph)	_XSD_PFXBNodeIdentifiedNode
IdentifierLiteralNodeURIRefVariable
_unique_id)	BadSyntaxN3ParserTurtleParser
splitFragPjoinbaserunNamespace	uniqueURIhexifyFormulaRDFSink
SinkParsersfloat)Parser)InputSource_AnyTc                J    U R                  S5      nUS:  a	  U SU XS 4$ U S4$ )zSplit a URI reference before the fragment

Punctuation is kept. e.g.

```python
>>> splitFragP("abc#def")
('abc', '#def')

>>> splitFragP("abcdef")
('abcdef', '')

```
#r   N )rfind)urirefpuncis      Z/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/parsers/notation3.pyr%   r%   a   s8     	SAAvbqz6":%%rz    _StrT)boundc                   UR                  S5      nUR                  S5      nUS:  a  US:  d  X2:  a  U$ U R                  S5      nUS:  d
   SU -  5       e[        U5      u  pVU(       d  X-   $ XS-   US-    S:w  a  [        SU < SU< S	35      eXS-   US
-    S:X  a  U R                  SUS
-   5      nOUS-   nUS:  a  [        U 5      nU S-   n USS S:X  a  U SUS-    U-   $ USS S:X  a  U SU U-   $ U R	                  S5      n USS S:X  a  USS nUS:X  a  SnO8USS
 S:X  d  US:X  a(  US
S nU R	                  SXx5      n	U	S:  a
  U SU	S-    n U	nOOMQ  U SUS-    U-   U-   $ )aU  join an absolute URI and URI reference
(non-ascii characters are supported/doctested;
haven't checked the details of the IRI spec though)

`here` is assumed to be absolute.
`there` is URI reference.

```python
>>> join('http://example/x/y/z', '../abc')
'http://example/x/abc'

```

Raise ValueError if there uses relative path
syntax but here has no hierarchical path.

```python
>>> join('mid:foo@example', '../foo') # doctest: +NORMALIZE_WHITESPACE
Traceback (most recent call last):
    raise ValueError(here)
ValueError: Base <mid:foo@example> has no slash
after colon - with relative '../foo'.

>>> join('http://example/x/y/z', '')
'http://example/x/y/z'

>>> join('mid:foo@example', '#foo')
'mid:foo@example#foo'

```

We grok IRIs

```python
>>> len('Andr\xe9')
5

>>> join('http://example.org/', '#Andr\xe9')
'http://example.org/#Andr\xe9'

```
/:r   zBase uri '%s' is not absolute      zBase <z,> has no slash after colon - with relative 'z'.   z//Nz./.r4   z../z..)findr%   
ValueErrorlenr5   )
herethereslashlcolonlbcolonlpathfragbpathslashrr8   s
             r9   r&   r&   z   s   ^ ZZ_FZZ_F {
foiinGa< '$.< E"JD{ aK'A+&#--15:
 	

 aK'A+&$.		#w{+! qyD	cz RayDMgk"U** RayCFU|e##ZZ_F
8t8D3;D"1X$$,8D

3.AAvGa!e}  &1*$t++r:   c                 J    S[        [        R                  " 5       5      -   S-   $ )a  The base URI for this process - the Web equiv of cwd

Relative or absolute unix-standard filenames parsed relative to
this yield the URI of the file.
If we had a reliable way of getting a computer name,
we should put it in the hostname just to prevent ambiguity
zfile://r>   )	_fixslashosgetcwd r:   r9   r'   r'      s     y--33r:   c                X    U R                  SS5      n U S   S:w  a  U S   S:X  a  U SS n U $ )z7Fix windowslike filename to unixlike - (#ifdef WINDOWS)\r>   r   r@   r?   rA   N)replace)ss    r9   rQ   rQ      s7    			$Ats{qts{abEHr:   r@   rA   rB            z#http://www.w3.org/2000/10/swap/log#isforSomeforAllz/http://www.w3.org/1999/02/22-rdf-syntax-ns#typez+http://www.w3.org/1999/02/22-rdf-syntax-ns#zhttp://www.w3.org/2002/07/owl#sameAsparsesToz$http://www.w3.org/TR/REC-rdf-syntax/z&http://www.w3.org/2000/10/swap/log.n3#firstrestlinilListEmptyOptional[str]runNamespaceValuec                 Z    [         c  [        [        5       [        5       5      S-   q [         $ )z;Returns a URI suitable as a namespace for run-local objectsr3   )rh   r&   r'   r!   rT   r:   r9   r(   r(   #  s&       6<r:   c                 N    [         S-  q [        5       S-   [        [         5      -   $ )zA unique URIr@   u_)nextur(   strrT   r:   r9   r)   r)   /  s#     
QJE>D 3u:--r:   F2   c                     g NrT   argskargss     r9   BecauseOfDatart   <      r:   c                     g rp   rT   rq   s     r9   becauseSubexpressionrw   A  ru   r:   r3   z*http://www.w3.org/2000/10/swap/log#impliesbooleandecimaldoublefloatintegerz	
 !"#$&'()*,+/;<=>?@[\]^`{|}~rC   r?   ABCDEFabcdef0123456789z(_~.-!$&'()*+,;=/?#@%)z0123456789-+c                     [        [        U R                  S5      S5      5      $ ! [         a    [        SU R                  S5      -   5      ef = f)Nr@      zInvalid unicode code point: )chrintgroup	Exception)ms    r9   unicodeExpandr   j  sL    E3qwwqz2&'' E6CDDEs	   #& (Az\\u([0-9a-fA-F]{4})z\\U([0-9a-fA-F]{8})z[ \t]*(#[^\n]*)?\r?\nz[ \t]*(#[^\n]*)?$z[ \t]*z[-+]?[0-9]+z[-+]?[0-9]*\.[0-9]+z9[-+]?(?:[0-9]+\.[0-9]*|\.[0-9]+|[0-9]+)(?:e|E)[-+]?[0-9]+z[0-9]+z[\\\r\n\"\']z[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*c                      \ rS rSrSrSrg)r.   i  z4don't normalize raw XSD.double string representationrT   N)__name__
__module____qualname____firstlineno____doc____static_attributes__rT   r:   r9   r.   r.     s    >r:   r.   c                  R   \ rS rSr      S.             S/S jjrS0S jrS1S jrS2S jrS3S jrS4S jr	S5S	 jr
S6S7S
 jjrS8S jrS9S jrS9S jrS:S jrS;S jrS<S jrS1S jrS<S jrS9S jrS=S jrS=S jrS=S jrS>S jrS?S@S jjrS=S jrSAS jr S?         SBS jjrSCS jr          SDS jrS=S jrS9S jr S=S  jr!S9S! jr"S9S" jr#S=S# jr$        SES$ jr%        S=S% jr&S=S& jr'SFS' jr(SGS( jr)              SHS) jr*SIS* jr+SIS+ jr,SJS, jr-S-r.g)Kr-   i  Nc                   0 U l         US:w  a"  SU;   d
   SU-  5       eUS-   U R                   S'   Xl        U(       a  UR                  U5        X0l        SU l        SU l        XPl        / SQU l        SU l        0 U l	        0 U l
        0 U l        X`l        Xpl        U(       a  SOSU l        S	U l        [         (       a(  [#        UR%                  U5      U R                  S
9U l        U   U(       a  X@l        OU(       a  X0l        OS	U l        U R&                  (       a  SU R&                  ;   d   eU R                  (       d5  U R                  (       a  U R                  S-   U l        O[)        5       U l        U   UcH  U(       dA  U R                  (       a  UR+                  US-   5      U l        OUR+                  5       U l        OX l        U R,                  U l        S	U l        g	)z\note: namespace names should *not* end in  # ;
the  # will get added during qname processingr4   r?   zDocument URI not absolute: <%s>r3   r   )athisbindhasr\   oftruefalse)"')r   N)becausez#_gz	#_formula)	_bindings_storesetGenPrefix_thisDoclinesstartOfLine
_genPrefixkeywordskeywordsSet_anonymousNodes
_variables_parentVariables_reasonturtlestring_delimiters_reason2trackingrt   	newSymbol_baseURIr)   
newFormula_formula_context_parentContext)selfstoreopenFormulathisDocbaseURI	genPrefixwhyr   s           r9   __init__SinkParser.__init__  s~    b='>N#Dw#NN>!(3DNN2y)
#Q13/157 0667;8)($,,DM 	#M ' $==C4==$888}}"&--%"7"++v}} % 0 0;1F G % 0 0 2'M+/==15r:   c                X    SU R                   U R                  XR                  -
  S-   4-  $ )a  String generated from position in file

This is for repeatability when referring people to bnodes in a document.
This has diagnostic uses less formally, as it should point one to which
bnode the arbitrary identifier actually is. It gives the
line and character number of the '[' charcacter or path character
which introduced the blank node. The first blank node is boringly
_L1C1. It used to be used only for tracking, but for tests in general
it makes the canonical ordering of bnodes repeatable.z	%s_L%iC%ir@   )r   r   r   )r   r8   s     r9   rG   SinkParser.here  s-     dootzz1?O?O;ORS;STTTr:   c                    U R                   $ rp   )r   r   s    r9   formulaSinkParser.formula  s    }}r:   c                @    U R                  UR                  5       5      $ rp   )loadBufread)r   streams     r9   
loadStreamSinkParser.loadStream  s    ||FKKM**r:   c                d    U R                  5         U R                  U5        U R                  5       $ )z1Parses a buffer and returns its top level formula)startDocfeedendDoc)r   bufs     r9   r   SinkParser.loadBuf  s"    		#{{}r:   c                n   [        U[        5      (       dL  UR                  S5      n[        U5      S:  a+  US   [        R
                  R                  S5      :X  a  USS nOUnSnUS:  aJ  U R                  X#5      nUS:  a  gU R                  X$5      nUS:  a  U R                  X$S5        US:  a  MI  gg)zFeed an octet stream to the parser

if BadSyntax is raised, the string
passed in the exception object is the
remainder after any statements have been parsed.
So if there is more data to feed to the
parser, it should be straightforward to recover.utf-8r   r@   Nzexpected directive or statement)	
isinstancerm   decoderF   codecsBOM_UTF8	skipSpacedirectiveOrStatementr"   )r   octetsrX   r8   js        r9   r   SinkParser.feed  s     &#&&g&A1vzadfoo&<&<W&EEabEA1fq$A1u))!/A1uq%FG 1fr:   c                ,   U R                  X5      nUS:  a  U$ U R                  (       a  U R                  X5      nUS:  a  U$ U R                  X5      nUS:  a  U R	                  X5      $ U R                  X5      nUS:  a  U R	                  X5      $ U$ Nr   )r   r   sparqlDirective	directivecheckDot	statement)r   argstrhr8   r   s        r9   r   SinkParser.directiveOrStatement  s    NN6%q5H;;$$V/AAvNN6%6==++NN6%6==++r:   c                    US   [         ;  d   eX#   S:X  a  US-  nOXR                  ;  a  gU[        U5      -   nX#U U:X  a  X%   [        ;   d  U(       a
  X%   S:X  a  U$ g)zCheck for keyword.  Space must have been stripped on entry and
we must not be at end of file.

if colon, then keyword followed by colon is ok
(`@prefix:<blah>` is ok, rdf:type shortcut a must be followed by ws)
r   @r@   r?   )_notNameCharsr   rF   _notKeywordsChars)r   tokr   r8   coloni_plus_len_toks         r9   r   SinkParser.tok(  sr     1v]***9FA--'SX^$+'+<<&0C7!!r:   c                    US   [         ;  d   e[        U5      nX#X4-    R                  5       UR                  5       :X  a  X#U-      [        ;   a  X4-  nU$ g)zCheck for SPARQL keyword.  Space must have been stripped on entry
and we must not be at end of file.
Case insensitive and not preceded by @
r   r   )r   rF   lower_notQNameChars)r   r   r   r8   len_toks        r9   	sparqlTokSinkParser.sparqlTokA  s[     1v]***c(ak"((*ciik9w;>1LAHr:   c                   U R                  X5      nUS:  a  U$ / nU R                  SX5      nUS:  a  U R                  XS5        U R                  SX5      nUS:  am  U R                  (       a  U R                  XS5        U R	                  XX@R
                  5      nUS:  a  U R                  XS5        U R                  US S  5        U$ U R                  SX5      nUS:  a  U R                  (       a  U R                  XS5        U R	                  XX@R                  5      nUS:  a  U R                  XS	5        U HK  nXPR                  ;  d  XPR                  ;   d  M#  U R                  R                  U5      U R                  U'   MM     U$ U R                  S
X5      nUS:  a}  U R                  (       a  U R                  XS5        U R	                  XX@R                  5      nUS:  a  U R                  XS5        U H  nU R                  R                  U5        M      U$ U R                  SXSS9nUS:  a  / nU R                  XU5      nUS:  a  U R                  XS5        U R                  XU5      nUS:  a  U R                  XS5        U R                  US   5      nU R                  (       a  [!        U R                  U5      nOSU;  a  U R                  UUSU S35        SU;   d   eXpR"                  US   S   '   U R%                  US   S   ['        U5      5        U$ U R                  SX5      nUS:  a  / nU R                  XU5      nUS:  a  U R                  XS5        U R                  US   5      nU R                  (       a  [!        U R                  U5      nOU R                  UUSU-   S-   5        SU;   d   eXpl        U$ g)Nr   r   z%keyword bind is obsolete: use @prefixr   z%Found 'keywords' when in Turtle mode.z/'@keywords' needs comma separated list of wordsr^   z#Found 'forAll' when in Turtle mode.zBad variable list after @forAllr]   z$Found 'forSome' when in Turtle mode.z Bad variable list after @forSomeprefixT)r   expected qname after @prefix'expected <uriref> after @prefix _qname_r@   r?   6With no base URI, cannot use relative URI in @prefix <>r'   expected <uri> after @base >With no previous base URI, cannot use relative URI in @base  <r   )r   r   r"   r   commaSeparatedListbareWordsetKeywordsuri_ref2r   r   r   newUniversaldeclareExistentialqnameuriOfr   r&   r   r   r*   )r   r   r8   r   resxtnss           r9   r   SinkParser.directiveR  s   NN6%q5H "HHVV'q5NN6&MNHHZ+q5{{v*QR''3FA1uP SV$HHHXv)q5{{v*OP''3FA1uv*KLOO+q4I4I/I)-)C)CA)FDOOA&	 
 HHHY*q5{{v*PQ''3FA1uv*LM003  HHHXvH56ACA

6a(A1uv*HIf+A1uv*STjj1&B}}$--,BLRDPQR
 "99&(NN1Q47#IIad1gvbz*HHHVV'6Af+A1uv*GHAaD!B}}$--,1  "99MHr:   c                   U R                  X5      nUS:  a  U$ U R                  SX5      nUS:  a  / nU R                  XU5      nUS:  a  U R                  XS5        U R	                  XU5      nUS:  a  U R                  XS5        U R                  US   5      nU R                  (       a  [        U R                  U5      nOSU;  a  U R                  UUSU-   S-   5        SU;   d   eXPR                  US   S   '   U R                  US   S   [        U5      5        U$ U R                  S	X5      nUS:  a  / nU R	                  XU5      nUS:  a  U R                  XS
5        U R                  US   5      nU R                  (       a  [        U R                  U5      nOU R                  UUSU-   S-   5        SU;   d   eXPl        U$ g)zI
turtle and trig support BASE/PREFIX without @ and without
terminating .
r   PREFIXr   r   r@   r?   r   r   BASEr   r   r   )r   r   r   r"   r   r   r   r&   r   r   r*   )r   r   r8   r   r  r  s         r9   r   SinkParser.sparqlDirective  s    NN6%q5HNN8V/6"$A

6a(A1uv*HIf+A1uv*STAaD!B}}$--,B2  "99&(NN1Q47#IIad1gvbz*HNN66-6Af+A1uv*GHAaD!B}}$--,1  "99MHr:   c                    [        U[        5      (       d   S5       eUS:X  a  U R                  R                  U5        g U R                  R	                  X5        g )Nz&Any unicode must be %x-encoded alreadyr4   )r   bytesr   setDefaultNamespacer   )r   qnuris      r9   r   SinkParser.bind  sF    #u%%O'OO%8KK++C0KKR%r:   c                4    Uc  SU l         gXl        SU l         g)zTakes a list of stringsNr   r@   )r   r   )r   ks     r9   r   SinkParser.setKeywords  s    9 DM Dr:   c                N    U R                   R                  U R                  5        g rp   )r   r   r   r   s    r9   r   SinkParser.startDoc  s    T]]+r:   c                d    U R                   R                  U R                  5        U R                  $ )z8Signal end of document and stop parsing. returns formula)r   r   r   r   s    r9   r   SinkParser.endDoc  s"    4==)}}r:   c                J    U R                   R                  XR                  S9  g Nr   )r   makeStatementr   )r   	quadruples     r9   r  SinkParser.makeStatement  s     	!!)!?r:   c                    / nU R                  XU5      nUS:  a  U$ U R                  XUS   5      nUS:  a  U R                  XS5        U$ )Nr   zexpected propertylist)objectproperty_listr"   )r   r   r8   rr   s        r9   r   SinkParser.statement  sT     KK1%q5Hv!A$/q5NN6&=>r:   c                &    U R                  XU5      $ rp   itemr   r   r8   r   s       r9   subjectSinkParser.subject      yyC((r:   c                d   U R                  X5      nUS:  a  U$ / nU R                  SX5      nUS:  ae  U R                  (       a  U R                  XS5        U R	                  XU5      nUS:  a  U R                  XS5        UR                  SUS   45        U$ U R                  SX5      nUS:  a  U R                  (       a  U R                  XS5        U R	                  XU5      nUS:  a  U R                  XS5        U R                  X5      nUS:  a  U R                  XS	5        UnU R                  S
X5      nUS:  a  U R                  XS5        UR                  SUS   45        U$ U R                  SX5      nUS:  a  UR                  S[        45        U$ XUS-    S:X  a[  U R                  (       a  U R                  XS5        UR                  SU R                  R                  [        S-   5      45        US-   $ X   S:X  a  U R                  (       a  U R                  XS5        XS-      S:X  a8  UR                  SU R                  R                  [        S-   5      45        US-   $ UR                  S[        45        US-   $ XUS-    S:X  aB  U R                  (       a  U R                  XS5        UR                  S[        S-   45        US-   $ U R	                  XU5      nUS:  a  UR                  SUS   45        U$ XUS-    S:X  d  XUS-    S:X  a  U R                  XS5        g)zChas _prop_
is _prop_ of
a
=
_prop_
>- prop ->
<- prop -<
_operator_r   r   z"Found 'has' keyword in Turtle modezexpected property after 'has'->r\   z!Found 'is' keyword in Turtle modezexpected <property> after 'is'z/End of file found, expected property after 'is'r   zexpected 'of' after 'is' <prop>z<-r   rA   z<=zFound '<=' in Turtle mode. implies=zFound '=' in Turtle moder@   r   z:=zFound ':=' in Turtle modebecomesz>-z>- ... -> syntax is obsolete.r   )r   r   r   r"   propappendRDF_typer   r   Logic_NSDAML_sameAs)r   r   r8   r   r   r  s         r9   verbSinkParser.verb   s    NN6%q5H HHUF&6{{v*NO		&Q'A1uv*IJJJad|$HHHT6%6{{v*MN		&Q'A1uv*JKv)A1uP Av)A1uv*KLJJad|$HHHS&$6JJh'(Ha!e${{v*GHJJdkk33Hy4HIJKq5L9{{v*DE!e}#

D$++"7"798L"MNO1uJJk*+q5La!e${{v*EF JJh234q5LIIf#6JJad|$Ha!e$1q5(9T(ANN6&EFr:   c                &    U R                  XU5      $ rp   r!  r#  s       r9   r,  SinkParser.propv  r&  r:   c                &    U R                  XU5      $ rp   )rL   r#  s       r9   r"  SinkParser.itemy  r&  r:   c                ^    U R                   R                  U R                  XR                  S9$ r  )r   newBlankNoder   r   )r   r  s     r9   	blankNodeSinkParser.blankNode|  s$    {{''s'NNr:   c                   U R                  XU5      nUS:  a  U$ X   S;   a  X   nUR                  5       nU R                  U R                  U5      S9nU R	                  XS-   U5      nUS:  a  U R                  XS5        UR                  5       nUS:X  a  U R                  U R                  XU45        OU R                  U R                  XU45        UR                  U5        X   S;   a  M  U$ )zParse the path production.r   >   !^r  r@   z"EOF found in middle of path syntaxr=  )	nodeOrLiteralpopr9  rG   noder"   r  r   r-  )	r   r   r8   r   r   chsubjobjpreds	            r9   rL   SinkParser.path  s    v#.q5Hi:%B779D..TYYq\.2C		&a%-A1uv*NO779DSy""DMM4d#CD""DMM4s#CDJJsO i:% r:   c                    U R                   R                  US5      nUb  U$ U R                  R                  U R                  U R
                  S9nX R                   U'   U$ )z?Remember or generate a term for one of these _: anonymous nodesNr  )r   getr   r8  r   r   )r   lnterms      r9   anonymousNodeSinkParser.anonymousNode  sY    ##''D1K{{''4=='I#'R r:   c                   UnU R                  X5      nUS:  a  U$ UnX   nUS:X  Ga  U R                  U5      nU R                  XS-   5      nUS:  a  U R                  XS5        X   S:X  a  U R                  (       a  U R                  XS5        US-   n/ n	U R	                  XU	5      nUS:  av  U	S   n[        U	5      S:  a+  U	 H%  n
U R                  U R                  [        XZ45        M'     U R                  X5      nUS:  a  U R                  XS5        X   S:X  a  US-  nOU R                  XS	5        Uc  U R                  US
9nU R                  XU5      nUS:  a  U R                  XS5        U R                  X5      nUS:  a  U R                  XS5        X   S:w  a  U R                  XS5        UR                  U5        US-   $ U R                  (       Gd  US:X  Ga~  XS-      nUS:X  Ga  US-  nUS-   n/ nSn U R                  X5      nUS:  a  U R                  XS5        XUS-    S:X  a  US-   nOU(       d!  X   S:X  a  US-  nOU R                  XS5        OSn/ nU R                  XU5      nUS:  a  U R                  XS5        UR                  U R                  R                  US   5      5        M  UR                  U R                  R                  XR                  5      5        U$ US-   nU R                   nU R                  U l        U R"                  nU R$                  nU R&                  U l        0 U l        U R&                  R)                  5       U l        U R*                  n[,        U l        Uc  U R                  R/                  5       nXPl         U R                  X5      nUS:  a  U R                  XS5        X   S:X  a  US-   nO+U R1                  X5      nUS:  a  U R                  XS5        Mb  UU l        U R$                  U l        UU l        U R                   U l        UU l        Xl        UR                  UR3                  5       5        U$ US:X  a  U R                  R4                  nXS-      nUS:X  a  U R                  R                  nUS-  nUS-   n/ n U R                  X5      nUS:  a  U R                  XS5        X   S:X  a  US-   nO[/ nU R                  XU5      nUS:  a  U R                  XS5        UR                  U R                  R                  US   5      5        M  UR                  U" XR                  5      5        U$ U R7                  S X5      nUS:  a  U R                  UUS!5        U R7                  S"X5      nUS:  a  UR                  S5        U$ U R7                  S#X5      nUS:  a  UR                  S5        U$ Uc  U R9                  XU5      nUS:  a  U$ g$)%zzParse the <node> production.
Space is now skipped once at the beginning
instead of in multiple calls to self.skipSpace().
r   [r@   zEOF after '['r*  z(Found '[=' or '[ =' when in turtle mode.z'EOF when objectList expected after [ = ;zobjectList expected after [= r>  zproperty_list expectedz,EOF when ']' expected after [ <propertyList>]z']' expected{$Tzneeded '$}', found end.rA   z$},zexpected: ','Fzexpected item in set or '$}'zneeded '}', found end.}zexpected statement or '}'(zneeded ')', found end.)zexpected item in list or ')'r   zEKeyword 'this' was ancient N3. Now use @forSome and @forAll keywords.r   r   r   )r   rG   r"   r   
objectListrF   r  r   r0  r9  r  r-  r"  r   internnewSetr   r   r   r   copyr   rw   r   r   closenewListr   r   )r   r   r8   r   subjectAlreadyrC  r   rB  bnodeIDobjsrD  ch2re   	first_runr"  oldParentContextparentAnonymousNodesgrandParentVariablesreason2
thing_types                       r9   rA  SinkParser.node  s     .NN6%q5HY9iilGv1u-A1uv/:yC;;NN#M E*,OOFt467D4y1}#'C ..{D/VW $(v1A1u"'P yC'QNN6.MN|~~'~2""6d3A1uv*BCv)A1uM yCv.9JJtq5L{{{rSy Q-CczQE 	v1A1uv2KL!a%(D0E$!9+FA NN6oF$)	-/D		&T2A1uv2PQKK 2 247 ;<) * 

4;;--dMMBC E#'#6#6 &*mm#'+';';$'+'<'<$(,%')$"&//"6"6"8-- 4<;;113D $v1A1uv2JKyC'E11&<A1uv2MN  (<$"&"7"7(<% $ 3 3 '&6#

JJL 9 ,,JQ-Ccz![[//
QAADNN6-q5NN6.FG9#AAIIf.q5NN6.LMDKK..tAw78  JJz$67HHHVV'6NN3 HHVV'6JJtHHHWf(6JJuH<f-AAvr:   c                     U R                  X5      nUS:  a  U R                  XS5        X   S:w  a  OUS-   nM9  XUS-    S:X  aX  U R                  (       a  U R                  XS5        US-   n/ nU R                  XXS5      nUS:  a  U R                  XS5        UnM  Un/ nU R	                  XU5      nUS::  a  U$ / nU R                  XU5      nUS:  a  U R                  XS	5        U HN  nUS   u  pU	S
:X  a   U R                  U R                  XU45        M0  U R                  U R                  XU45        MP     U R                  X5      nUS:  a  U R                  XS5        X   S:w  a  U$ US-  nGMv  )zEParse property list
Leaves the terminating punctuation in the buffer
r@   r   z-EOF found when expected verb in property listrO  rA   z:-zFound in ':-' in Turtle modez!bad {} or () or [] node after :- zobjectList expectedr(  zEOF found in list of objects)r   r"   r   rA  r1  rW  r  r   )r   r   r8   rC  r   r   vr_  rD  dirasyms              r9   r  SinkParser.property_lista  s    NN6-q5NN#R 9#E  !a% D(;;NN6.LME(*IIf3q5NN6.QRA"$A		&Q'AAv%'D40A1uv*?@aD	4<&&s#'FG&&s'FG  v)A1uv*HIyCFAW r:   c                .   U R                  X5      nUS:  a  U R                  XS5        X   S:X  a  U$ U" XU5      nUS:  a  g U R                  X5      nUS:  a  U$ X   nUS:w  a	  US:w  a  gU$ U" XS-   U5      nUS:  a  U R                  XS5        MR  )zUreturn value: -1 bad syntax; >1 new position in argstr
res has things found appended
r   z"EOF found expecting comma sep listrC   r   r@   rS  zbad list contentr   r"   )r   r   r   r   whatr8   rB  s          r9   r   SinkParser.commaSeparatedList  s     NN6%q5NN6&JK9HC q5v)A1uBSy9VUC(A1uv*<= r:   c                    U R                  XU5      nUS:  a  g U R                  X5      nUS:  a  U R                  XS5        X   S:w  a  U$ U R                  XS-   U5      nUS:  a  U$ MR  )Nr   r   r@   zEOF found after objectrS  )r  r   r"   )r   r   r8   r   r   s        r9   rW  SinkParser.objectList  sw    KK3'q5v)A1uv*BCyCFE3/A1u r:   c                    U R                  X5      nUS:  a  U$ X   nUS:X  a  US-   $ US:X  a  U$ US:X  a  U$ U R                  XS5        g )Nr   rC   r@   rT  rP  z.expected '.' or '}' or ']' at end of statementrn  )r   r   r8   r   rB  s        r9   r   SinkParser.checkDot  sZ    NN6%q5HY9q5L9H9Hv"RSr:   c                    / nU R                  XU5      nUS:  ak  US   u  pgUc   S5       e U R                  U   nU R                  R                  WU-   5      n	UR                  U R                  R                  X5      5        U$ U R                  X5      nUS:  a  gX   S	:X  a1  / n
U R                  XU
5      nUS:  a  UR                  U
S   5        U$ gX   S
:X  Ga   US-   nUR!                  SU5      nUS:  a  XU n["        R%                  [&        U5      n[(        R%                  [&        U5      nU R                  (       a  [        U R                  U5      nOSU;   d   S5       eXS-
     S:X  a  USS S:X  d  US-  nU R                  R                  U5      n	UR                  U R                  R                  X5      5        US-   $ U R                  XS5        gU R*                  (       a  / n
U R-                  XU
5      nUS:  a  gU
S   U R.                  ;   a  U R                  XSU
S   -  5        UR                  U R                  R                  U R                  S   U
S   -   5      5        U$ g! [         a|    US:X  a$  UR                  U R                  U5      5        Us $ U R                  (       d(  US:X  a"  [        U R                  =(       d    SS5      n GNU R                  XSU-  5         GNf = f)zGenerate uri from n3 representation.

Note that the RDF convention of directly concatenating
NS and local name is now used though I prefer inserting a '#'
to make the namesapces look more like what XML folks expect.
r   Nz	not used?_r4   r3   zPrefix "%s:" not boundr   ?<r@   r   r?   z0With no base URI, cannot deal with relative URIszunterminated URI referencezKeyword "%s" not allowed here.)r   r   
ADDED_HASHr   KeyErrorr-  rK  r   r&   r"   r   r   r   rH  r   variablerD   unicodeEscape8subr   unicodeEscape4r   r   r   )r   r   r8   r   r  r   pfxrI  r  symbri  sturefs                r9   r   SinkParser.uri_ref2  s     "JJv"%6eGC{%+%q	T,B ;;((b1DJJt**467HNN6%q59"$Af+A1u

1Q4 Y#QBC$AAv| &))->%))->==t4D tJIJ#a%=C'RS	S0@CKD{{,,T2

4??..t:;1uNN6&BCAf+A1utt}}$v*JQqT*QRJJt{{,,T^^B-?!A$-FGHHs   Tcz

4#5#5b#9: ;;3"9!$--"52s;v2Jc2RSTs   I7 72K=+6K=$K=<K=c                r     X   nUS;   a  US-  nM  US;  a  U$   [        R                  X5      nUc  O.U =R                  S-  sl        UR	                  5       =U l        nMG  [        R                  X5      nUb  UR	                  5       n[        R                  X5      nUc  U$ S$ ! [          a     gf = f)zbSkip white space, newlines and comments.
return -1 if EOF, else position of first non-ws character>   	 r@   >   
r3   r   )
IndexErroreolmatchr   endr   wseof)r   r   r8   rB  r   s        r9   r   SinkParser.skipSpace  s    

	Y$FA00H 		&$AyJJ!OJ#$557*Dq  HHV=AIIf Iq%2%  		s   B) )
B65B6c                J   U R                  X5      nUS:  a  gX   S:w  a  gUS-  nUnX   [        ;   a  U R                  XSX   -  5        [        U5      nX%:  a$  X   [        ;  a  US-  nX%:  a  X   [        ;  a  M  U R
                  c  U R                  R                  U R                  S-   XU -   5      nX`R                  ;  a0  U R                  R                  X`R                  S9U R                  U'   UR                  U R                  U   5        U$ U R                  R                  U R                  S-   XU -   5      nX`R                  ;  a0  U R
                  R                  X`R                  S9U R                  U'   UR                  U R                  U   5        U$ )z?abc -> variable(:abc)r   r   rw  r@   z#Variable name can't start with '%s'r3   r  )r   numberCharsr"   rF   r   r   r   r   r   r   r   r   r   r-  r   )r   r   r8   r   r   
len_argstrvarURIs          r9   r{  SinkParser.variable6  s    NN6%q59	Q9#NN6&Kfi&WX[
n2C!CFA n2C!C&[[**4==3+>!+LMF__,*.--*D*D +E +' JJtv./H
 &&t}}s':Va['HI...,0,?,?,L,LMM -M -D!!&) 	

4((01r:   c                    U R                  X5      nUS:  a  gX   [        ;   d  X   [        ;   a  gUn[        U5      nX%:  a$  X   [        ;  a  US-  nX%:  a  X   [        ;  a  M  UR	                  XU 5        U$ )zabc -> :abcr   r   r@   )r   r  r   rF   r-  )r   r   r8   r   r   r  s         r9   r   SinkParser.bareWord[  s}    NN6%q59#vy4E'E[
n2C!CFA n2C!C

6A;r:   c                d   U R                  X5      nUS:  a  gX   nU[        ;   a  g[        U5      nU[        ;  aB  UnUS-  n X   [        ;  a  US-  nX   [        ;  a  M  XS-
     S:X  a  US-  nX&:X  a  gXU nOSnX%:  Ga]  X   S:X  GaT  UnUS:X  a  [        n	O[
        n	US-  nSn
UnSnX%:  a  X   nUS	:X  a  U
(       d  S
n
X:  a  XqX -  nUS-   nOXI;  d  U
(       a  U
(       a1  U[        ;  a&  [        U R                  U R                  UUSU-   5      eOJUS:X  aD  XS-      [        ;  d  XS-      [        ;  a&  [        U R                  U R                  UUSU-   5      eSn
OOUS-  nX%:  a  M  U
(       a"  [        U R                  U R                  XS5      eXS-
     S:X  a  [        U5      S:X  a  X:X  a  gUS-  nX:  a  XqX -  nUR                  X45        U$ U(       a5  U R                  (       a$  XpR                  ;  a  UR                  SU45        U$ g! [         a     GNf = f)zf
xyz:def -> ('xyz', 'def')
If not in keywords and keywordsSet: def -> ('', 'def')
:def -> ('', 'def')
r   r   r@   rC   r4   r?   rv  FrV   Tzillegal escape %rA   zillegal hex escape zqname cannot end with \)r   numberCharsPlusrF   r   r  r   escapeCharsr"   r   r   hexCharsr-  r   r   )r   r   r8   r   cr  r   rI  r  allowedChars	lastslashstarts               r9   r   SinkParser.qnamej  ss    NN6%q5I[
M!AFAi}4FA i}4
 !e}#Q6!B B>fi3.Ccz,-FAIEB.I9Y $IyUo-EE*i K/"+ $ $

 & ! 1A 5#  0 c"q5M9%!e}H<"+ $ $

 & ! 5 9#  !&IQA .D MM4::v:T  !e}#r7a<EJQyUo%JJy!H d&&2]]+B

B8$_  s   H! !
H/.H/c                P   U R                  XU5      nUS:  a  U$ U R                  X5      nUS:  a  gUnX   nXPR                  ;   a_  US-  nXUS-    U:X  a  UnUS-  nOUnUS-  nU R                  XU5      u  pHUR	                  U R
                  R                  U5      5        U$ g)Nr   r   rB   r@   )r$  r   r   strconstr-  r   
newLiteral)	r   r   r8   r   r   rB  ch_threedelimrX   s	            r9   r  SinkParser.object  s     LLC(6Hv)A1uB+++6a!e$0$EFAEFA}}V6

4;;11!45r:   c                :   U R                  XU5      nU R                  nUS:  a  U$ U R                  X5      nUS:  a  gUnX   nU[        ;   a  [        R                  X5      nU(       a.  UR                  5       nUR                  [        XU 5      5        U$ [        R                  X5      nU(       a.  UR                  5       nUR                  [        XU 5      5        U$ [        R                  X5      nU(       a.  UR                  5       nUR                  [        XU 5      5        U$ US-  nX`R                  ;   a  XUS-    U:X  a  Un	US-  nOUn	US-  nS n
U R                  XU	5      u  pKS nX   S:X  aM  [        R                  XS-   5      nUc  [!        U R"                  UUUS5      eUR                  5       nXS-   U nUnXUS-    S:X  a  / nU R%                  XS-   U5      nUS   n
UR                  U R&                  R)                  XU5      5        U$ g)	Nr   r   rB   r@   r   z3Bad language code syntax on string literal, after @rA   z^^)rA  r   r   r  exponent_syntaxr  r  r-  r.   decimal_syntaxr   integer_syntaxr   r   r  langcoder"   r   r   r   r  )r   r   r8   r   r   	startlinerB  r   r  r  dtrX   langres2s                 r9   r?  SinkParser.nodeOrLiteral  s   IIf%JJ	6Hv)A1uB_$#))&4AJJvfqk23H"((3AJJwv{34H"((3AJJy!56H AvH+++a!e$0$EFAEFA}}V69# v1u5Ay' MM%"V  A!a%!,DAa!e$,-/Df!eT:AaB

4;;11!>?r:   c                :    [        U[        5      (       a  US   $ U$ )Nr@   )r   tuple)r   rk  s     r9   r   SinkParser.uriOf;  s    c5!!q6M
r:   c                >   US   nUS-  US-  US-  US-  4u  pVpxUn	Sn
U R                   n[        U5      nX:  Ga  X   U:X  a^  X4:X  a  U	S-   nX*4$ X6:X  aL  XU	S-    U:X  a  U	S-   nX-  n
X*4$ XU	S-    U:X  a  U	S-   nX-  n
X*4$ XU	S-    U:X  a  U	S-   nX*4$ U	S-  n	X-  n
Ml  [        R                  X5      nU(       d   SXS	-
  U	 < S
XU	S	-    < 35       eUR	                  5       n XX -  n
X   nUU:X  a  Un	M  US;   a  UU:w  a  U
U-  n
US-   n	M  US;   aD  X4:X  a  [        U R                  UUUS5      eU =R                   S-  sl         U
U-  n
US-   n	Xl        OUS:X  a  US-   n	X   nU(       d  [        U R                  UUUS5      eSR                  U5      nUS:  a  SU   nU
U-  n
U	S-  n	OZUS:X  a  U R                  XS-   U5      u  n	nU
U-  n
O6US:X  a  U R                  XS-   U5      u  n	nU
U-  n
OU R                  XS5        X:  a  GM  U R                  XS5        g! [
         ai    SnXU  H  nUS[        U5      -  -   nM     [        R                  " 5       S   R                  5       n[        U R                  UUU	SSU< SU< 3-   5      ef = f)zBparse an N3 string constant delimited by delim.
return index, val
r   rA   rB         r4   r@   z!Quote expected in string at ^ in    r=  z %02xz"Unicode error appending charactersr  z to string, because
	>   r   r   >   r  r  znewline found in string literalrV   zunterminated string literal (2)z
abfrtvn\"'z
	
\"'uUz
bad escapezunterminated string literalN)r   rF   interestingsearchr  UnicodeErrorordsysexc_info__str__r"   r   r   rD   uEscapeUEscape)r   r   r8   r  delim1delim2delim3delim4delim5r   ustrr  r  r   errr  streasonrB  r  uchs                       r9   r  SinkParser.strconstA  sK    q)/!VaZ!VVWZ)W&JJ	[
nyF"?AA7NO!a%(F2E w!a%(F2E w!a%(F2E w FAND""6-A 2v"1r6" 1
 	Aq#" BV|z!bFl
E|#?#!9  

a

E#$ tEY#!9  #''+6/2CCKDFA3Y LLQ	BEArBJD3Y LLQ	BEArBJDNN6l;A nD 	v"?@   !A3q6!12C %<<>!,446MM88;XFG s   (H) )A3Jc                    [        U5      X%-   :  a  [        U R                  X1US5      e X%-   UR                  [        SU-   XX%-    -   5      4$ ! [
         a!    [        U R                  UUUSXX%-    -   5      ef = f)Nzunterminated string literal(3)rV   zbad string literal hex escape: )rF   r"   r   r}  r   r   )r   r   r8   r  regnr   s          r9   _unicodeEscapeSinkParser._unicodeEscape  s     v;y!5U 		5#''-AEAR1RSSS 	1Fqu4EE 	s   #A +A:c                4    U R                  XU[        SS5      $ )Nr  r  )r  r~  r   r   r8   r  s       r9   r  SinkParser.uEscape      ""6iCPPr:   c                4    U R                  XU[        SS5      $ )N   r  )r  r|  r  s       r9   r  SinkParser.UEscape  r  r:   c                F    [        U R                  U R                  XU5      erp   )r"   r   r   )r   r   r8   msgs       r9   r"   SinkParser.BadSyntax  s    tzz6cBBr:   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )Nr4   Nr4   NF)r   r,   r   Optional[Formula]r   rm   r   rg   r   rm   r   Optional[Callable[[], None]]r   bool)r8   r   returnrm   )r  r  )r   zUnion[IO[str], IO[bytes]]r  r  )r   Union[str, bytes]r  r  )r   r  r  None)r   rm   r   r   r  r   )F)
r   rm   r   rm   r8   r   r   r  r  r   )r   rm   r   rm   r8   r   r  r   )r   rm   r8   r   r  r   )r  rm   r  r	  r  r  )r  zOptional[typing.List[str]]r  r  r  r  )r   rm   r8   r   r   MutableSequence[Any]r  r   )r   rm   r   r  r  r   rp   )r  rg   r  r   )rI  rm   r  r   )
r   rm   r8   r   r   r  r]  zOptional[Node]r  r   )r   rm   r8   r   rC  r   r  r   )
r   rm   r   r   r   r  ro  z/Callable[[str, int, MutableSequence[Any]], int]r  r   )r   rm   r8   r   r   z3MutableSequence[Union[Identifier, Tuple[str, str]]]r  r   )rk  z"Union[Identifier, Tuple[str, str]]r  rm   )r   rm   r8   r   r  rm   r  Tuple[int, str])r   rm   r8   r   r  r   r  zPattern[str]r  r   r   rm   r  r  )r   rm   r8   r   r  r   r  r  )r   rm   r8   r   r  rm   r  r   )/r   r   r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r$  r1  r,  r"  r9  rL   rK  rA  r  r   rW  r   r   r   r{  r   r   r  r?  r   r  r  r  r  r"   r   rT   r:   r9   r-   r-     sP    *.!%,0L6L6 'L6 	L6
 L6 L6 *L6 L6\U+H8.2"bH<|&!,
@

)Tl))O* *.BB B "	B
 'B 
BH/b>> > "	>
 >> 
>@TJX&:#Jjj j A	j
 
jX  "	
 
BBHmA^  	
    
0QQCr:   r-   c                  <    \ rS rSrSS jrSS jr\SS j5       rSrg)	r"   i  c                `    UR                  S5      U l        X@l        XPl        X l        Xl        g Nr   )encode_str_i_whyr   _uri)r   r  r   r   r8   r   s         r9   r   BadSyntax.__init__  s&    MM'*		
	r:   c           
         U R                   nU R                  nSnUS:  a  SnUS-
  nOSn[        U5      U-
  S:  a  SnOSnSU R                  S-   U R                  U R
                  UXU XUS-    U4-  $ )Nr   <   z...r4   z8at line %i of <%s>:
Bad syntax (%s) at ^ in:
"%s%s^%s%s"r@   )r  r  rF   r   r  r  )r   r   r8   r  preposts         r9   r  BadSyntax.__str__  s    GGr6CRBCv;?RDD LJJNIIIIaLq2vO
 
 	
r:   c                    [        U 5      $ rp   )rm   r   s    r9   messageBadSyntax.message  s    4yr:   )r  r  r  r  r   N)
r  rm   r   r   r   rm   r8   r   r   rm   r  rm   )	r   r   r   r   r   r  propertyr  r   rT   r:   r9   r"   r"     s     
2  r:   r"   c                  r    \ rS rSrSrSS jrSS jrSS jr S     SS jjrSSS jjr	SS	 jr
SS
 jrSrg)r+   i  r   c                
   [        5       R                  U l        SU l        [        =R
                  S-  sl        [        R
                  U l        0 U l        0 U l        [        UR                  U R                  5       S9U l        g )Nr   r@   )r   
identifier)r   hexuuidcounterr+   numberexistentials
universalsr   r   idquotedgraph)r   parents     r9   r   Formula.__init__   sW    GKK	!nn.0,.&V\\dggiPr:   c                     SU R                   -  $ Nz_:Formula%s)r  r   s    r9   r  Formula.__str__
  s    t{{**r:   c                2    [        SU R                  -  5      $ r  )r   r  r   s    r9   r  
Formula.id  s    ]T[[011r:   Nc                    Uc>  U =R                   S-  sl         [        SU R                  < SU R                   < 35      nU$ [        UR                  S5      R	                  5       R                  SS5      5      nU$ )Nr@   fbr3   rv  )r  r   r  splitr@  rW   )r   r  r   bns       r9   r8  Formula.newBlankNode  sd     ;LLAL499dll;<B 	 syy~))+33C=>B	r:   c                R    [        UR                  S5      R                  5       5      $ )Nr3   )r    r  r@  )r   r  r   s      r9   r   Formula.newUniversal  s    		#**,--r:   c                >    U R                  5       U R                  U'   g rp   )r8  r  )r   r   s     r9   r   Formula.declareExistential  s    #002!r:   c                    U R                   $ rp   )r  r   s    r9   r[  Formula.close   s    r:   )r  r  r  r  r   r  )r  r   r  )r  r   )NN)r  rg   r   Optional[Any]r  r   rp   )r  rm   r   r  r  r    )r   rm   r  r  )r  r   )r   r   r   r   r  r   r  r  r8  r   r   r[  r   rT   r:   r9   r+   r+     sI    FQ+2 ?C .;	.3 r:   r+   z([\x80-\xff])c                      \ rS rSrSS jrSS jrSS jrSS jr   S       SS jjrSS jr	SS	 jr
SS
 jrSS jr S     SS j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)#r,   i'  c                ^    S U l         [        5       R                  U l        SU l        Xl        g r   )rootFormular   r  r  r  graph)r   r  s     r9   r   RDFSink.__init__(  s#    .2GKK	
r:   c                    [        U R                  R                  SS5      nU(       d  [        S5      e[	        U R                  5      nU$ )Nformula_awareFz:Cannot create formula parser with non-formula-aware store.)getattrr  r   r   r+   )r   far  s      r9   r   RDFSink.newFormula.  sB    TZZ%%>L  DJJr:   c                B    [        U R                  R                  U5      $ rp   )r   r  r   )r   r  s     r9   newGraphRDFSink.newGraph7  s    TZZ%%z22r:   c                    [        US   5      $ r   )r   r   rr   s     r9   r   RDFSink.newSymbol:  s    d1gr:   Nc                   [        U[        5      (       a  UR                  U5      $ [        U[        5      (       d  Uc>  U =R                  S-  sl        [        SU R                  < SU R                  < 35      nU$ [        [        US   5      R                  S5      R                  5       R                  SS5      5      nU$ )Nr@   r  r  r   r3   rv  )r   r+   r8  r   r  r   r  rm   r  r@  rW   )r   argr  r   r  s        r9   r8  RDFSink.newBlankNode=  s     c7####C((U##s{LLAL499dll;<B 	 s3q6{((-113;;CEFB	r:   c                4    U(       a	  [        XS9$ [        XS9$ )Ndatatype)r  )r   )r   rX   r  r  s       r9   r  RDFSink.newLiteralL  s    1**1((r:   c                ~   U R                  S5      nU(       d  U$ U R                  S5      nU R                  S5      nU R                  U5      =pgUS S  H<  nU R                  X$Xx45        U R                  U5      n	U R                  X%Xy45        U	nM>     U R                  X$XqS   45        U R                  X%Xs45        U$ )Nz.http://www.w3.org/1999/02/22-rdf-syntax-ns#nilz0http://www.w3.org/1999/02/22-rdf-syntax-ns#firstz/http://www.w3.org/1999/02/22-rdf-syntax-ns#restr   )r   r8  r  )
r   r  r  rd   ra   rb   afr   neans
             r9   r\  RDFSink.newListR  s    nnMNJQR~~OP""1%%CR&B!01""1%B/0A	 
 	Aa2/0AQ,-	r:   c                    [        U5      $ rp   )setr%  s     r9   rY  RDFSink.newSetd  s    4yr:   c                2    SR                  S U 5       5      $ )Nr?   c              3  8   #    U  H  n[        U5      v   M     g 7frp   )repr).0r  s     r9   	<genexpr>.RDFSink.setDefaultNamespace.<locals>.<genexpr>h  s     .AQs   )r&   r%  s     r9   r
  RDFSink.setDefaultNamespaceg  s    xx....r:   c                   Uu  p4pV[        US5      (       a  [        S5      eU R                  X55      nU R                  X45      nU R                  X65      nX0R                  :X  a  U R                  R                  XTU45        g [        U[        5      (       a  UR                  R                  XTU45        g UR                  XTU45        g )Nr   zFormula used as predicate)	hasattrr   	normaliser  r  addr   r+   r  )r   r  r   r  prX   os          r9   r  RDFSink.makeStatementj  s    
 
a1i  9:: NN1 NN1 NN1    JJNNA!9%7##MMqQi( EE1)r:   c                   [        U[        5      (       a  [        [        US   5      5      $ [        U[        5      (       a'  [        [        U5      R                  5       [        S9nU$ [        U[        5      (       d  [        U[        5      (       a  [        [        U5      [        S9nU$ [        U[        5      (       a#  [        U5      nUS:X  a  Sn[        U[        S9nU$ [        U[        5      (       a  [        [        U5      [        S9nU$ [        U[        5      (       a@  X!R                   ;   a1  ["        (       a  [        U[        5      (       d   eUR                   U   $ U$ )Nr@   r+  z-00)r   r  r   rm   r  r   r   BOOLEAN_DATATYPEr   r   INTEGER_DATATYPEr   DECIMAL_DATATYPEr.   DOUBLE_DATATYPEr+   r  r   )r   r  r  rX   values        r9   r?  RDFSink.normalise  s   
 a#ad)$$aA1ABAHaAy!9!9A)9:AHa!!FE}(89AHa  A9AHa!!NN" =%a0000~~a(( r:   c                    U$ rp   rT   )r   	somethings     r9   rX  RDFSink.intern  s    r:   c                    g rp   rT   )r   r  r  s      r9   r   RDFSink.bind      r:   c                    Xl         g rp   )r  r   r   s     r9   r   RDFSink.startDoc  s    "r:   c                    g rp   rT   rS  s     r9   r   RDFSink.endDoc  rQ  r:   )r  r  r  r  )r  r   )r  r+   )r  r   r  r   )rr   rm   r  r   )NNN)r(  z$Optional[Union[Formula, Graph, Any]]r  rg   r   r  r  r   )rX   rm   r  zOptional[URIRef]r  rg   r  r   )r  ztyping.List[Any]r  r  r  r   )rr   r1   r  z
Set[_AnyT])rr   r	  r  rm   rp   )r  z8Tuple[Optional[Union[Formula, Graph]], Node, Node, Node]r   r  r  r  )r  r  r  z9Union[Tuple[int, str], bool, int, Decimal, sfloat, _AnyT]r  z$Union[URIRef, Literal, BNode, _AnyT])rM  r1   r  r1   r  )r   r  r  r  )r   r   r   r   r   r   r"  r   r8  r  r\  rY  r
  r  r?  rX  r   r   r   r   rT   r:   r9   r,   r,   '  s    3
 59!,0	1  *	
 
)$/ "K  
	4'' E' 
.	'R#r:   r,   c                    SnU  HB  n[        U5      S:  d  [        U5      S:  a  S[        U5      -  nOS[        U5      -  nX-   nMD     UR                  S5      $ )zUse URL encoding to return an ASCII string
corresponding to the given UTF8 string

```python
>>> hexify("http://example/a b")
b'http://example/a%20b'

```
r4   ~   !   z%%%02Xz%czlatin-1)r  r  )r  rX   rB  s      r9   r*   r*     s[     	Ar7S=CGbLCG#BBBF  88Ir:   c                  B    \ rS rSrSrS r  S         SS jjrSrg)	r$   i  z>An RDFLib parser for Turtle

See http://www.w3.org/TR/turtle/
c                    g rp   rT   r   s    r9   r   TurtleParser.__init__  rQ  r:   c                   US;  a  [        SU-  5      e[        U5      nUR                  UR                  5       =(       d    UR	                  5       =(       d    S5      n[        XVUS9nUR                  5       nU(       d  UR                  5       nUR                  U5        UR                  R                  5        H  u  pUR                  X5        M     g )Nr  z:N3/Turtle files are always utf-8 encoded, I was passed: %sr4   )r   r   )r   r,   
absolutizegetPublicIdgetSystemIdr-   getCharacterStreamgetByteStreamr   r   itemsr   )r   sourcer  encodingr   sinkr   rA  r   r   	namespaces              r9   parseTurtleParser.parse  s     ?*LxW  u~""6#5#5#7#U6;M;M;O#USUVtV<**,))+F	V!"!2!2!4FJJv) "5r:   rT   N)r   T)
rd  r0   r  r   re  rg   r   r  r  r  r   r   r   r   r   r   rh  r   rT   r:   r9   r$   r$     sN    
 #*** *  	*
 * 
* *r:   r$   c                  <    \ rS rSrSrS r S       SS jjrSrg)	r#   i  zRAn RDFLib parser for Notation3

See http://www.w3.org/DesignIssues/Notation3.html
c                    g rp   rT   r   s    r9   r   N3Parser.__init__  rQ  r:   c                &   [        UR                  SS5      n[        UR                  SS5      nU(       d  [        S5      eU(       d  [        S5      e[        UR                  S9nX&l        UR
                  Ul        [        R                  XXcSS9  g )Ncontext_awareFr  z-Cannot parse N3 into non-context-aware store.z-Cannot parse N3 into non-formula-aware store.)r   )r   )r  r   r   r   default_contextnamespace_managerr$   rh  )r   rd  r  re  car  
conj_graphs          r9   rh  N3Parser.parse  s    
 U[[/59U[[/59MNNMNN5;;/
%*" (-'>'>
$4eLr:   rT   N)r   )rd  r0   r  r   re  rg   r  r  rj  rT   r:   r9   r#   r#     sC    

 LSM!M*/M;HM	M Mr:   r#   )r   )r6   rm   r7   r   r  zTuple[str, str])rG   rm   rH   rm   r  rm   r  )rX   rm   r  rm   )rr   r   rs   r   r  r  )r   r
   r  rm   )r  rm   r  r	  )r   
__future__r   r   rR   rer  typingry   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r  r   rdflib.compatr   rdflib.exceptionsr   rdflib.graphr   r   r   rdflib.termr   r   r   r   r   r   r   r    r!   __all__rdflib.parserr/   r0   r1   r%   rm   r;   r&   r'   rQ   CONTEXTPREDSUBJOBJPARTSALL4SYMBOLFORMULALITERAL
LITERAL_DTLITERAL_LANG	ANONYMOUS
XMLLITERALr/  NODE_MERGE_URI
forSomeSym	forAllSymRDF_type_URI
RDF_NS_URIOWL_NSDAML_sameAs_URIparsesTo_URIRDF_specList_NS_Old_Logic_NSN3_firstN3_restN3_liN3_nilN3_ListN3_Emptyrh   __annotations__r(   rl   r)   r   chatty_flagrt   rw   N3_forSome_URIN3_forAll_URIry  r.  r0  LOG_implies_URIrF  rH  rI  FLOAT_DATATYPErG  option_noregenr4  r   r   r   _rdfnsr  r  r  r  r   compiler~  r|  N3CommentCharacterr  r  r  signed_integerr  r  r  digitstringr  r  r.   r-   SyntaxErrorr"   r+   r_hibyter,   r*   r$   r#   rT   r:   r9   <module>r     s  : #  	 	 
        # ) 4 4
 
 
  !), 	s#h,V	4 dCdC	



	
0D	!
x	@:
	)8#*$1
8Gg%&7V#
$	4 
'E/	"7V#
$Gg%& $( = ' 	
. 
	
	
  
 L!'>i' i' X%G#i'  ;<"cU* #&	6'(*+- c
*E 2323  
 	jj)*jj%&ZZ	N+N+23**@ jj#jj,-::56?S ?CC CCT*# #N$  $ N ::&'P Pr* *6  *FM| Mr:   