
    01ie'                    |    S SK Jr  S SKJrJrJrJrJr  S SKJ	r	  S SK
JrJr  \(       a  S SKJr  S/r " S S5      rg)	    )annotations)TYPE_CHECKINGIterableIteratorListOptional)RDF)BNodeNode)Graph
Collectionc                      \ rS rSrSr/ 4SS jjrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrS rSrg)r      a  See "Emulating container types": <https://docs.python.org/reference/datamodel.html#emulating-container-types>

```python
>>> from rdflib.term import Literal
>>> from rdflib.graph import Graph
>>> from pprint import pprint
>>> listname = BNode()
>>> g = Graph('Memory')
>>> listItem1 = BNode()
>>> listItem2 = BNode()
>>> g.add((listname, RDF.first, Literal(1))) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listname, RDF.rest, listItem1)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem1, RDF.first, Literal(2))) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem1, RDF.rest, listItem2)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem2, RDF.rest, RDF.nil)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem2, RDF.first, Literal(3))) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> c = Collection(g,listname)
>>> pprint([term.n3() for term in c])
['"1"^^<http://www.w3.org/2001/XMLSchema#integer>',
 '"2"^^<http://www.w3.org/2001/XMLSchema#integer>',
 '"3"^^<http://www.w3.org/2001/XMLSchema#integer>']
>>> Literal(1) in c
True
>>> len(c)
3
>>> c._get_container(1) == listItem1
True
>>> c.index(Literal(2)) == 1
True

```

The collection is immutable if `uri` is the empty list (`http://www.w3.org/1999/02/22-rdf-syntax-ns#nil`).
c                X    Xl         U=(       d
    [        5       U l        U(       a  X-  n g g N)graphr
   uri)selfr   r   seqs       K/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/collection.py__init__Collection.__init__8   s#    
>%'KD     c                p    SSR                  U  Vs/ s H  oR                  5       PM     sn5      -  $ s  snf )ap  
```python
>>> from rdflib.term import Literal
>>> from rdflib.graph import Graph
>>> listname = BNode()
>>> g = Graph('Memory')
>>> listItem1 = BNode()
>>> listItem2 = BNode()
>>> g.add((listname, RDF.first, Literal(1))) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listname, RDF.rest, listItem1)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem1, RDF.first, Literal(2))) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem1, RDF.rest, listItem2)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem2, RDF.rest, RDF.nil)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((listItem2, RDF.first, Literal(3))) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> c = Collection(g, listname)
>>> print(c.n3()) #doctest: +NORMALIZE_WHITESPACE
( "1"^^<http://www.w3.org/2001/XMLSchema#integer>
    "2"^^<http://www.w3.org/2001/XMLSchema#integer>
    "3"^^<http://www.w3.org/2001/XMLSchema#integer> )

```
z( %s ) )joinn3)r   is     r   r   Collection.n3>   s.    : 388T$:TTTVT$:;<<$:s   3
c                    [        U[        5      (       d   eU R                  nU R                  nSnXA:  a2  US-  nUR	                  U[
        R                  5      nUc   U$ XA:  a  M2  U$ )z+Gets the first, rest holding node at index.r      )
isinstanceintr   r   valuer	   rest)r   indexr   	containerr   s        r   _get_containerCollection._get_container]   sl    %%%%%

$(HH	iFAIsxx8I  i
 r   c                p    [        [        U R                  R                  U R                  5      5      5      $ )zlength of items in collection.)lenlistr   itemsr   r   s    r   __len__Collection.__len__j   s%    4

((2344r   c                   U R                   nSn U[        R                  U4U R                  ;   a  U$ [	        U R                  R                  U[        R                  5      5      nUS-  nU[        R                  /:X  a  [        U< SU R                   < 35      eU(       d  [        SU R                   -  5      e[        U5      S:X  d   SU R                   -  5       eUS   nM  )z=
Returns the 0-based numerical index of the item in the list
r   r!   z is not in zMalformed RDF Collection: %s)r   r	   firstr   r,   objectsr%   nil
ValueError	Exceptionr+   )r   itemlistnamer&   newlinks        r   r&   Collection.indexn   s     88#))T*djj8tzz11(CHHEF
swwi'$$%IJJ #$BTXX$MNNw<1,W.Ltxx.WW,&qzH r   c                    U R                  U5      nU(       a>  U R                  R                  U[        R                  5      nU(       a  U$ [        U5      e[        U5      e)TODO)r(   r   r$   r	   r2   KeyError
IndexError)r   keycvs       r   __getitem__Collection.__getitem__   sK    $

  CII.Asm#S/!r   c                    U R                  U5      nU(       a-  U R                  R                  U[        R                  U45        g[        U5      e)r<   N)r(   r   setr	   r2   r>   )r   r?   r$   r@   s       r   __setitem__Collection.__setitem__   s:    $JJNNAsyy%01S/!r   c                J   X     U R                   nU R                  U5      nU(       d   e[        U 5      S:X  a  US:  a  gU[        U 5      S-
  :X  ac  U R                  US-
  5      nU R                   R                  U[        R
                  [        R                  45        UR                  USS45        gU R                  US-   5      nU R                  US-
  5      nU(       a  U(       d   eUR                  USS45        UR                  U[        R
                  U45        g)a  
```python
>>> from rdflib.namespace import RDF, RDFS
>>> from rdflib import Graph
>>> from pprint import pformat
>>> g = Graph()
>>> a = BNode('foo')
>>> b = BNode('bar')
>>> c = BNode('baz')
>>> g.add((a, RDF.first, RDF.type)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((a, RDF.rest, b)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((b, RDF.first, RDFS.label)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((b, RDF.rest, c)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((c, RDF.first, RDFS.comment)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> g.add((c, RDF.rest, RDF.nil)) # doctest: +ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.Graph'>)>
>>> len(g)
6
>>> def listAncestry(node, graph):
...   for i in graph.subjects(RDF.rest, node):
...     yield i
>>> [str(node.n3())
...   for node in g.transitiveClosure(listAncestry, RDF.nil)]
['_:baz', '_:bar', '_:foo']
>>> lst = Collection(g, a)
>>> len(lst)
3
>>> b == lst._get_container(1)
True
>>> c == lst._get_container(2)
True
>>> del lst[1]
>>> len(lst)
2
>>> len(g)
4

```
r!   r   N)r   r(   r+   rE   r	   r%   r4   remove)r   r?   r   current	priorlinknextpriors          r   __delitem__Collection.__delitem__   s    Z 		

%%c*wt9>cAgCIM!++C!G4IJJNNIsxx9:LL'4./&&sQw/D''a0EE!>LL'4./IIuchh-.r   c                L    U R                   R                  U R                  5      $ )z"Iterator over items in Collections)r   r-   r   r.   s    r   __iter__Collection.__iter__   s    zz))r   c                    U R                   n U R                  R                  U[        R                  5      nUb  U[        R
                  :X  a  U$ UnMG  r   )r   r   r$   r	   r%   r4   )r   r'   r%   s      r   _endCollection._end   sG    HH	::##Isxx8D|tsww   	 r   c                   U R                  5       nU[        R                  :X  a  [        S5      eU[        R                  S4U R
                  ;   a8  [        5       nU R
                  R                  U[        R                  U45        UnU R
                  R                  U[        R                  U45        U R
                  R                  U[        R                  [        R                  45        U $ )aG  
```python
>>> from rdflib.term import Literal
>>> from rdflib.graph import Graph
>>> listname = BNode()
>>> g = Graph()
>>> c = Collection(g,listname,[Literal(1),Literal(2)])
>>> links = [
...     list(g.subjects(object=i, predicate=RDF.first))[0] for i in c]
>>> len([i for i in links if (i, RDF.rest, RDF.nil) in g])
1

```
Cannot append to empty listN)
rT   r	   r4   r5   r2   r   r
   rE   r%   add)r   r7   endnodes       r   appendCollection.append   s     iik#''>:;;D!TZZ/7DJJNNC401C

SYY-.

SXXsww/0r   c                L   U R                  5       nU[        R                  :X  a  [        S5      eU R                  R                  U[        R                  S 45        U H  nU[        R                  S 4U R                  ;   a8  [        5       nU R                  R                  U[        R                  U45        UnU R                  R                  U[        R                  U45        M     U R                  R                  U[        R                  [        R                  45        U $ )NrW   )
rT   r	   r4   r5   r   rI   r%   r2   r
   rX   )r   otherrY   r7   nxts        r   __iadd__Collection.__iadd__  s    iik#''>:;;

3$/0DSYY%3g

SXXs34JJNNCD12  	

SXXsww/0r   c                "   U R                   nU R                  nU(       ao  UR                  U[        R                  5      nUR                  U[        R                  S 45        UR                  U[        R                  S 45        UnU(       a  Mo  U $ r   )r   r   r$   r	   r%   rI   r2   )r   r'   r   r%   s       r   clearCollection.clear  sl    $(HH	

;;y#((3DLL)SYY56LL)SXXt45I	 i
 r   )r   r   N)r   r   r   r   r   z
List[Node])returnstr)r&   r#   re   zOptional[Node])re   r#   )r7   r   re   r#   )r?   r#   re   r   )r?   r#   r$   r   re   None)r?   r#   re   rg   )re   zIterator[Node])re   r   )r7   r   re   r   )r^   zIterable[Node])__name__
__module____qualname____firstlineno____doc__r   r   r(   r/   r&   rB   rF   rN   rQ   rT   r[   r`   rc   __static_attributes__ r   r   r   r      sQ    'R CE =>5*(
"">/@*!:"r   N)
__future__r   typingr   r   r   r   r   rdflib.namespacer	   rdflib.termr
   r   rdflib.graphr   __all__r   rn   r   r   <module>ru      s-    " D D   #".L Lr   