
    PiO                    n   d Z ddlmZ ddlZddlmZm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 ddlmZmZ e
rddlmZ dd	lmZmZmZmZ dd
lmZ dZ dZ!dZ"	 d6d7dZ#e G d de                      Z$ G d de$          Z% G d de$          Z& G d de$          Z' G d de$          Z( G d d e$          Z) G d! d"e*          Z+d8d%Z,d8d&Z-d9d,Z.d9d-Z/d:d1Z0d;d2Z1d<d4Z2e3d5k    rdS e,e_4        e0e_5        e1e_6        e2e_7        e-e_8        e1e$_6        e2e$_7        e0e$_5        e,e$_4        e-e$_8        dS )=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*+?argUnion[URIRef, Path]namespace_managerOptional[NamespaceManager]returnstrc                    t          | t          t          f          r0t          | j                  dk    rd|                     |          z  S |                     |          S )N   z(%s))
isinstanceSequencePathAlternativePathlenargsn3)r   r   s     `/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/paths.py_n3r+      sX     #o677 2CMMA<M<M0111166#$$$    c                      e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   e	 	 d d!d            Zed"d#d            Zd Zd Z	d$dZ
dS )%Pathz"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__Ngraphr   subjOptional[_SubjectType]objOptional[_ObjectType]r    *Iterator[Tuple[_SubjectType, _ObjectType]]c                    d S N )selfr4   r5   r7   s       r*   evalz	Path.eval   s	     69Sr,   r   r   r!   c                    d S r;   r<   r=   r   s     r*   r)   zPath.n3   s    ORsr,   c                :    t          t          |                     S r;   )hashreprr=   s    r*   __hash__zPath.__hash__   s    DJJr,   c                B    t          |           t          |          k    S r;   )rC   r=   others     r*   __eq__zPath.__eq__   s    DzzT%[[((r,   rH   r   boolc                    t          |t          t          f          s0t          dt	          |           dt	          |          d          t	          |           t	          |          k     S )Nzunorderable types: z() < z())r$   r.   r   	TypeErrorrC   rG   s     r*   __lt__zPath.__lt__   sa    %$.. 	)48JJJJUL   DzzDKK''r,   NN)r4   r   r5   r6   r7   r8   r    r9   r;   r   r   r    r!   )rH   r   r    rJ   )__name__
__module____qualname____doc____annotations__r   r>   r)   rE   rI   rM   r<   r,   r*   r.   r.      s         ,,BBBB))))****DDDD++++ (,%)	9 9 9 9 ^9 RRRR ^R     ) ) )( ( ( ( ( (r,   r.   c                  6    e Zd ZddZ	 	 dddZddZdddZdS )InvPathr   Union[Path, URIRef]c                    || _         d S r;   r   r=   r   s     r*   __init__zInvPath.__init__   s    r,   Nr4   r   r5   r6   r7   r8   r    7Generator[Tuple[_ObjectType, _SubjectType], None, None]c              #  R   K   t          ||| j        |f          D ]\  }}||fV  d S r;   )	eval_pathr   )r=   r4   r5   r7   sos         r*   r>   zInvPath.eval   sG       ec48T%:;; 	 	DAqQ$JJJJ	 	r,   r!   c                    d| j         dS )NzPath(~)rY   rD   s    r*   __repr__zInvPath.__repr__	  s     "hhh((r,   r   r   c                2    dt          | j        |          z  S )Nz^%s)r+   r   r@   s     r*   r)   z
InvPath.n3  s    s48%67777r,   )r   rW   rN   )r4   r   r5   r6   r7   r8   r    r\   r    r!   r;   rO   rP   rQ   rR   r[   r>   rc   r)   r<   r,   r*   rV   rV      sv            (,%)	    ) ) ) )8 8 8 8 8 8 8r,   rV   c                  6    e Zd ZddZ	 	 dddZddZdddZdS )r%   r(   rW   c                    g | _         |D ]G}t          |t                    r| xj         |j         z  c_         -| j                             |           Hd S r;   )r(   r$   r%   appendr=   r(   as      r*   r[   zSequencePath.__init__  sa    /1	 	$ 	$A!\** $		QV#				  ####		$ 	$r,   Nr4   r   r5   r6   r7   r8   r    7Generator[Tuple[_SubjectType, _ObjectType], None, None]c                    dfd	dfd}|r | j         ||          S |r || j         ||          S  | j         ||          S )NpathsList[Union[Path, URIRef]]r5   r6   r7   r8   r    rl   c              3     K   | dd          rEt          || d         d f          D ])\  }} | dd          ||          D ]}||d         fV  *d S t          || d         |f          D ]\  }}||fV  d S )Nr#   r   r^   rn   r5   r7   r_   r`   r	_eval_seqr4   s         r*   rt   z$SequencePath.eval.<locals>._eval_seq  s      
 QRRy %edE!Hd-CDD & &DAq&YuQRRy!S99 & &1g&& &
 &edE!Hc-BCC  DAqQ$JJJJ r,   r   c              3     K   | d d         rEt          d | d         |f          D ])\  }} | d d         ||          D ]}|d         |fV  *d S t          || d         |f          D ]\  }}||fV  d S )Nr   rq   rr   s         r*   _eval_seq_bwz'SequencePath.eval.<locals>._eval_seq_bw-  s      
 SbSz %edE"Is-CDD & &DAq&YuSbSz4;; & &dAg&& &
 &edE!Hc-BCC  DAqQ$JJJJ r,   )rn   ro   r5   r6   r7   r8   r    rl   )rn   ro   r5   r6   r7   r   r    rl   )r(   )r=   r4   r5   r7   rw   rt   s    `   @r*   r>   zSequencePath.eval  s    	 	 	 	 	 	 		 	 	 	 	 	 	  	39TYc222 	3<	45559TYc222r,   r!   c                P    dd                     d | j        D                       z  S )NPath(%s)z / c              3  4   K   | ]}t          |          V  d S r;   r!   .0xs     r*   	<genexpr>z(SequencePath.__repr__.<locals>.<genexpr>C  (      &A&A!s1vv&A&A&A&A&A&Ar,   joinr(   rD   s    r*   rc   zSequencePath.__repr__B  *    EJJ&A&Aty&A&A&AAAAAr,   r   r   c                P    d                     fd| j        D                       S )N/c              3  8   K   | ]}t          |          V  d S r;   r+   r}   rk   r   s     r*   r   z"SequencePath.n3.<locals>.<genexpr>F  .      EEaA011EEEEEEr,   r   r@   s    `r*   r)   zSequencePath.n3E  ,    xxEEEE49EEEEEEr,   r(   rW   rN   r4   r   r5   r6   r7   r8   r    rl   re   r;   rO   rf   r<   r,   r*   r%   r%     s        $ $ $ $ (,%)	'3 '3 '3 '3 '3RB B B BF F F F F F Fr,   r%   c                  6    e Zd ZddZ	 	 dddZddZdddZdS )r&   r(   rW   c                    g | _         |D ]G}t          |t                    r| xj         |j         z  c_         -| j                             |           Hd S r;   )r(   r$   r&   ri   rj   s      r*   r[   zAlternativePath.__init__J  sa    /1	 	$ 	$A!_-- $		QV#				  ####		$ 	$r,   Nr4   r   r5   r6   r7   r8   r    rl   c              #  R   K   | j         D ]}t          ||||f          D ]}|V  d S r;   )r(   r^   )r=   r4   r5   r7   r~   ys         r*   r>   zAlternativePath.evalR  sR        	 	AutQn55  	 	r,   r!   c                P    dd                     d | j        D                       z  S )Nry   z | c              3  4   K   | ]}t          |          V  d S r;   r{   r|   s     r*   r   z+AlternativePath.__repr__.<locals>.<genexpr>]  r   r,   r   rD   s    r*   rc   zAlternativePath.__repr__\  r   r,   r   r   c                P    d                     fd| j        D                       S )N|c              3  8   K   | ]}t          |          V  d S r;   r   r   s     r*   r   z%AlternativePath.n3.<locals>.<genexpr>`  r   r,   r   r@   s    `r*   r)   zAlternativePath.n3_  r   r,   r   rN   r   re   r;   rO   rf   r<   r,   r*   r&   r&   I  s        $ $ $ $ (,%)	    B B B BF F F F F F Fr,   r&   c                  8    e Zd ZddZ	 	 	 dddZddZdddZdS )MulPathpathrW   modr   c                    || _         || _        |t          k    rd| _        d| _        d S |t
          k    rd| _        d| _        d S |t          k    rd| _        d| _        d S t          d|z            )NTFzUnknown modifier %s)r   r   	ZeroOrOnezeromore
ZeroOrMore	OneOrMore	Exception)r=   r   r   s      r*   r[   zMulPath.__init__d  s{    	)DIDIIIJDIDIIIIDIDIII1C7888r,   NTr4   r   r5   r6   r7   r8   firstrJ   r    rl   c              #     	K    j         r$|r"|r|r||k    r||fV  n|r||fV  n|r||fV  	 	 	 dd	 fd			 	 	 dd fdd	 fd}t                      }|r; 	||t                                D ]}||vr|                    |           |V   d S |r; ||t                                D ]}||vr|                    |           |V   d S  |            D ]}||vr|                    |           |V   d S )Nr5   r6   r7   r8   seenOptional[Set[_SubjectType]]r    rl   c              3     K   |                     |            t          | 	j        d f          D ]8\  }}|r||k    r||fV  	j        r||v r |||          D ]\  }}||fV  9d S r;   addr^   r   r   )
r5   r7   r   r_   r`   s2o2_fwdr4   r=   s
          r*   r   zMulPath.eval.<locals>._fwd  s       HHTNNN!%$	4)@AA $ $1 a3hhQ$JJJ9 $Dyy "&$q#t"4"4 $ $Be$ $r,   Optional[Set[_ObjectType]]c              3     K   |                     |           t          d 	j        |f          D ]8\  }}| r| |k    r||fV  	j        r||v r d ||          D ]\  }}||fV  9d S r;   r   )
r5   r7   r   r_   r`   r   r   _bwdr4   r=   s
          r*   r   zMulPath.eval.<locals>._bwd  s       HHSMMM!%$	3)?@@ 	$ 	$1 tqyyQ$JJJ9 $Dyy "&$tQ"5"5 $ $B !e	$ 	$r,   c            	   3    K   	j         rgt                      }                     d           D ]C\  }}|| vr|                     |           ||fV  || vr|                     |           ||fV  Dt                      }t	          d 	j        d f          D ]h\  }}	j        s||fV  ||vrQ|                    |           t           |d t                                          }|D ]\  }}||k    sJ ||fV  id S r;   )r   setsubject_objectsr   r^   r   r   list)
seen1r_   r`   r   fs1o1r   r4   r=   s
          r*   _all_fwd_pathsz$MulPath.eval.<locals>._all_fwd_paths  sA     y # "11$77 # #DAq~~		!d


~~		!d


55D!%$	4)@AA 	) 	)1y )Q$JJJJ}} asuu!5!566&' ) )FB#%7777"$b&LLLL	) 	)r,   )NNN)r5   r6   r7   r8   r   r   r    rl   )r5   r6   r7   r8   r   r   r    rl   )r    rl   )r   r   r   )
r=   r4   r5   r7   r   r   doner~   r   r   s
   ``      @@r*   r>   zMulPath.evalt  s      9 	 	  3;;)OOO Dj     3h ,0)-04	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$( ,0)-/3	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$(	) 	) 	) 	) 	) 	) 	) 	)8 uu 	T$SUU++  D==HHQKKKGGG   		T$SUU++  D==HHQKKKGGG 
 $^%%  D==HHQKKKGGG r,   r!   c                &    d| j         | j        dS )NzPath(rb   )r   r   rD   s    r*   rc   zMulPath.__repr__  s     #yy$(((33r,   r   r   c                >    t          | j        |          | j        S r;   )r+   r   r   r@   s     r*   r)   z
MulPath.n3  s!    TY(9:::DHHEEr,   )r   rW   r   r   )NNT)
r4   r   r5   r6   r7   r8   r   rJ   r    rl   re   r;   rO   rf   r<   r,   r*   r   r   c  s        9 9 9 9& (,%)b b b b bH4 4 4 4F F F F F F Fr,   r   c                  0    e Zd ZddZddZddZdddZdS )NegatedPathr   'Union[AlternativePath, InvPath, URIRef]c                    |  t          |t          t          f          r
|g| _        d S t          |t                    r|j        | _        d S t          dd|z             )Nz%Can only negate URIRefs, InvPaths or zAlternativePaths, not: )r$   r   rV   r(   r&   r   rZ   s     r*   r[   zNegatedPath.__init__  sp    ,cFG,-- 	DIII_-- 	DIII771467  r,   Nc              #    K   |                     |d |f          D ]i\  }}}| j        D ]U}t          |t                    r	||k    r n= t          |t                    r||j        |f|v r nDt          d|z            ||fV  jd S )NzInvalid path in NegatedPath: %s)triplesr(   r$   r   rV   r   r   )r=   r4   r5   r7   r_   pr`   rk   s           r*   r>   zNegatedPath.eval  s      }}dD#%677 	 	GAq!Y 
 
a(( KAvv 7++ K15!}-- . $$E$IJJJd


	 	r,   r    r!   c                P    dd                     d | j        D                       z  S )Nz
Path(! %s),c              3  4   K   | ]}t          |          V  d S r;   r{   r|   s     r*   r   z'NegatedPath.__repr__.<locals>.<genexpr>  r   r,   r   rD   s    r*   rc   zNegatedPath.__repr__  s*    chh&A&Aty&A&A&AAAAAr,   r   r   c                V    dd                     fd| j        D                       z  S )Nz!(%s)r   c              3  8   K   | ]}t          |          V  d S r;   r   )r}   r   r   s     r*   r   z!NegatedPath.n3.<locals>.<genexpr>  s.      "T"T33s,=#>#>"T"T"T"T"T"Tr,   r   r@   s    `r*   r)   zNegatedPath.n3  s1    #(("T"T"T"T$)"T"T"TTTUUr,   )r   r   rN   re   r;   rO   rf   r<   r,   r*   r   r     st        
 
 
 
   B B B BV V V V V V Vr,   r   c                      e Zd ZdS )PathListN)rP   rQ   rR   r<   r,   r*   r   r     s        Dr,   r   r=   rH   c                x    t          |t          t          f          st          d          t	          | |          S )z
    alternative path
    &Only URIRefs or Paths can be in paths!)r$   r   r.   r   r&   rG   s     r*   path_alternativer     s:     efd^,, B@AAA4'''r,   c                x    t          |t          t          f          st          d          t	          | |          S )z
    sequence path
    r   )r$   r   r.   r   r%   rG   s     r*   path_sequencer     s:     efd^,, B@AAAe$$$r,   r4   r   tWTuple[Optional[_SubjectType], Union[None, Path, _PredicateType], Optional[_ObjectType]]r9   c                d    t          j        t          d                     t          | |          S )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DeprecationWarningr^   r4   r   s     r*   evalPathr     s=     MS	
 	
   UAr,   c                @    d |                      |          D             S )Nc              3  &   K   | ]\  }}}||fV  d S r;   r<   )r}   r_   r   r`   s       r*   r   zeval_path.<locals>.<genexpr>1  s,      33wq!QQF333333r,   )r   r   s     r*   r^   r^   )  s$     43%--"2"23333r,   r   mulr   c                "    t          | |          S )z
    cardinality path
    )r   )r   r   s     r*   mul_pathr   4  s     1c??r,   c                     t          |           S )z
    inverse path
    )rV   r   s    r*   inv_pathr   ;  s     1::r,   'Union[URIRef, AlternativePath, InvPath]c                     t          |           S )z
    negated path
    )r   r   s    r*   neg_pathr   B  s     q>>r,   __main__r;   )r   r   r   r   r    r!   )r=   r   rH   r   )r4   r   r   r   r    r9   )r   r   r   r   r    r   )r   r   r    rV   )r   r   r    r   )9rS   
__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.   rV   r%   r&   r   r   r   r   r   r   r   r^   r   r   r   rP   r/   r3   r0   r1   r2   r<   r,   r*   <module>r      s  m m^ # " " " " "  # # # # # # # # $ $ $ $ $ $                        % $ $ $ $ $ $ $ 2111111MMMMMMMMMMMM111111
 
		 OS% % % % % ( ( ( ( (3 ( ( (D8 8 8 8 8d 8 8 8(6F 6F 6F 6F 6F4 6F 6F 6FrF F F F Fd F F F4yF yF yF yF yFd yF yF yFxV V V V V$ V V VD	 	 	 	 	t 	 	 	( ( ( (% % % %   $4 4 4 4          zD %FM FN FFN&FDODLDL"DK$Dr,   