
    01iO                    x   S r SSKJr  SSKrSSKJrJr  SSKJr  SSK	J
r
JrJrJrJrJrJrJrJrJr  SSKJrJr  \
(       a  SSKJr  SS	KJrJrJrJr  SS
KJr  Sr Sr!Sr" S%     S&S jjr#\ " S S\5      5       r$ " S S\$5      r% " S S\$5      r& " S S\$5      r' " S S\$5      r( " S S\$5      r) " S S\*5      r+S'S jr,S'S jr-      S(S jr.      S(S  jr/S)S! jr0S*S" jr1S+S# jr2\3S$:X  a  g\,\l4        \0\l5        \1\l6        \2\l7        \-\l8        \1\$l6        \2\$l7        \0\$l5        \,\$l4        \-\$l8        g),a   
This module implements the SPARQL 1.1 Property path operators, as
defined in:
[http://www.w3.org/TR/sparql11-query/#propertypaths](http://www.w3.org/TR/sparql11-query/#propertypaths)

In SPARQL the syntax is as follows:

| Syntax              | Matches                                                                 |
|---------------------|-------------------------------------------------------------------------|
| `iri`               | An IRI. A path of length one.                                           |
| `^elt`              | Inverse path (object to subject).                                       |
| `elt1 / elt2`       | A sequence path of `elt1` followed by `elt2`.                           |
| `elt1 \| elt2`      | An alternative path of `elt1` or `elt2` (all possibilities are tried).  |
| `elt*`              | A path that connects subject and object by zero or more matches of `elt`.|
| `elt+`              | A path that connects subject and object by one or more matches of `elt`.|
| `elt?`              | A path that connects subject and object by zero or one matches of `elt`.|
| `!iri` or <br> `!(iri1 \| ... \| irin)` | Negated property set. An IRI not among `iri1` to `irin`. <br> `!iri` is short for `!(iri)`. |
| `!^iri` or <br> `!(^iri1 \| ... \| ^irin)` | Negated reverse property set. Excludes `^iri1` to `^irin` as reverse paths. <br> `!^iri` is short for `!(^iri)`. |
| `!(iri1 \| ... \| irij \| ^irij+1 \| ... \| ^irin)` | A combination of forward and reverse properties in a negated property set. |
| `(elt)`             | A grouped path `elt`, where parentheses control precedence.             |

This module is used internally by the SPARQL engine, but the property paths
can also be used to query RDFLib Graphs directly.

Where possible the SPARQL syntax is mapped to Python operators, and property
path objects can be constructed from existing URIRefs.

```python
>>> from rdflib import Graph, Namespace
>>> from rdflib.namespace import FOAF

>>> ~FOAF.knows
Path(~http://xmlns.com/foaf/0.1/knows)

>>> FOAF.knows/FOAF.name
Path(http://xmlns.com/foaf/0.1/knows / http://xmlns.com/foaf/0.1/name)

>>> FOAF.name|FOAF.givenName
Path(http://xmlns.com/foaf/0.1/name | http://xmlns.com/foaf/0.1/givenName)

```

Modifiers (?, \*, +) are done using \* (the multiplication operator) and
the strings '\*', '?', '+', also defined as constants in this file.

```python
>>> FOAF.knows*OneOrMore
Path(http://xmlns.com/foaf/0.1/knows+)

```

The path objects can also be used with the normal graph methods.

First some example data:

```python
>>> g=Graph()

>>> g=g.parse(data='''
... @prefix : <ex:> .
...
... :a :p1 :c ; :p2 :f .
... :c :p2 :e ; :p3 :g .
... :g :p3 :h ; :p2 :j .
... :h :p3 :a ; :p2 :g .
...
... :q :px :q .
...
... ''', format='n3') # doctest: +ELLIPSIS

>>> e = Namespace('ex:')

```

Graph contains:

```python
>>> (e.a, e.p1/e.p2, e.e) in g
True

```

Graph generator functions, triples, subjects, objects, etc. :

```python
>>> list(g.objects(e.c, (e.p3*OneOrMore)/e.p2)) # doctest: +NORMALIZE_WHITESPACE
[rdflib.term.URIRef('ex:j'), rdflib.term.URIRef('ex:g'),
    rdflib.term.URIRef('ex:f')]

```

A more complete set of tests:

```python
>>> list(eval_path(g, (None, e.p1/e.p2, None)))==[(e.a, e.e)]
True
>>> list(eval_path(g, (e.a, e.p1|e.p2, None)))==[(e.a,e.c), (e.a,e.f)]
True
>>> list(eval_path(g, (e.c, ~e.p1, None))) == [ (e.c, e.a) ]
True
>>> list(eval_path(g, (e.a, e.p1*ZeroOrOne, None))) == [(e.a, e.a), (e.a, e.c)]
True
>>> list(eval_path(g, (e.c, e.p3*OneOrMore, None))) == [
...     (e.c, e.g), (e.c, e.h), (e.c, e.a)]
True
>>> list(eval_path(g, (e.c, e.p3*ZeroOrMore, None))) == [(e.c, e.c),
...     (e.c, e.g), (e.c, e.h), (e.c, e.a)]
True
>>> list(eval_path(g, (e.a, -e.p1, None))) == [(e.a, e.f)]
True
>>> list(eval_path(g, (e.a, -(e.p1|e.p2), None))) == []
True
>>> list(eval_path(g, (e.g, -~e.p2, None))) == [(e.g, e.j)]
True
>>> list(eval_path(g, (e.e, ~(e.p1/e.p2), None))) == [(e.e, e.a)]
True
>>> list(eval_path(g, (e.a, e.p1/e.p3/e.p3, None))) == [(e.a, e.h)]
True

>>> list(eval_path(g, (e.q, e.px*OneOrMore, None)))
[(rdflib.term.URIRef('ex:q'), rdflib.term.URIRef('ex:q'))]

>>> list(eval_path(g, (None, e.p1|e.p2, e.c)))
[(rdflib.term.URIRef('ex:a'), rdflib.term.URIRef('ex:c'))]

>>> list(eval_path(g, (None, ~e.p1, e.a))) == [ (e.c, e.a) ]
True
>>> list(eval_path(g, (None, e.p1*ZeroOrOne, e.c))) # doctest: +NORMALIZE_WHITESPACE
[(rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:c')),
 (rdflib.term.URIRef('ex:a'), rdflib.term.URIRef('ex:c'))]

>>> list(eval_path(g, (None, e.p3*OneOrMore, e.a))) # doctest: +NORMALIZE_WHITESPACE
[(rdflib.term.URIRef('ex:h'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:g'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:a'))]

>>> list(eval_path(g, (None, e.p3*ZeroOrMore, e.a))) # doctest: +NORMALIZE_WHITESPACE
[(rdflib.term.URIRef('ex:a'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:h'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:g'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:a'))]

>>> list(eval_path(g, (None, -e.p1, e.f))) == [(e.a, e.f)]
True
>>> list(eval_path(g, (None, -(e.p1|e.p2), e.c))) == []
True
>>> list(eval_path(g, (None, -~e.p2, e.j))) == [(e.g, e.j)]
True
>>> list(eval_path(g, (None, ~(e.p1/e.p2), e.a))) == [(e.e, e.a)]
True
>>> list(eval_path(g, (None, e.p1/e.p3/e.p3, e.h))) == [(e.a, e.h)]
True

>>> list(eval_path(g, (e.q, e.px*OneOrMore, None)))
[(rdflib.term.URIRef('ex:q'), rdflib.term.URIRef('ex:q'))]

>>> list(eval_path(g, (e.c, (e.p2|e.p3)*ZeroOrMore, e.j)))
[(rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:j'))]

```

No vars specified:

```python
>>> sorted(list(eval_path(g, (None, e.p3*OneOrMore, None)))) #doctest: +NORMALIZE_WHITESPACE
[(rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:g')),
 (rdflib.term.URIRef('ex:c'), rdflib.term.URIRef('ex:h')),
 (rdflib.term.URIRef('ex:g'), rdflib.term.URIRef('ex:a')),
 (rdflib.term.URIRef('ex:g'), rdflib.term.URIRef('ex:h')),
 (rdflib.term.URIRef('ex:h'), rdflib.term.URIRef('ex:a'))]

```
    )annotationsN)ABCabstractmethod)total_ordering)
TYPE_CHECKINGAnyCallable	GeneratorIteratorListOptionalSetTupleUnion)NodeURIRef)_MulPathMod)Graph_ObjectType_PredicateType_SubjectType)NamespaceManager*+?c                    [        U [        [        45      (       a-  [        U R                  5      S:  a  SU R                  U5      -  $ U R                  U5      $ )N   z(%s))
isinstanceSequencePathAlternativePathlenargsn3)argnamespace_managers     F/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/paths.py_n3r'      sJ     #o677CMA<M011166#$$    c                      \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   \  S       SS jj5       r\SSS jj5       rS r	S r
SS jrSrg)Path   z"Base class for all property paths.z6Callable[[Path, Union[URIRef, Path]], AlternativePath]__or__zCallable[[Path], InvPath]
__invert__zCallable[[Path], NegatedPath]__neg__z3Callable[[Path, Union[URIRef, Path]], SequencePath]__truediv__zCallable[[Path, str], MulPath]__mul__Nc                    g N )selfgraphsubjobjs       r&   eval	Path.eval   s     69r(   c                    g r2   r3   r4   r%   s     r&   r#   Path.n3   s    ORr(   c                *    [        [        U 5      5      $ r2   )hashreprr4   s    r&   __hash__Path.__hash__   s    DJr(   c                0    [        U 5      [        U5      :H  $ r2   )r?   r4   others     r&   __eq__Path.__eq__   s    DzT%[((r(   c                    [        U[        [        45      (       d&  [        S[	        U 5      < S[	        U5      < S35      e[	        U 5      [	        U5      :  $ )Nzunorderable types: z() < z())r   r*   r   	TypeErrorr?   rD   s     r&   __lt__Path.__lt__   sE    %$..48JUL  DzDK''r(   r3   NN)r5   r   r6   Optional[_SubjectType]r7   Optional[_ObjectType]return*Iterator[Tuple[_SubjectType, _ObjectType]]r2   r%   Optional[NamespaceManager]rO   str)rE   r   rO   bool)__name__
__module____qualname____firstlineno____doc____annotations__r   r8   r#   rA   rF   rJ   __static_attributes__r3   r(   r&   r*   r*      s    ,BB))**DD++ (,%)	99 %9 #	9
 
49 9 R R )(r(   r*   c                  V    \ rS rSrSS jr  S	       S
S jjrSS jrSSS jjrSrg)InvPath   c                    Xl         g r2   r$   r4   r$   s     r&   __init__InvPath.__init__   s    r(   Nc              #  X   #    [        XU R                  U45       H
  u  pEXT4v   M     g 7fr2   )	eval_pathr$   )r4   r5   r6   r7   sos         r&   r8   InvPath.eval   s*      e488T%:;DA$J <s   (*c                $    SU R                   < S3$ )NzPath(~)r`   r@   s    r&   __repr__InvPath.__repr__	  s    "hh((r(   c                4    S[        U R                  U5      -  $ )Nz^%s)r'   r$   r;   s     r&   r#   
InvPath.n3  s    s488%6777r(   r`   )r$   Union[Path, URIRef]rL   )r5   r   r6   rM   r7   rN   rO   z7Generator[Tuple[_ObjectType, _SubjectType], None, None]rO   rS   r2   rQ   	rU   rV   rW   rX   rb   r8   rk   r#   r[   r3   r(   r&   r]   r]      sJ     (,%)	 % #	
 
A)8 8r(   r]   c                  V    \ rS rSrSS jr  S	       S
S jjrSS jrSSS jjrSrg)r   i  c                    / U l         U HT  n[        U[        5      (       a!  U =R                   UR                   -  sl         M9  U R                   R                  U5        MV     g r2   )r"   r   r   appendr4   r"   as      r&   rb   SequencePath.__init__  sD    /1	A!\**		QVV#			  #	 r(   Nc                   ^^         SUU4S jjm        SUU4S jjnU(       a  T" U R                   X#5      $ U(       a  U" U R                   X#5      $ T" U R                   X#5      $ )Nc              3     >#    U SS  (       a6  [        TXS   S 45       H   u  p4T" U SS  XB5       H  nX5S   4v   M     M"     g [        TXS   U45       H
  u  p4X44v   M     g 7f)Nr   r   re   pathsr6   r7   rf   rg   r	_eval_seqr5   s         r&   r~   $SequencePath.eval.<locals>._eval_seq  sv     
 QRy%ed!Hd-CDDA&uQRy!91g : E
 &ed!Hc-BCDA$J Ds   A!A$c              3     >#    U S S (       a8  [        TS U S   U45       H!  u  p4T" U S S X5       H  nUS   U4v   M     M#     g [        TXS   U45       H
  u  p4X44v   M     g 7f)Nr   rz   r{   s         r&   _eval_seq_bw'SequencePath.eval.<locals>._eval_seq_bw-  sz     
 Sbz%edE"Is-CDDA&uSbz4;dAg < E
 &ed!Hc-BCDA$J Ds   A#A&)r|   List[Union[Path, URIRef]]r6   rM   r7   rN   rO   7Generator[Tuple[_SubjectType, _ObjectType], None, None])r|   r   r6   rM   r7   r   rO   r   r"   )r4   r5   r6   r7   r   r~   s    `   @r&   r8   SequencePath.eval  s    	,	(	 '	 E		 		,	(	 	 E		 	 TYY22		455TYY22r(   c                L    SSR                  S U R                   5       5      -  $ )NPath(%s)z / c              3  8   #    U  H  n[        U5      v   M     g 7fr2   rS   .0xs     r&   	<genexpr>(SequencePath.__repr__.<locals>.<genexpr>C       &Ay!s1vvy   joinr"   r@   s    r&   rk   SequencePath.__repr__B       EJJ&Atyy&AAAAr(   c                N   ^ SR                  U4S jU R                   5       5      $ )N/c              3  <   >#    U  H  n[        UT5      v   M     g 7fr2   r'   r   rv   r%   s     r&   r   "SequencePath.n3.<locals>.<genexpr>F       E9aA0119   r   r;   s    `r&   r#   SequencePath.n3E      xxE499EEEr(   r   r"   ro   rL   r5   r   r6   rM   r7   rN   rO   r   rp   r2   rQ   rq   r3   r(   r&   r   r     sN    $ (,%)	'3'3 %'3 #	'3
 
A'3RBF Fr(   r   c                  V    \ rS rSrSS jr  S	       S
S jjrSS jrSSS jjrSrg)r    iI  c                    / U l         U HT  n[        U[        5      (       a!  U =R                   UR                   -  sl         M9  U R                   R                  U5        MV     g r2   )r"   r   r    rt   ru   s      r&   rb   AlternativePath.__init__J  sD    /1	A!_--		QVV#			  #	 r(   Nc              #  b   #    U R                    H  n[        XXC45       H  nUv   M	     M     g 7fr2   )r"   re   )r4   r5   r6   r7   r   ys         r&   r8   AlternativePath.evalR  s-      AuQn5 6 s   -/c                L    SSR                  S U R                   5       5      -  $ )Nr   z | c              3  8   #    U  H  n[        U5      v   M     g 7fr2   r   r   s     r&   r   +AlternativePath.__repr__.<locals>.<genexpr>]  r   r   r   r@   s    r&   rk   AlternativePath.__repr__\  r   r(   c                N   ^ SR                  U4S jU R                   5       5      $ )N|c              3  <   >#    U  H  n[        UT5      v   M     g 7fr2   r   r   s     r&   r   %AlternativePath.n3.<locals>.<genexpr>`  r   r   r   r;   s    `r&   r#   AlternativePath.n3_  r   r(   r   r   rL   r   rp   r2   rQ   rq   r3   r(   r&   r    r    I  sM    $ (,%)	 % #	
 
ABF Fr(   r    c                  \    \ rS rSrSS jr   S	         S
S jjrSS jrSSS jjrSrg)MulPathic  c                    Xl         X l        U[        :X  a  SU l        SU l        g U[
        :X  a  SU l        SU l        g U[        :X  a  SU l        SU l        g [        SU-  5      e)NTFzUnknown modifier %s)pathmod	ZeroOrOnezeromore
ZeroOrMore	OneOrMore	Exception)r4   r   r   s      r&   rb   MulPath.__init__d  s_    	)DIDIJDIDIIDIDI1C788r(   Nc              #  l  ^ ^^^	#    T R                   (       a9  U(       a2  U(       a  U(       a  X#:X  a  X#4v   OU(       a  X"4v   OU(       a  X34v      S       SU	UU 4S jjjm	   S       SUUU 4S jjjmSU	UU 4S jjn[        5       nU(       a5  T	" X#[        5       5       H  nXv;  d  M
  UR                  U5        Uv   M!     g U(       a5  T" X#[        5       5       H  nXv;  d  M
  UR                  U5        Uv   M!     g U" 5        H  nXv;  d  M
  UR                  U5        Uv   M!     g 7f)Nc              3     >#    UR                  U 5        [        TU T	R                  S 45       HG  u  p4U(       a  XA:X  a  X44v   T	R                  (       d  M)  XB;   a  M0  T" XAU5       H
  u  pVX64v   M     MI     g 7fr2   addre   r   r   )
r6   r7   seenrf   rg   s2o2_fwdr5   r4   s
          r&   r   MulPath.eval.<locals>._fwd  sk      HHTN!%$		4)@Aah$J999y "&qt"4e #5 B   AA:#A:c              3     >#    UR                  U5        [        TS T	R                  U45       HG  u  p4U (       a  X:X  a  X44v   T	R                  (       d  M)  X2;   a  M0  T" S X25       H
  u  pVXT4v   M     MI     g 7fr2   r   )
r6   r7   r   rf   rg   r   r   _bwdr5   r4   s
          r&   r   MulPath.eval.<locals>._bwd  sk      HHSM!%$		3)?@ty$J999y "&tQ"5 e #6 Ar   c            	   3    >#    T	R                   (       a\  [        5       n TR                  S 5       H=  u  pX;  a  U R                  U5        X4v   X ;  d  M'  U R                  U5        X"4v   M?     [        5       n[	        TS T	R
                  S 45       Hg  u  pT	R                  (       d  X4v   M  X;  d  M$  UR                  U5        [        T" US [        5       5      5      nU H  u  pVXQ:X  d   eXV4v   M     Mi     g 7fr2   )r   setsubject_objectsr   re   r   r   list)
seen1rf   rg   r   fs1o1r   r5   r4   s
          r&   _all_fwd_paths$MulPath.eval.<locals>._all_fwd_paths  s     yy "11$7DA~		!d
~		!d
 8 5D!%$		4)@Ayy$J} asu!56&'FB#%7N7"$&L '( Bs   AD AD 8AD )NNN)r6   rM   r7   rN   r   zOptional[Set[_SubjectType]]rO   r   )r6   rM   r7   rN   r   zOptional[Set[_ObjectType]]rO   r   )rO   r   )r   r   r   )
r4   r5   r6   r7   firstr   doner   r   r   s
   ``      @@r&   r8   MulPath.evalt  s;     99;)Oj h ,0)-04	$(	$&	$ .	$ E		$ 	$( ,0)-/3	$(	$&	$ -	$ E		$ 	$(	) 	)8 u$SU+=HHQKG , $SU+=HHQKG ,
 $%=HHQKG &s   B)D438D4/'D4D4c                >    SU R                   < U R                  < S3$ )NzPath(rj   )r   r   r@   s    r&   rk   MulPath.__repr__  s    #yy$((33r(   c                N    [        U R                  U5      < U R                  < 3$ r2   )r'   r   r   r;   s     r&   r#   
MulPath.n3  s    TYY(9:DHHEEr(   )r   r   r   r   )r   ro   r   r   )NNT)
r5   r   r6   rM   r7   rN   r   rT   rO   r   rp   r2   rQ   rq   r3   r(   r&   r   r   c  s`    9& (,%)bb %b #	b
 b 
AbH4F Fr(   r   c                  @    \ rS rSrSS jrS	S jrS
S jrSSS jjrSrg)NegatedPathi  c                    U   [        U[        [        45      (       a	  U/U l        g [        U[        5      (       a  UR                  U l        g [        SSU< 3-   5      e)Nz%Can only negate URIRefs, InvPaths or zAlternativePaths, not: )r   r   r]   r"   r    r   ra   s     r&   rb   NegatedPath.__init__  sS    cFG,--DI_--DI71467 r(   Nc              #  &  #    UR                  US U45       Hu  u  pEnU R                   HZ  n[        U[        5      (       a
  XW:X  a    M2  M"  [        U[        5      (       a  XgR
                  U4U;   a    M^  MN  [        SU-  5      e   XF4v   Mw     g 7f)NzInvalid path in NegatedPath: %s)triplesr"   r   r   r]   r$   r   )r4   r5   r6   r7   rf   prg   rv   s           r&   r8   NegatedPath.eval  s     }}dD#%67GA!YYa((v 7++55!}- . $$E$IJJ  d
 8s   BBc                L    SSR                  S U R                   5       5      -  $ )Nz
Path(! %s),c              3  8   #    U  H  n[        U5      v   M     g 7fr2   r   r   s     r&   r   'NegatedPath.__repr__.<locals>.<genexpr>  r   r   r   r@   s    r&   rk   NegatedPath.__repr__  s     chh&Atyy&AAAAr(   c                T   ^ SSR                  U4S jU R                   5       5      -  $ )Nz!(%s)r   c              3  <   >#    U  H  n[        UT5      v   M     g 7fr2   r   )r   r$   r%   s     r&   r   !NegatedPath.n3.<locals>.<genexpr>  s     "T)33s,=#>#>)r   r   r;   s    `r&   r#   NegatedPath.n3  s!    #(("T$))"TTUUr(   r   )r$   z'Union[AlternativePath, InvPath, URIRef]rL   rp   r2   rQ   rq   r3   r(   r&   r   r     s    
BV Vr(   r   c                      \ rS rSrSrg)PathListi  r3   N)rU   rV   rW   rX   r[   r3   r(   r&   r   r     s    r(   r   c                d    [        U[        [        45      (       d  [        S5      e[	        X5      $ )z
alternative path
&Only URIRefs or Paths can be in paths!)r   r   r*   r   r    rD   s     r&   path_alternativer     s,     efd^,,@AA4''r(   c                d    [        U[        [        45      (       d  [        S5      e[	        X5      $ )z
sequence path
r   )r   r   r*   r   r   rD   s     r&   path_sequencer     s,     efd^,,@AA$$r(   c                V    [         R                  " [        S5      5        [        X5      $ )Nzrdflib.path.evalPath() is deprecated, use the (snake-cased) eval_path(). The mixed-case evalPath() function name is incompatible with PEP8 recommendations and will be replaced by eval_path() in rdflib 7.0.0.)warningswarnDeprecationWarningre   r5   ts     r&   evalPathr     s+     MMS	
 Ur(   c                2    S U R                  U5       5       $ )Nc              3  .   #    U  H  u  po1U4v   M     g 7fr2   r3   )r   rf   r   rg   s       r&   r   eval_path.<locals>.<genexpr>1  s     3"2wqQF"2s   )r   r   s     r&   re   re   )  s     4%--"233r(   c                    [        X5      $ )z
cardinality path
)r   )r   muls     r&   mul_pathr   4  s     1?r(   c                    [        U 5      $ )z
inverse path
)r]   r   s    r&   inv_pathr  ;  s     1:r(   c                    [        U 5      $ )z
negated path
)r   r  s    r&   neg_pathr  B  s     q>r(   __main__r2   )r$   Union[URIRef, Path]r%   rR   rO   rS   )r4   r  rE   r  )r5   r   r   zWTuple[Optional[_SubjectType], Union[None, Path, _PredicateType], Optional[_ObjectType]]rO   rP   )r   r  r   r   rO   r   )r   r  rO   r]   )r   z'Union[URIRef, AlternativePath, InvPath]rO   r   )9rY   
__future__r   r   abcr   r   	functoolsr   typingr   r   r	   r
   r   r   r   r   r   r   rdflib.termr   r   rdflib._type_checkingr   rdflib.graphr   r   r   r   rdflib.namespacer   r   r   r   r'   r*   r]   r   r    r   r   r   r   r   r   r   re   r   r  r  rU   r,   r0   r-   r.   r/   r3   r(   r&   <module>r     s  m^ #  # $   %1MM1
 
		 OS%	%1K%% (3 ( (D8d 8(6F4 6FrFd F4yFd yFxV$ VD	t 	(% 0$444 04 z %FM FN FFN&FDODLDL"DK$Dr(   