
    PiL                      U d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	 ddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZm Z m!Z! dd
l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ g dZ,ddl-m.Z. erddl-m/Z/  ed          Z0dodpdZ1 ede2          Z3dqdZ4drdZ5dsdZ6dZ7dZ8dZ9d Z:e8e9e:fZ;e7e8e9e:fZ<dZ=dZ>dZ?d!Z@d"ZAd ZBd#ZCd$ZDeDd%z   ZEeDd&z   ZFeDd'z   ZGd(ZHd)ZId*ZJeJd+z   ZKeDd,z   ZLd-ZMeIZNd.ZOe=eNd/z   fZPe=eNd0z   fZQe=eNd1z   fZRe=eNd2z   fZSe=eNd3z   fZTe=eNd4z   fZUdaVd5eWd6<   drd7ZXdaYdrd8ZZd9Z[d:Z\dtd?Z]dtd@Z^eFZ_eGZ`dAZae=eHfZbe=eKfZcdBZde#dCz   Zee#dDz   Zfe#dEz   Zge#dFz   Zhe#dGz   ZidZj ekdH          ZleldIhz  ZmeldJhz  Znd)Zo ekdK          Zp ekdL          Zq ekdM          ZrerdNdIhz  ZsdudQZt eju        dR          Zv eju        dS          ZwdAZx eju        dT          Zy eju        dU          Zz eju        dV          Z{ eju        dW          Z| eju        dW          Z} eju        dX          Z~ eju        dY          Z eju        dZ          Z eju        d[          Z eju        d\          Z G d] d^e2          Z G d_ d`          Z G da dbe          Z G dc dd          Z eju        de          Z G df dg          ZdvdjZ G dk dle.          Z G dm dne          ZdS )wa  
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_AnyTurirefstrpuncintreturnTuple[str, str]c                h    |                      d          }|dk    r| d|         | |d         fS | dfS )zSplit a URI reference before the fragment

    Punctuation is kept. e.g.

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

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

    ```
    #r   N )rfind)r2   r4   is      t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/parsers/notation3.pyr%   r%   a   sC     	SAAvvbqbz6!"":%%rz    _StrT)boundheretherec                   |                     d          }|                     d          }|dk    r|dk     s||k     r|S |                      d          }|dk    sJ d| z              t          |          \  }}|s| |z   S | |dz   |dz            dk    rt          d| d|d	          | |dz   |d
z            dk    r|                      d|d
z             }n|dz   }|dk     rt          |           }| dz   } |dd         dk    r| d|dz            |z   S |dd         dk    r| d|         |z   S |                     d          }	 |dd         dk    r
|dd         }|dk    rd}nL|dd
         dk    s|dk    r7|d
d         }|                     d||          }	|	dk    r| d|	dz            } |	}nnn| d|dz            |z   |z   S )a  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./.r:   z../z..)findr%   
ValueErrorlenr;   )
rA   rB   slashlcolonlbcolonlpathfragbpathslashrr<   s
             r=   r&   r&   z   sU   ^ ZZ__FZZ__F {{

fvooiinnGa<<<'$. << E""JD$ d{ GaK'A+%&#--j-1TT555:
 
 	

 GaK'A+%&$..		#w{++! qyyD		cz RaRyDMgkM"U** RaRyCFUF|e##ZZ__F8t8D3;;DD"1"X$$,,8D

3v..AAvvGa!eG} &1*$t++r>   c                 N    dt          t          j                              z   dz   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://rD   )	_fixslashosgetcwd r>   r=   r'   r'      s"     y---33r>   sc                v    |                      dd          } | d         dk    r| d         dk    r
| dd         } | S )z7Fix windowslike filename to unixlike - (#ifdef WINDOWS)\rD   r   rF   rE   rG   N)replace)rY   s    r=   rU   rU      s@    			$Ats{{qts{{abbEHr>   rF   rG   rH            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                 t    t           +t          t                      t                                dz   a t           S )z;Returns a URI suitable as a namespace for run-local objectsNr9   )rl   r&   r'   r!   rX   r>   r=   r(   r(   #  s-       66<r>   c                 b    t           dz  a t                      dz   t          t                     z   S )zA unique URIrF   u_)nextur(   r3   rX   r>   r=   r)   r)   /  s'     
QJE>>D 3u::--r>   F2   argsr   kargsNonec                     d S NrX   rr   rs   s     r=   BecauseOfDatarx   <      Dr>   c                     d S rv   rX   rw   s     r=   becauseSubexpressionr{   A  ry   r>   r9   z*http://www.w3.org/2000/10/swap/log#impliesbooleandecimaldoublefloatintegerz	
 !"#$&'()*,+/;<=>?@[\]^`{|}~rI   rE   ABCDEFabcdef0123456789z(_~.-!$&'()*+,;=/?#@%)z0123456789-+mr
   c                    	 t          t          |                     d          d                    S # t          $ r& t          d|                     d          z             w xY w)NrF      zInvalid unicode code point: )chrr5   group	Exception)r   s    r=   unicodeExpandr   j  sg    E3qwwqzz2&&''' E E E6CDDDEs	   /2 0A"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                      e Zd ZdZdS )r.   z4don't normalize raw XSD.double string representationN)__name__
__module____qualname____doc__rX   r>   r=   r.   r.     s        >>>>r>   r.   c                  t   e Zd Z	 	 	 	 	 	 dddedZdfdZdgdZdhdZdidZdjdZdkd"Z	dldmd%Z
dnd&Zdod'Zdod(Zdpd,Zdqd/Zdrd0Zdgd1Zdrd2Zdod3Zdsd6Zdsd7Zdsd8Zdtd9Zdudvd;Zdsd<Zdwd>Z	 dudxdAZdydDZdzdHZdsdIZdodJZdsdKZ dodLZ!dodMZ"dsdNZ#d{dPZ$dsdQZ%dsdRZ&d|dUZ'd}dXZ(d~d^Z)dd_Z*dd`Z+ddcZ,dS )r-   Nr:   Fstorer,   openFormulaOptional[Formula]thisDocr3   baseURIrk   	genPrefixwhyOptional[Callable[[], None]]turtleboolc                B   i | _         |dk    rd|v sJ d|z              |dz   | j         d<   || _        |r|                    |           || _        d| _        d| _        || _        g d| _        d| _        i | _	        i | _
        i | _        || _        || _        |rdnd| _        d	| _        t           r.t#          |                    |          | j        
          | _        |  |r|| _        n|r|| _        nd	| _        | j        rd| j        v sJ | j        s*| j        r| j        dz   | _        nt)                      | _        |  |A|s?| j        r|                    |dz             | _        n!|                                | _        n|| _        | j        | _        d	| _        d	S )zdnote: namespace names should *not* end in  # ;
        the  # will get added during qname processingr:   rE   zDocument URI not absolute: <%s>r9   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_reasonr   string_delimiters_reason2trackingrx   	newSymbol_baseURIr)   
newFormula_formula_context_parentContext)selfr   r   r   r   r   r   r   s           r=   __init__zSinkParser.__init__  s    b=='>>>#Dw#N>>>!(3DN2 	*y)))
#QQQ13/157 06!A67; 	)(($,  DM 	$ 	%#DMM % ' $=8C4=$8$8$88 	.} ."&-%"7"+++(v} 3 % 0 0;1F G G % 0 0 2 2'DM+/=15r>   r<   r5   r6   c                <    d| j         | j        || j        z
  dz   fz  S )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%irF   )r   r   r   )r   r<   s     r=   rA   zSinkParser.here  s(     dotz1t?O;ORS;STTTr>   c                    | j         S rv   )r   r   s    r=   formulazSinkParser.formula  s
    }r>   streamUnion[IO[str], IO[bytes]]c                P    |                      |                                          S rv   )loadBufread)r   r   s     r=   
loadStreamzSinkParser.loadStream  s    ||FKKMM***r>   bufUnion[str, bytes]c                |    |                                   |                     |           |                                 S )z1Parses a buffer and returns its top level formula)startDocfeedendDoc)r   r   s     r=   r   zSinkParser.loadBuf  s,    		#{{}}r>   octetsrt   c                   t          |t                    s\|                    d          }t          |          dk    r3|d         t          j                            d          k    r
|dd         }n|}d}|dk    rY|                     ||          }|dk     rdS |                     ||          }|dk     r|                     ||d           |dk    WdS dS )a  Feed 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   rF   Nzexpected directive or statement)	
isinstancer3   decoderL   codecsBOM_UTF8	skipSpacedirectiveOrStatementr"   )r   r   rY   r<   js        r=   r   zSinkParser.feed  s     &#&& 	g&&A1vvzzadfo&<&<W&E&EEEabbEA1ffq!$$A1uu))!Q//A1uuq!%FGGG 1ffffffr>   argstrhc                T   |                      ||          }|dk     r|S | j        r|                     ||          }|dk    r|S |                     ||          }|dk    r|                     ||          S |                     ||          }|dk    r|                     ||          S |S Nr   )r   r   sparqlDirective	directivecheckDot	statement)r   r   r   r<   r   s        r=   r   zSinkParser.directiveOrStatement  s    NN61%%q55H; 	$$VQ//AAvvNN61%%66==+++NN61%%66==+++r>   tokcolonc                    |d         t           vsJ ||         dk    r|dz  }n|| j        vrdS |t          |          z   }|||         |k    r||         t          v s|r||         dk    r|S dS )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   @rF   rE   )_notNameCharsr   rL   _notKeywordsChars)r   r   r   r<   r   i_plus_len_toks         r=   r   zSinkParser.tok(  s     1v]****!9FAA$-''rSXX1^#$++'+<<< = 0C77!!2r>   c                    |d         t           vsJ t          |          }||||z                                            |                                k    r|||z            t          v r||z  }|S dS )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   rL   lower_notQNameChars)r   r   r   r<   len_toks        r=   	sparqlTokzSinkParser.sparqlTokA  sw     1v]****c((!a'k/"((**ciikk991w;>11LAH2r>   c                ,   |                      ||          }|dk     r|S g }|                     d||          }|dk    r|                     ||d           |                     d||          }|dk    rw| j        r|                     ||d           |                     |||| j                  }|dk     r|                     ||d           |                     |d d                     |S |                     d||          }|dk    r| j        r|                     ||d           |                     |||| j                  }|dk     r|                     ||d	           |D ]6}|| j        vs	|| j	        v r"| j
                            |          | j        |<   7|S |                     d
||          }|dk    ry| j        r|                     ||d           |                     |||| j                  }|dk     r|                     ||d           |D ]}| j
                            |           |S |                     d||d          }|dk    rg }|                     |||          }|dk     r|                     ||d           |                     |||          }|dk     r|                     ||d           |                     |d                   }| j        rt!          | j        |          }nd|vr|                     ||d| d           d|v sJ || j        |d         d         <   |                     |d         d         t'          |                     |S |                     d||          }|dk    rg }|                     |||          }|dk     r|                     ||d           |                     |d                   }| j        rt!          | j        |          }n|                     ||d|z   dz              d|v sJ || _        |S dS )Nr   r   z%keyword bind is obsolete: use @prefixr   z%Found 'keywords' when in Turtle mode.z/'@keywords' needs comma separated list of wordsrb   z#Found 'forAll' when in Turtle mode.zBad variable list after @forAllra   z$Found 'forSome' when in Turtle mode.z Bad variable list after @forSomeprefixT)r   expected qname after @prefix'expected <uriref> after @prefix _qname_rF   rE   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   r<   r   resxtnss           r=   r   zSinkParser.directiveR  s   NN61%%q55H "HHVVQ''q55NN61&MNNNHHZ++q55{ Svq*QRRR''3FFA1uuAP   SV$$$HHHXvq))q55{ Qvq*OPPP''3FFA1uuvq*KLLL G GDO++qD4I/I/I)-)C)CA)F)FDOA&HHHY**q55{ Rvq*PQQQ''3FFA1uuvq*LMMM 4 4003333HHHXvqH5566ACA

61a((A1uuvq*HIIIfa++A1uuvq*STTTjj1&&B} $-,,BRRRRR  
 "9999&(DN1Q47#IIad1gvbzz***HHHVVQ''66Afa++A1uuvq*GHHHAaD!!B} 
$-,,1    "9999DMHrr>   c                   |                      ||          }|dk     r|S |                     d||          }|dk    rg }|                     |||          }|dk     r|                     ||d           |                     |||          }|dk     r|                     ||d           |                     |d                   }| j        rt          | j        |          }n!d|vr|                     ||d|z   dz              d|v sJ || j        |d         d         <   | 	                    |d         d         t          |                     |S |                     d	||          }|dk    rg }|                     |||          }|dk     r|                     ||d
           |                     |d                   }| j        rt          | j        |          }n|                     ||d|z   dz              d|v sJ || _        |S dS )za
        turtle and trig support BASE/PREFIX without @ and without
        terminating .
        r   PREFIXr   r   rF   rE   r   r   BASEr   r   r   )r   r   r   r"   r   r   r   r&   r   r   r*   )r   r   r<   r   r   r   s         r=   r   zSinkParser.sparqlDirective  sG    NN61%%q55HNN8VQ//66"$A

61a((A1uuvq*HIIIfa++A1uuvq*STTTAaD!!B} 
$-,,B2    "9999&(DN1Q47#IIad1gvbzz***HNN661--66Afa++A1uuvq*GHHHAaD!!B} 
$-,,1    "9999DMHrr>   qnuribytesc                    t          |t                    s
J d            |dk    r| j                            |           d S | j                            ||           d S )Nz&Any unicode must be %x-encoded alreadyr:   )r   r  r   setDefaultNamespacer   )r   r  r  s      r=   r   zSinkParser.bind  sd    #u%%OO'OOO%88K++C00000KR%%%%%r>   kOptional[typing.List[str]]c                8    |	d| _         dS || _        d| _         dS )zTakes a list of stringsNr   rF   )r   r   )r   r  s     r=   r   zSinkParser.setKeywords  s*    9 DDM Dr>   c                D    | j                             | j                   d S rv   )r   r   r   r   s    r=   r   zSinkParser.startDoc  s     T]+++++r>   c                N    | j                             | j                   | j        S )z8Signal end of document and stop parsing. returns formula)r   r   r   r   s    r=   r   zSinkParser.endDoc  s"    4=)))}r>   c                H    | j                             || j                   d S Nr   )r   makeStatementr   )r   	quadruples     r=   r  zSinkParser.makeStatement  s'     	!!)!?????r>   c                    g }|                      |||          }|dk     r|S |                     |||d                   }|dk     r|                     ||d           |S )Nr   zexpected propertylist)objectproperty_listr"   )r   r   r<   rr   s        r=   r   zSinkParser.statement  sj     KK1%%q55Hvq!A$//q55NN61&=>>>r>   r   MutableSequence[Any]c                0    |                      |||          S rv   itemr   r   r<   r   s       r=   subjectzSinkParser.subject      yyC(((r>   c                X   |                      ||          }|dk     r|S g }|                     d||          }|dk    rq| j        r|                     ||d           |                     |||          }|dk     r|                     ||d           |                    d|d         f           |S |                     d||          }|dk    r| j        r|                     ||d           |                     |||          }|dk     r|                     ||d           |                      ||          }|dk     r|                     ||d	           |}|                     d
||          }|dk     r|                     ||d           |                    d|d         f           |S |                     d||          }|dk    r|                    dt          f           |S |||dz            dk    rZ| j        r|                     ||d           |                    d| j                            t          dz             f           |dz   S ||         dk    r| j        r|                     ||d           ||dz            dk    r<|                    d| j                            t          dz             f           |dz   S |                    dt          f           |dz   S |||dz            dk    rB| j        r|                     ||d           |                    dt          dz   f           |dz   S |                     |||          }|dk    r|                    d|d         f           |S |||dz            dk    s|||dz            dk    r|                     ||d           dS )z{has _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   rG   z<=zFound '<=' in Turtle mode. implies=zFound '=' in Turtle moderF   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   r<   r   r   r  s         r=   verbzSinkParser.verb   s    NN61%%q55H HHUFA&&66{ Pvq*NOOO		&!Q''A1uuvq*IJJJJJad|$$$HHHT61%%66{ Ovq*MNNN		&!Q''A1uuvq*JKKKvq))A1uuAP   Avq))A1uuvq*KLLLJJad|$$$HHHS&!$$66JJh'(((H!a!e)$${ Ivq*GHHHJJdk33Hy4HIIJKKKq5L!9{ Fvq*DEEEa!e}##

D$+"7"798L"M"MNOOO1uJJk*+++q5L!a!e)$${ Gvq*EFFF JJh23444q5LIIfa##66JJad|$$$H!a!e)$$q1q5y(9T(A(ANN61&EFFFrr>   c                0    |                      |||          S rv   r  r  s       r=   r"  zSinkParser.propv  r  r>   c                0    |                      |||          S rv   )rP   r  s       r=   r  zSinkParser.itemy  r  r>   r   c                P    | j                             | j        || j                  S r  )r   newBlankNoder   r   )r   r  s     r=   	blankNodezSinkParser.blankNode|  s#    {''s'NNNr>   c                <   |                      |||          }|dk     r|S ||         dv r||         }|                                }|                     |                     |                    }|                     ||dz   |          }|dk     r|                     ||d           |                                }|dk    r|                     | j        |||f           n|                     | j        |||f           |                    |           ||         dv |S )zParse the path production.r   >   !^r  rF   z"EOF found in middle of path syntaxr/  )	nodeOrLiteralpopr,  rA   noder"   r  r   r#  )	r   r   r<   r   r   chsubjobjpreds	            r=   rP   zSinkParser.path  s    vq#..q55HQi:%%B7799D..TYYq\\.22C		&!a%--A1uuvq*NOOO7799DSyy""DM4d#CDDDD""DM4s#CDDDJJsOOO Qi:%% r>   lnc                    | j                             |d          }||S | j                            | j        | j                  }|| j         |<   |S )z?Remember or generate a term for one of these _: anonymous nodesNr  )r   getr   r+  r   r   )r   r8  terms      r=   anonymousNodezSinkParser.anonymousNode  sU    #''D11K{''4='II#'R r>   subjectAlreadyOptional[Node]c                B   |}|                      ||          }|dk     r|S |}||         }|dk    r|                     |          }|                      ||dz             }|dk     r|                     ||d           ||         dk    r| j        r|                     ||d           |dz   }g }	|                     |||	          }|dk    r|	d         }t          |	          dk    r(|	D ]%}
|                     | j        t          ||
f           &|                      ||          }|dk     r|                     ||d           ||         dk    r|dz  }n|                     ||d	           || 	                    |          }| 
                    |||          }|dk     r|                     ||d           |                      ||          }|dk     r|                     ||d           ||         dk    r|                     ||d           |                    |           |dz   S | j        s|dk    r||dz            }|dk    r&|dz  }|dz   }g }d}	 |                      ||          }|dk     r|                     ||d           |||dz            dk    r|dz   }n|s*||         dk    r|dz  }n|                     ||d           nd}g }|                     |||          }|dk     r|                     ||d           |                    | j                            |d                              |                    | j                            || j                             |S |dz   }| j        }| j        | _        | j        }| j        }| j        | _        i | _        | j                                        | _        | j        }t,          | _        || j                                        }|| _        	 |                      ||          }|dk     r|                     ||d           ||         dk    r|dz   }n4|                     ||          }|dk     r|                     ||d           y|| _        | j        | _        || _        | j        | _        || _        || _        |                    |                                           |S |dk    r| j        j        }||dz            }|dk    r| j        j        }|dz  }|dz   }g }	 |                      ||          }|dk     r|                     ||d           ||         dk    r|dz   }njg }|                     |||          }|dk     r|                     ||d            |                    | j                            |d                              |                     ||| j                             |S |                     d!||          }|dk    r|                     ||d"           |                     d#||          }|dk    r|                    d           |S |                     d$||          }|dk    r|                    d           |S ||                     |||          }|dk    r|S d%S )&zParse the <node> production.
        Space is now skipped once at the beginning
        instead of in multiple calls to self.skipSpace().
        r   [rF   zEOF after '['r   z(Found '[=' or '[ =' when in turtle mode.z'EOF when objectList expected after [ = ;zobjectList expected after [= Nr0  zproperty_list expectedz,EOF when ']' expected after [ <propertyList>]z']' expected{$Tzneeded '$}', found end.rG   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   rA   r"   r   
objectListrL   r  r   r&  r,  r  r#  r  r   internnewSetr   r   r   r   copyr   r{   r   r   closenewListr   r   )r   r   r<   r   r=  r5  r   r4  bnodeIDobjsr6  ch2ri   	first_runr  oldParentContextparentAnonymousNodesgrandParentVariablesreason2
thing_types                       r=   r3  zSinkParser.node  sV     .NN61%%q55HAY99iillGvq1u--A1uuvq/:::ayC; NN#M   E*,OOFAt44667D4yy1}}#' X XC ..{DRU/VWWWWvq11A1uu"A'P   ayC''QNN61.MNNN|~~'~22""61d33A1uuvq*BCCCvq))A1uuAM   ayCvq.999JJtq5L{ K	rSyy Q-CczzQE 	=vq11A1uuvq2KLLLa!a%i(D00E$ *!!9++FAA NN61oFFFF$)	-/D		&!T22A1uuvq2PQQQKK 2 247 ; ;<<<)=* 

4;--dDMBBCCC E#'#6 &*m#'+';$'+'<$(,%')$"&/"6"6"8"8- 4<;1133D $Ovq11A1uuvq2JKKKayC''E11&!<<A1uuvq2MNNNO (<$"&"7(<% $ 3 '&6#

JJLL   99 ,JQ-Cczz![/
QAAD9NN61--q55NN61.FGGG!9##AAIIfa..q55NN61.LMMMDK..tAw778889 JJzz$66777HHHVVQ''66NN3   HHVVQ''66JJtHHHWfa((66JJuH<fa--AAvvrr>   r5  r   c                V   	 	 |                      ||          }|dk     r|                     ||d           ||         dk    rn|dz   }F|||dz            dk    r]| j        r|                     ||d           |dz   }g }|                     ||||          }|dk     r|                     ||d           |}|}g }|                     |||          }|dk    r|S g }|                     |||          }|dk     r|                     ||d	           |D ]P}|d         \  }	}
|	d
k    r|                     | j        |
||f           2|                     | j        |
||f           Q|                      ||          }|dk     r|                     ||d           ||         dk    r|S |dz  })zUParse property list
        Leaves the terminating punctuation in the buffer
        rF   r   z-EOF found when expected verb in property listrA  rG   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   r3  r'  rI  r  r   )r   r   r<   r5  r   r   vrP  r6  dirasyms              r=   r  zSinkParser.property_lista  s   +	NN61--q55NN#R   !9##E a!a%i D((; NNN61.LMMME(*IIfad33q55NN61.QRRRA"$A		&!Q''AAvv%'D400A1uuvq*?@@@ H HaD	c4<<&&sD#'FGGGG&&sC'FGGGGvq))A1uuvq*HIIIayCFAW+	r>   r   what/Callable[[str, int, MutableSequence[Any]], int]c                x   |                      ||          }|dk     r|                     ||d           ||         dk    r|S  ||||          }|dk     rdS 	 |                      ||          }|dk     r|S ||         }|dk    r
|dk    rdS |S  |||dz   |          }|dk     r|                     ||d           d)zereturn value: -1 bad syntax; >1 new position in argstr
        res has things found appended
        r   z"EOF found expecting comma sep listrI   r   rF   rE  zbad list contentr   r"   )r   r   r   r   r\  r<   r4  s          r=   r   zSinkParser.commaSeparatedList  s     NN61%%q55NN61&JKKK!9HDC  q552	>vq))A1uuBSyy992VQUC((A1uuvq*<===	>r>   c                
   |                      |||          }|dk     rdS 	 |                     ||          }|dk     r|                     ||d           ||         dk    r|S |                      ||dz   |          }|dk     r|S d)Nr   r   rF   zEOF found after objectrE  )r  r   r"   )r   r   r<   r   r   s        r=   rI  zSinkParser.objectList  s    KK3''q552	vq))A1uuvq*BCCCayCFAE3//A1uu	r>   c                    |                      ||          }|dk     r|S ||         }|dk    r|dz   S |dk    r|S |dk    r|S |                     ||d           d S )Nr   rI   rF   rF  rB  z.expected '.' or '}' or ']' at end of statementr_  )r   r   r<   r   r4  s        r=   r   zSinkParser.checkDot  sw    NN61%%q55HAY99q5L99H99Hvq"RSSSSSr>   c                   g }|                      |||          }|dk    r|d         \  }}|
J d            	 | j        |         }n# t          $ rt |dk    r,|                    |                     |                     |cY S | j        s|dk    rt          | j        pdd          }n| 	                    ||d|z             Y nw xY w| j
                            ||z             }	|                    | j                            |	|	                     |S |                     ||          }|dk     rdS ||         d	k    r>g }
|                     |||
          }|dk    r|                    |
d                    |S dS ||         d
k    r|dz   }|                    d|          }|dk    r|||         }t"                              t&          |          }t(                              t&          |          }| j        rt          | j        |          }nd|v s
J d            ||dz
           dk    r|dd         dk    s|dz  }| j
                            |          }	|                    | j                            |	|	                     |dz   S | 	                    ||d           dS | j        rg }
|                     |||
          }|dk     rdS |
d         | j        v r | 	                    ||d|
d         z             |                    | j
                            | j        d         |
d         z                        |S dS )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?_r:   r9   zPrefix "%s:" not boundr   ?<rF   r   rE   z0With no base URI, cannot deal with relative URIszunterminated URI referencezKeyword "%s" not allowed here.)r   r   
ADDED_HASHr   KeyErrorr#  r<  r   r&   r"   r   r   r   r:  r   variablerJ   unicodeEscape8subr   unicodeEscape4r   r   r   )r   r   r<   r   r  r   pfxr8  r   symbrY  sturefs                r=   r   zSinkParser.uri_ref2  s|     "JJvq"%%66eGC{%+%%q	T,BB T T Tczz

4#5#5b#9#9::: ; T3"99!$-"52s;;vq2Jc2RSSST ;((b11DJJt**466777HNN61%%q552!9"$Afa++A1uu

1Q4   2AY#QBC$$AAvvbd| &))->>%))->>= Jt44DD tI $!a%=C''RSS	S0@0@CKD{,,T22

4?..tT::;;;1uNN61&BCCCCC 
	Afa++A1uurtt}$$vq*JQqT*QRRRJJt{,,T^B-?!A$-FGGHHHH2s   A :C?CCc                   	 	 ||         }|dv r|dz  }|dvr|S n# t           $ r Y dS w xY w	 t                              ||          }|n,| xj        dz  c_        |                                x| _        }Jt                              ||          }||                                }t                              ||          }||ndS )zjSkip white space, newlines and comments.
        return -1 if EOF, else position of first non-ws characterT>   	 rF   >   
r9   r   )
IndexErroreolmatchr   endr   wseof)r   r   r<   r4  r   s        r=   r   zSinkParser.skipSpace  s    

	AY$$FA000H 	 	 	22		+		&!$$AyJJ!OJJ#$5577*Dq	+ HHVQ=AIIfa  Iqq2%s    
**c                T   |                      ||          }|dk     rdS ||         dk    rdS |dz  }|}||         t          v r |                     ||d||         z             t          |          }||k     r)||         t          vr|dz  }||k     r||         t          v| j        | j                            | j        dz   |||         z             }|| j	        vr)| j
                            || j                  | j	        |<   |                    | j	        |                    |S | j                            | j        dz   |||         z             }|| j        vr)| j                            || j                  | j        |<   |                    | j        |                    |S )	z?abc -> variable(:abc)r   r   rd  rF   z#Variable name can't start with '%s'Nr9   r  )r   numberCharsr"   rL   r   r   r   r   r   r   r   r   r   r#  r   )r   r   r<   r   r   
len_argstrvarURIs          r=   rh  zSinkParser.variable6  s    NN61%%q552!92	Q!9##NN61&KfUVi&WXXX[[
*nn2C!C!CFA *nn2C!C!C&[**4=3+>!+LMMFT_,,*.-*D*D +E + +' JJtv.///H
 &&t}s':VAaC['HII...,0,?,L,LDM -M - -D!&) 	

4(0111r>   c                <   |                      ||          }|dk     rdS ||         t          v s||         t          v rdS |}t          |          }||k     r)||         t          vr|dz  }||k     r||         t          v|                    |||                    |S )zabc -> :abcr   r   rF   )r   r|  r   rL   r#  )r   r   r<   r   r   r}  s         r=   r   zSinkParser.bareWord[  s    NN61%%q552!9##vay4E'E'E2[[
*nn2C!C!CFA *nn2C!C!C

6!A#;r>   3MutableSequence[Union[Identifier, Tuple[str, str]]]c                   |                      ||          }|dk     rdS ||         }|t          v rdS t          |          }|t          vrc|}|dz  }	 ||         t          vr|dz  }||         t          vn# t          $ r Y nw xY w||dz
           dk    r|dz  }||k    rdS |||         }nd}||k     re||         dk    rX|}|dk    rt          }	nt
          }	|dz  }d}
|}d}||k     r||         }|d	k    r|
sd
}
||k     r||||         z  }|dz   }n||	vs|
ry|
r*|t          vr t          | j        | j	        ||d|z             nJ|dk    rD||dz            t          vs||dz            t          vr t          | j        | j	        ||d|z             d}
nn|dz  }||k     |
rt          | j        | j	        ||d          ||dz
           dk    r t          |          dk    r||k    rdS |dz  }||k     r||||         z  }|                    ||f           |S |r)| j        r"|| j        vr|                    d|f           |S dS )z
        xyz:def -> ('xyz', 'def')
        If not in keywords and keywordsSet: def -> ('', 'def')
        :def -> ('', 'def')
        r   r   rF   rI   r:   rE   rc  Fr[   Tzillegal escape %rG   zillegal hex escape zqname cannot end with \)r   numberCharsPlusrL   r   ru  r   escapeCharsr"   r   r   hexCharsr#  r   r   )r   r   r<   r   cr}  r   r8  rl  allowedChars	lastslashstarts               r=   r   zSinkParser.qnamej  s1    NN61%%q5521I2[[
M!!AFAQi}44FA Qi}44    a!e}##Q662!BB Bz>>fQi3..Cczz,-FAIEBj..1I99Y9 $IqyyfU1Wo-EEEl**i*  K//"+ $ $
 & ! 1A 5# #  0 c"1q5M99%a!e}H<<"+ $ $
 & ! 5 9# #  !&IIQA j..D  M4:vq:T   a!e}##r77a<<EQJJ2QqyyfU1Wo%JJRy!!!H  d& 2T]+B+B

B8$$$2s   #A6 6
BBc                   |                      |||          }|dk    r|S |                     ||          }|dk     rdS |}||         }|| j        v rn|dz  }|||dz            |k    r|}|dz  }n|}|dz  }|                     |||          \  }}|                    | j                            |                     |S dS )Nr   r   rH   rF   )r  r   r   strconstr#  r   
newLiteral)	r   r   r<   r   r   r4  ch_threedelimrY   s	            r=   r  zSinkParser.object  s     LLC((66Hvq))A1uurBT+++6!a!e)$00$EFAAEFA}}VQ661

4;11!44555rr>   c                   |                      |||          }| j        }|dk    r|S |                     ||          }|dk     rdS |}||         }|t          v rt                              ||          }|r@|                                }|                    t          |||                              |S t                              ||          }|r@|                                }|                    t          |||                              |S t                              ||          }|r@|                                }|                    t          |||                              |S |dz  }|| j        v r|||dz            |k    r|}	|dz  }n|}	|dz  }d }
|                     |||	          \  }}d }||         dk    r[t                              ||dz             }|t!          | j        |||d          |                                }||dz   |         }|}|||dz            dk    r$g }|                     ||dz   |          }|d         }
|                    | j                            ||
|                     |S dS )	Nr   r   rH   rF   r   z3Bad language code syntax on string literal, after @rG   z^^)r3  r   r   r  exponent_syntaxrw  rx  r#  r.   decimal_syntaxr   integer_syntaxr   r   r  langcoder"   r   r   r   r  )r   r   r<   r   r   	startliner4  r   r  r  dtrY   langres2s                 r=   r1  zSinkParser.nodeOrLiteral  s   IIfa%%J	66Hvq))A1uurB_$$#))&!44 AJJvfQqSk22333H"((33 AJJwvac{33444H"((33 AJJy!55666H AvHT+++!a!e)$00$EFAAEFA}}VQ661!9## vq1u55Ay' M%"V   A!!a%!),DA!a!e)$,,-/Dfa!eT::AaB

4;11!R>>???rr>   r[  "Union[Identifier, Tuple[str, str]]c                @    t          |t                    r|d         S |S )NrF   )r   tuple)r   r[  s     r=   r   zSinkParser.uriOf;  s"    c5!! 	q6M
r>   r  Tuple[int, str]c                   |d         }|dz  |dz  |dz  |dz  f\  }}}}|}	d}
| j         }t          |          }|	|k     r||	         |k    rx||k    r	|	dz   }||
fS ||k    rc||	|	dz            |k    r|	dz   }|
|z  }
||
fS ||	|	dz            |k    r|	dz   }|
|z  }
||
fS ||	|	dz            |k    r	|	dz   }||
fS |	dz  }	|
|z  }
t                              ||	          }|s&J d||	d	z
  |	         d
||	|	d	z                        |                                }	 |
||	|         z  }
n~# t
          $ rq d}||	|         D ]}|dt          |          z  z   }t          j                    d         	                                }t          | j        |||	dd|d|z             w xY w||         }||k    r|}	|dv r||k    r|
|z  }
|dz   }	|dv r@||k    rt          | j        |||d          | xj         dz  c_         |
|z  }
|dz   }	|	| _        n|dk    r|dz   }	||	         }|st          | j        |||d          d                    |          }|dk    rd|         }|
|z  }
|	dz  }	ni|dk    r#|                     ||	dz   |          \  }	}|
|z  }
n@|dk    r#|                     ||	dz   |          \  }	}|
|z  }
n| 
                    ||d           |	|k     | 
                    ||d           dS )zRparse an N3 string constant delimited by delim.
        return index, val
        r   rG   rH         r:   rF   z!Quote expected in string at ^ in    r/  z %02xz"Unicode error appending charactersrr  z to string, because
	>   r   r   >   rs  rt  znewline found in string literalr[   zunterminated string literal (2)z
abfrtvn\"'z
	
\"'uUz
bad escapezunterminated string literalN)r   rL   interestingsearchr  UnicodeErrorordsysexc_info__str__r"   r   r   rJ   uEscapeUEscape)r   r   r<   r  delim1delim2delim3delim4delim5r   ustrr  r}  r   errr  streasonr4  r  uchs                       r=   r  zSinkParser.strconstA  s0    q)/!VaZ!VVWZ)W&J	[[
*nnayF""F??AAd7NVOOa!a%i(F22E $wa!a%i(F22E $wa!a%i(F22E $w FAFND""61--A   q2vz"""q1r6z""  1
 		Aqs#   ! 3 3A3q66!12CC<>>!,4466M888;XXFG    BV||z!!bFll
E|##F??#!9   

a


E#$  tEAY #!9   #''++66/2CCKDFAA3YY LLQ	BBEArBJDD3YY LLQ	BBEArBJDDNN61l;;;A *nnD 	vq"?@@@@@s   D+ +A;F&r  regPattern[str]nr   c                *   t          |          ||z   k     rt          | j        |||d          	 ||z   |                    t          d|z   ||||z            z             fS # t
          $ r' t          | j        |||d||||z            z             w xY w)Nzunterminated string literal(3)r[   zbad string literal hex escape: )rL   r"   r   rj  r   r   )r   r   r<   r  r  r  r   s          r=   _unicodeEscapezSinkParser._unicodeEscape  s     v;;Qy&!5U  		q5#''-APQE	AR1RSSSS 	 	 	1F1q1u94EE  	s   0A! !1Bc                @    |                      |||t          dd          S )Nr  r  )r  rk  r   r   r<   r  s       r=   r  zSinkParser.uEscape       ""61iCPPPr>   c                @    |                      |||t          dd          S )N   r  )r  ri  r  s       r=   r  zSinkParser.UEscape  r  r>   msgr   c                <    t          | j        | j        |||          rv   )r"   r   r   )r   r   r<   r  s       r=   r"   zSinkParser.BadSyntax  s    tz61cBBBr>   )Nr:   Nr:   NF)r   r,   r   r   r   r3   r   rk   r   r3   r   r   r   r   )r<   r5   r6   r3   )r6   r   )r   r   r6   r   )r   r   r6   r   )r   r   r6   rt   )r   r3   r   r5   r6   r5   )F)
r   r3   r   r3   r<   r5   r   r   r6   r5   )r   r3   r   r3   r<   r5   r6   r5   )r   r3   r<   r5   r6   r5   )r  r3   r  r  r6   rt   )r  r	  r6   rt   r6   rt   )r   r3   r<   r5   r   r  r6   r5   )r   r3   r   r  r6   r5   rv   )r  rk   r6   r   )r8  r3   r6   r   )
r   r3   r<   r5   r   r  r=  r>  r6   r5   )r   r3   r<   r5   r5  r   r6   r5   )
r   r3   r   r5   r   r  r\  r]  r6   r5   )r   r3   r<   r5   r   r  r6   r5   )r[  r  r6   r3   )r   r3   r<   r5   r  r3   r6   r  )r   r3   r<   r5   r  r5   r  r  r  r5   r   r3   r6   r  )r   r3   r<   r5   r  r5   r6   r  )r   r3   r<   r5   r  r3   r6   r   )-r   r   r   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r'  r"  r  r,  rP   r<  r3  r  r   rI  r   r   r   rh  r   r   r  r1  r   r  r  r  r  r"   rX   r>   r=   r-   r-     s        *.!%,0L6 L6 L6 L6 L6\U U U U   + + + +   H H H H8   .    2   "b b b bH< < < <|& & & &! ! ! !, , , ,   
@ @ @ @

 
 
 
) ) ) )T T T Tl) ) ) )) ) ) )O O O O O   *    *.B B B B BH/ / / /b> > > >@   T T T TJ J J JX& & & &:# # # #J   j j j jX   BB B B BH   mA mA mA mA^   0Q Q Q QQ Q Q QC C C C C Cr>   r-   c                  6    e Zd ZddZdd
Zedd            ZdS )r"   r  r3   r   r5   r   r<   r   c                r    |                     d          | _        || _        || _        || _        || _        d S Nr   )encode_str_i_whyr   _uri)r   r  r   r   r<   r   s         r=   r   zBadSyntax.__init__  s5    MM'**		
			r>   r6   c           
         | j         }| j        }d}|dk    rd}|dz
  }nd}t          |          |z
  dk    rd}nd}d| j        dz   | j        | j        ||||         |||dz            |fz  S )Nr   <   z...r:   z8at line %i of <%s>:
Bad syntax (%s) at ^ in:
"%s%s^%s%s"rF   )r  r  rL   r   r  r  )r   r   r<   rn  preposts         r=   r  zBadSyntax.__str__  s    Gr66CRBBCv;;?RDDD LJNII2a4L1q2v:O
 
 	
r>   c                     t          |           S rv   )r3   r   s    r=   messagezBadSyntax.message  s    4yyr>   N)
r  r3   r   r5   r   r3   r<   r5   r   r3   r6   r3   )r   r   r   r   r  propertyr  rX   r>   r=   r"   r"     s\           
 
 
 
2    X  r>   r"   c                  P    e Zd ZdZddZddZdd	Z	 dddZdddZddZ	ddZ
d
S ) r+   r   parentr   c                   t                      j        | _        d| _        t          xj        dz  c_        t          j        | _        i | _        i | _        t          |j	        | 
                                          | _        d S )Nr   rF   )r   
identifier)r   hexuuidcounterr+   numberexistentials
universalsr   r   idquotedgraph)r   r  s     r=   r   zFormula.__init__   sc    GGK	!n.0,.&V\dggiiPPPr>   r6   r3   c                    d| j         z  S Nz_:Formula%s)r  r   s    r=   r  zFormula.__str__
  s    t{**r>   r   c                0    t          d| j        z            S r  )r   r  r   s    r=   r  z
Formula.id  s    ]T[0111r>   Nr  rk   r   Optional[Any]c                    |0| xj         dz  c_         t          d| j        d| j                   }nHt          |                    d                                                              dd                    }|S )NrF   fbr9   rc  )r  r   r  splitr2  r\   )r   r  r   bns       r=   r+  zFormula.newBlankNode  sq     ;LLALL4999dll;<<BBsyy~~))++33C==>>B	r>   r    c                j    t          |                    d                                                    S )Nr9   )r    r  r2  )r   r  r   s      r=   r   zFormula.newUniversal  s&    		#**,,---r>   r   rt   c                >    |                                  | j        |<   d S rv   )r+  r  )r   r   s     r=   r   zFormula.declareExistential  s!    #0022!r>   r   c                    | j         S rv   )r  r   s    r=   rM  zFormula.close   s    r>   )r  r   r  )r6   r   )NN)r  rk   r   r  r6   r   rv   )r  r3   r   r  r6   r    )r   r3   r6   rt   )r6   r   )r   r   r   r  r   r  r  r+  r   r   rM  rX   r>   r=   r+   r+     s        FQ Q Q Q+ + + +2 2 2 2 ?C    . . . . .3 3 3 3           r>   r+   z([\x80-\xff])c                      e Zd Zd6dZd7dZd8d	Zd9dZ	 	 	 d:d;dZd<dZd=d"Z	d>d%Z
d?d'Z	 d@dAd,ZdBd/ZdCd1ZdDd2ZdEd4ZdEd5ZdS )Fr,   graphr   c                `    d | _         t                      j        | _        d| _        || _        d S r   )rootFormular   r  r  r  r  )r   r  s     r=   r   zRDFSink.__init__(  s)    .2GGK	


r>   r6   r+   c                    t          | j        j        dd          }|st          d          t	          | j                  }|S )Nformula_awareFz:Cannot create formula parser with non-formula-aware store.)getattrr  r   r   r+   )r   far  s      r=   r   zRDFSink.newFormula.  sK    TZ%>> 	L   DJr>   r  r   c                6    t          | j        j        |          S rv   )r   r  r   )r   r  s     r=   newGraphzRDFSink.newGraph7  s    TZ%z222r>   rr   r3   r   c                ,    t          |d                   S r   )r   r   rr   s     r=   r   zRDFSink.newSymbol:  s    d1gr>   Narg$Optional[Union[Formula, Graph, Any]]r  rk   r   r   r   c                   t          |t                    r|                    |          S t          |t                    s|0| xj        dz  c_        t          d| j        d| j                  }n[t          t          |d                                       d          	                                
                    dd                    }|S )NrF   r  r  r   r9   rc  )r   r+   r+  r   r  r   r  r3   r  r2  r\   )r   r  r  r   r  s        r=   r+  zRDFSink.newBlankNode=  s     c7## 	G##C(((U## 	Gs{LLALL4999dll;<<BBs3q6{{((--1133;;CEEFFB	r>   rY   r  Optional[URIRef]r  r   c                J    |rt          ||          S t          ||          S )Ndatatype)r  )r   )r   rY   r  r  s       r=   r  zRDFSink.newLiteralL  s0     	)1r****14((((r>   r  typing.List[Any]r  r   r   c                   |                      d          }|s|S |                      d          }|                      d          }|                     |          x}}|d d         D ]K}|                     ||||f           |                     |          }	|                     ||||	f           |	}L|                     ||||d         f           |                     ||||f           |S )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   r+  r  )
r   r  r  rh   re   rf   afr   neans
             r=   rN  zRDFSink.newListR  s   nnMNN 	JQRR~~OPP""1%%%QCRC& 	 	B5!R0111""1%%B4B/000AAAua2/000AtQ,---	r>   r1   
Set[_AnyT]c                     t          |          S rv   )setr  s     r=   rK  zRDFSink.newSetd  s    4yyr>   r  c                @    d                     d |D                       S )NrE   c              3  4   K   | ]}t          |          V  d S rv   )repr).0r  s     r=   	<genexpr>z.RDFSink.setDefaultNamespace.<locals>.<genexpr>h  s(      ..AQ......r>   )r&   r  s     r=   r  zRDFSink.setDefaultNamespaceg  s#    xx........r>   r  8Tuple[Optional[Union[Formula, Graph]], Node, Node, Node]r  rt   c                   |\  }}}}t          |d          rt          d          |                     ||          }|                     ||          }|                     ||          }|| j        k    r| j                            |||f           d S t          |t                    r|j                            |||f           d S |                    |||f           d S )Nr   zFormula used as predicate)	hasattrr   	normaliser  r  addr   r+   r  )r   r  r   r  prY   os          r=   r  zRDFSink.makeStatementj  s    
 
1a1i   	;9::: NN1a  NN1a  NN1a     JNNAq!9%%%%%7## 	Mq!Qi((((( EE1a)r>   9Union[Tuple[int, str], bool, int, Decimal, sfloat, _AnyT]$Union[URIRef, Literal, BNode, _AnyT]c                8   t          |t                    r"t          t          |d                             S t          |t                    r7t          t          |                                          t                    }|S t          |t                    st          |t                    r%t          t          |          t                    }|S t          |t                    r/t          |          }|dk    rd}t          |t                    }|S t          |t                    r%t          t          |          t                    }|S t          |t                    r4||j        v r+t"          rt          |t                    sJ |j        |         S |S )NrF   r  z-00)r   r  r   r3   r   r   r   BOOLEAN_DATATYPEr5   r   INTEGER_DATATYPEr   DECIMAL_DATATYPEr.   DOUBLE_DATATYPEr+   r  r   )r   r  r  rY   values        r=   r  zRDFSink.normalise  sj   
 a 	%#ad))$$$a 	A1ABBBAHa 	Ay!9!9 	A)9:::AHa!! 	FFE}}(8999AHa   	A999AHa!! 	)AN""  1%a00000~a(( r>   	somethingc                    |S rv   rX   )r   r  s     r=   rJ  zRDFSink.intern  s    r>   c                    d S rv   rX   )r   rl  r  s      r=   r   zRDFSink.bind      r>   r   c                    || _         d S rv   )r  r   r   s     r=   r   zRDFSink.startDoc  s    "r>   c                    d S rv   rX   r  s     r=   r   zRDFSink.endDoc  r  r>   )r  r   )r6   r+   )r  r   r6   r   )rr   r3   r6   r   )NNN)r  r  r  rk   r   r   r6   r   )rY   r3   r  r  r  rk   r6   r   )r  r  r  r   r6   r   )rr   r1   r6   r  )rr   r  r6   r3   rv   )r  r	  r   r  r6   rt   )r  r   r  r  r6   r  )r  r1   r6   r1   r  )r   r   r6   rt   )r   r   r   r   r   r  r   r+  r  rN  rK  r  r  r  rJ  r   r   r   rX   r>   r=   r,   r,   '  s[             3 3 3 3   
 59!,0	    ) ) ) )   $   / / / / "    4' ' ' 'R      # # # #     r>   r,   r  r  c                    d}| D ]R}t          |          dk    st          |          dk     rdt          |          z  }ndt          |          z  }||z   }S|                    d          S )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'

    ```
    r:   ~   !   z%%%02Xz%czlatin-1)r  r  )r  rY   r4  s      r=   r*   r*     ss     	A  r77S==CGGbLLCGG#BBBBF88Ir>   c                  &    e Zd ZdZd Z	 	 dddZdS )r$   zFAn RDFLib parser for Turtle

    See http://www.w3.org/TR/turtle/
    c                    d S rv   rX   r   s    r=   r   zTurtleParser.__init__  r  r>   r   Tsourcer0   r  r   encodingrk   r   r   r6   rt   c                   |dvrt          d|z            t          |          }|                    |                                p|                                pd          }t          |||          }|                                }|s|                                }|                    |           |j	        
                                D ]\  }	}
|                    |	|
           d S )Nr  z:N3/Turtle files are always utf-8 encoded, I was passed: %sr:   )r   r   )r   r,   
absolutizegetPublicIdgetSystemIdr-   getCharacterStreamgetByteStreamr   r   itemsr   )r   r%  r  r&  r   sinkr   r  r   r   	namespaces              r=   parsezTurtleParser.parse  s     ?**LxW   u~~""6#5#5#7#7#U6;M;M;O;O#USUVVtWV<<<**,, 	,))++F	V!"!2!2!4!4 	* 	*FIJJvy))))	* 	*r>   N)r   T)
r%  r0   r  r   r&  rk   r   r   r6   rt   r   r   r   r   r   r0  rX   r>   r=   r$   r$     sN         
   #** * * * * * *r>   r$   c                  $    e Zd ZdZd Z	 dddZdS )r#   zZAn RDFLib parser for Notation3

    See http://www.w3.org/DesignIssues/Notation3.html
    c                    d S rv   rX   r   s    r=   r   zN3Parser.__init__  r  r>   r   r%  r0   r  r   r&  rk   r6   rt   c                0   t          |j        dd          }t          |j        dd          }|st          d          |st          d          t          |j                  }||_        |j        |_        t                              | |||d           d S )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$   r0  )r   r%  r  r&  car  
conj_graphs          r=   r0  zN3Parser.parse  s    
 U[/599U[/599 	OMNNN 	OMNNN5;///
%*
" (-'>
$4XeLLLLLr>   N)r   )r%  r0   r  r   r&  rk   r6   rt   r1  rX   r>   r=   r#   r#     sT         
  
 LSM M M M M M Mr>   r#   )r   )r2   r3   r4   r5   r6   r7   )rA   r3   rB   r3   r6   r3   r  )rY   r3   r6   r3   )rr   r   rs   r   r6   rt   )r   r
   r6   r3   )r  r3   r6   r  )r   
__future__r   r   rV   rer  typingr}   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%   r3   r?   r&   r'   rU   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_Emptyrl   __annotations__r(   rp   r)   r   chatty_flagrx   r{   N3_forSome_URIN3_forAll_URIrf  r$  r&  LOG_implies_URIr  r  r  FLOAT_DATATYPEr  option_noregenr  r   r   r   _rdfnsr  r  r|  r  r   compilerk  ri  N3CommentCharacterrv  rz  ry  signed_integerr  r  r  digitstringr  r  r.   r-   SyntaxErrorr"   r+   r_hibyter,   r*   r$   r#   rX   r>   r=   <module>ro     sL    : # " " " " "  				 				 



                                              # # # # # # ) ) ) ) ) ) 4 4 4 4 4 4 4 4 4 4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    !           *))))))    , 	s###h, h, h, h,V	4 	4 	4 	4    dCdC	



	
0D	!
x	@:
	)8#*$1
8Gg%&7V#
$	4 
'E/	"7V#
$Gg%& $(  ' ' ' '    	
. . . . 
	 	 	 	
	 	 	 	
  
 L!'>i' i' X%G#i'  ;<<"cU* #&	63'((c*++c-  c
*E E E E 233233  
 bj)**bj%&&RZ	N++N++233"*@  bj##bj,--2:566? ? ? ? ?S ? ? ?CC CC CC CC CC CC CC CCT*# # # # # # # #N$  $  $  $  $  $  $  $ N 2:&''P P P P P P P Pr   * *  *  *  *  *6  *  *  *FM M M M M| M M M M Mr>   