
    01i=                       S SK Jr  S SKrS SKrS SKrS SKrS SKJrJ	r	  S SKJ
r
JrJrJrJrJrJrJrJrJrJr  S SKrS SKJrJrJr  S SKJr  S SKJr  S SKJ r J!r!J"r"J#r#J$r$J%r%  \
(       a  S S	K&J'r'  \" 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\5      r/ " S S\/5      r0 " S S5      r1 " S S5      r2 " S S5      r3 " S S 5      r4g)!    )annotationsN)MappingMutableMapping)TYPE_CHECKINGAny	ContainerDict	GeneratorIterableListOptionalTupleTypeVarUnion)ConjunctiveGraphDatasetGraph)NamespaceManager)	CompValue)BNode
IdentifierLiteralNodeURIRefVariable)Path_AnyTc                  "    \ rS rSrSSS jjrSrg)SPARQLError#   Nc                .    [         R                  X5        g N)	Exception__init__selfmsgs     V/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/sparql/sparql.pyr$   SPARQLError.__init__$   s    4%     r"   r'   Optional[str]__name__
__module____qualname____firstlineno__r$   __static_attributes__r+   r*   r(   r   r   #   s    & &r*   r   c                  "    \ rS rSrSSS jjrSrg)NotBoundError(   Nc                .    [         R                  X5        g r"   r   r$   r%   s     r(   r$   NotBoundError.__init__)       T'r*   r+   r"   r,   r.   r+   r*   r(   r5   r5   (   s    ( (r*   r5   c                      \ rS rSrSrS rSrg)AlreadyBound-   z<Raised when trying to bind a variable that is already bound!c                .    [         R                  U 5        g r"   r8   r&   s    r(   r$   AlreadyBound.__init__0   s    T"r*   r+   Nr/   r0   r1   r2   __doc__r$   r3   r+   r*   r(   r<   r<   -   s
    F#r*   r<   c                      \ rS rSrSS jrSrg)SPARQLTypeError4   c                .    [         R                  X5        g r"   r8   r%   s     r(   r$   SPARQLTypeError.__init__5   r:   r*   r+   Nr,   r.   r+   r*   r(   rD   rD   4   s    (r*   rD   c                  z    \ rS rSrSrS/ 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rg)Bindings9   z

A single level of a stack of variable-value bindings.
Each dict keeps a reference to the dict below it,
any failed lookup is propegated back

In python 3.3 this could be a collections.ChainMap
Nc                0    [        U5      U l        Xl        g r"   )dict_douter)r&   rN   ds      r(   r$   Bindings.__init__C   s    "&q'
r*   c                    XR                   ;   a  U R                   U   $ U R                  (       d
  [        5       eU R                  U   $ r"   )rM   rN   KeyErrorr&   keys     r(   __getitem__Bindings.__getitem__G   s6    ''>773<zz*zz#r*   c                .     X     g! [          a     gf = f)NTFrR   rS   s     r(   __contains__Bindings.__contains__O   s!    	I 		s    
c                     X R                   U'   g r"   rM   r&   rT   values      r(   __setitem__Bindings.__setitem__V   s    r*   c                    [        S5      e)NzDelItem is not implemented!)r#   rS   s     r(   __delitem__Bindings.__delitem__Y   s    566r*   c                f    SnU nUb)  U[        UR                  5      -  nUR                  nUb  M)  U$ Nr   )lenrM   rN   )r&   irO   s      r(   __len__Bindings.__len__\   s9     $mQTTNAA m r*   c              #  f   #    U nUb&  UR                    S h  vN   UR                  nUb  M%  g g  N7fr"   rM   rN   )r&   rO   s     r(   __iter__Bindings.__iter__d   s-      $mttOOA ms   1/11c                F   ^  SSR                  U 4S jT  5       5      -   S-   $ )Nz
Bindings({z, c              3  0   >#    U  H  oTU   4v   M     g 7fr"   r+   ).0kr&   s     r(   	<genexpr>#Bindings.__str__.<locals>.<genexpr>l   s     'CdDGds   z}))joinr?   s   `r(   __str__Bindings.__str__j   s"    dii'Cd'CCCdJJr*   c                    [        U 5      $ r"   )strr?   s    r(   __repr__Bindings.__repr__n   s    4yr*   rk   )rN   zOptional[Bindings])rT   rx   returnrx   )rT   r   r{   bool)rT   rx   r^   r   r{   None)rT   rx   r{   r}   r{   int)r{   zGenerator[str, None, None]r{   rx   )r/   r0   r1   r2   rB   r$   rU   rY   r_   rb   rh   rl   ru   ry   r3   r+   r*   r(   rI   rI   9   s<     482 7Kr*   rI   c                      \ rS rSrSrSS jrS 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g)
FrozenDictr   zR
An immutable hashable dict

Taken from http://stackoverflow.com/a/2704866/81121

c                2    [        U0 UD6U l        S U l        g r"   )rL   rM   _hash)r&   argskwargss      r(   r$   FrozenDict.__init__z   s    04d0Ef0E$(
r*   c                ,    [        U R                  5      $ r"   )iterrM   r?   s    r(   rl   FrozenDict.__iter__~       DGG}r*   c                ,    [        U R                  5      $ r"   )rf   rM   r?   s    r(   rh   FrozenDict.__len__       477|r*   c                     U R                   U   $ r"   r\   rS   s     r(   rU   FrozenDict.__getitem__   s    wws|r*   c                    U R                   c\  SU l         U R                  5        HA  u  pU =R                   [        U5      -  sl         U =R                   [        U5      -  sl         MC     U R                   $ re   )r   itemshashr]   s      r(   __hash__FrozenDict.__hash__   sW     ::DJ"jjl


d3i'


d5k)
 + zzr*   c                J   ^ [        U4S jU R                  5        5       5      $ )Nc              3  <   >#    U  H  oS    T;   d  M  Uv   M     g7fr   Nr+   rp   xvarss     r(   rr   %FrozenDict.project.<locals>.<genexpr>   s     B\qTT\!!\   	)r   r   r&   r   s    `r(   projectFrozenDict.project   s    BTZZ\BBBr*   c                R    [        [        U 5      R                  U5      5      (       + $ r"   )r|   setintersection)r&   others     r(   disjointDomainFrozenDict.disjointDomain   s    D	..u5666r*   c                R    U  H  n X   X   :w  a    gM     g! [          a     M"  f = f)NFTrX   )r&   r   rq   s      r(   
compatibleFrozenDict.compatible   s>    A7eh&  '    s   

&&c                ~    [        [        R                  " U R                  5       UR                  5       5      5      nU$ r"   )r   	itertoolschainr   r&   r   ress      r(   mergeFrozenDict.merge   s(    u{{}EF
r*   c                ,    [        U R                  5      $ r"   )rx   rM   r?   s    r(   ru   FrozenDict.__str__   r   r*   c                ,    [        U R                  5      $ r"   )reprrM   r?   s    r(   ry   FrozenDict.__repr__   r   r*   )rM   r   N)r   r   r   r   r~   )rT   r   r{   r   )r   Container[Variable]r{   r   )r   !t.Mapping[Identifier, Identifier]r{   r|   )r   r   r{   r   r   )r/   r0   r1   r2   rB   r$   rl   rh   rU   r   r   r   r   r   ru   ry   r3   r+   r*   r(   r   r   r   s?    )C7
r*   r   c                      \ rS rSrSS jrSS jrSS jrSS jr\SS j5       r	\SS j5       r
\SS j5       r S     SS
 jjrSS jrSrg	)FrozenBindings   c                D    [         R                  " U /UQ70 UD6  Xl        g r"   )r   r$   ctx)r&   r   r   r   s       r(   r$   FrozenBindings.__init__   s    D24262r*   c                    [        U[        5      (       d  [        U5      n[        U[        [        45      (       d  U$ XR                  ;  a  U R
                  R                  U   $ U R                  U   $ r"   )
isinstancer   r   r   rM   r   initBindingsrS   s     r(   rU   FrozenBindings.__getitem__   s^    #t$$3-C#x011Jgg 88((--773<r*   c                `   ^ [        U R                  U4S jU R                  5        5       5      $ )Nc              3  <   >#    U  H  oS    T;   d  M  Uv   M     g7fr   r+   r   s     r(   rr   )FrozenBindings.project.<locals>.<genexpr>   s     (QLqaDDLLr   r   r   r   r   s    `r(   r   FrozenBindings.project   s     dhh(QDJJL(QRRr*   c                    [        U R                  [        R                  " U R	                  5       UR	                  5       5      5      nU$ r"   )r   r   r   r   r   r   s      r(   r   FrozenBindings.merge   s.    TXXytzz|U[[]'ST
r*   c                .    U R                   R                  $ r"   )r   nowr?   s    r(   r   FrozenBindings.now   s    xx||r*   c                .    U R                   R                  $ r"   )r   bnodesr?   s    r(   r   FrozenBindings.bnodes   s    xxr*   c                .    U R                   R                  $ r"   )r   prologuer?   s    r(   r   FrozenBindings.prologue   s    xx   r*   Nc                z   ^ ^^ T(       d  / m[        T R                  UUU 4S jT R                  5        5       5      $ )zA
return a frozen dict only of bindings made in self
since before
c              3     >#    U  H8  nUS    T;   d(  US    TR                   R                  ;   d  TUS       b  M4  Uv   M:     g7fr   )r   r   )rp   r   _exceptbeforer&   s     r(   rr   (FrozenBindings.forget.<locals>.<genexpr>   sF      	%AaDGOttxx444ad| %s
   3A	Ar   )r&   r   r   s   ```r(   forgetFrozenBindings.forget   s6     G HH		
 	
r*   c                `   ^ [        U R                  U4S jU R                  5        5       5      $ )z0
return a frozen dict only of bindings in these
c              3  <   >#    U  H  oS    T;   d  M  Uv   M     g7fr   r+   )rp   r   theses     r(   rr   *FrozenBindings.remember.<locals>.<genexpr>   s     (RLqaDEMLr   r   )r&   r   s    `r(   rememberFrozenBindings.remember   s"     dhh(RDJJL(RSSr*   )r   )r   QueryContext)rT   zUnion[Identifier, str]r{   r   )r   r   r{   r   )r   r   r{   r   r{   zdatetime.datetime)r{   zt.Mapping[Identifier, BNode])r{   zOptional[Prologue]r"   )r   r   r   zOptional[Container[Variable]]r{   r   )r{   r   )r/   r0   r1   r2   r$   rU   r   r   propertyr   r   r   r   r   r3   r+   r*   r(   r   r      s}     S     ! ! NR
"
-J
	
2Tr*   r   c                      \ rS rSrSr    S     SS jjr\SS j5       r S   SS jjr\SS j5       r	  S         SS jjr
SS	 jrSSS
 jjrSSS jjrSS jrSS jrSS jrSS jrS S jrSrg)!r      z8
Query context - passed along when evaluating the query
Nc                   X0l         [        U=(       d    / S9U l        U(       a  U R                  R                  U5        U   U   [	        U[
        [        45      (       Gap  U(       Ga  [        5       U l        [        5       U l	        U H  nUR                  (       aU  UR                  UR                  5      nU =R                  U-  sl	        U(       d  U R                  UR                  SS9  Mg  Mi  UR                  (       d  M|  [        U R                  R                  UR                  S9nUR                  UR                  5      nXx-  nU(       a  M  U R                  UR                  SS9  M     OjXl        [         R"                  R$                  R&                  (       a  U R                  U l	        O)U R                  R(                  U l	        OS U l        Xl	        S U l        S U l        [.        R0                  " [2        5      U l        g )N)rO   T)default)store
identifierF)r   rI   bindingsupdater   r   r   _datasetr   graphr   get_contextloadnameddatasetr   rdflibpluginssparqlSPARQL_DEFAULT_GRAPH_UNIONdefault_contextr   _nowcollectionsdefaultdictr   r   )	r&   r   r   r   datasetClauserO   
from_graphnamedGraphsfrom_named_graphss	            r(   r$   QueryContext.__init__   sp    ) 8>r2MM  .eg'7899 '	"W
&Ayy%*%6%6qyy%A


j0
) IIaiiI>  *&+"&,,"4"4' -2,=,=agg,F)#800 IIagguI= ' !&>>((CC!%DJ!%!=!=DJ DMJ,015	;F;R;R<
r*   c                    U R                   c<  [        R                  R                  [        R                  R                  5      U l         U R                   $ r"   )r   datetimer   timezoneutcr?   s    r(   r   QueryContext.now,  s:    99 ))--h.?.?.C.CDDIyyr*   c                   [        U R                  b  U R                  OU R                  U=(       d    U R                  U R                  S9nU R
                  Ul        U R                  Ul        U R                  Ul        U$ )N)r   )r   r   r   r   r   r   r   )r&   r   rs      r(   cloneQueryContext.clone2  sa     !]]6DMMDJJ%**

 ]]
**;;r*   c                J    U R                   c  [        S5      eU R                   $ )z"current datasetzwYou performed a query operation requiring a dataset (i.e. ConjunctiveGraph), but operating currently on a single graph.)r   r#   r?   s    r(   r   QueryContext.dataset?  s,     == ; 
 }}r*   c                V  ^ U4S jn[         R                  R                  R                  (       d7  U(       a/  U =R                  U R
                  R                  U5      -  sl        ggU(       a  U" U R                  U5        gUc  UnU" U R
                  R                  U5      U5        g)a  
Load data from the source into the query context's.

Args:
    source: The source to load from.
    default: If `True`, triples from the source will be added
        to the default graph, otherwise it will be loaded into a
        graph with `source` URI as its name.
    into: The name of the graph to load the data into. If
        `None`, the source URI will be used as as the name of the
        graph.
    **kwargs: Keyword arguments to pass to
        [`parse`][rdflib.graph.Graph.parse].
c                L  >  U R                   " U4SS0TD6$ ! [         a     Of = f U R                   " U4SS0TD6$ ! [         a     Of = f U R                   " U4SS0TD6$ ! [         a     Of = f U R                   " U4SS0TD6$ ! [         a    [        SU-  5      ef = f)Nformatturtlexmln3ntz3Could not load %s as either RDF/XML, N3 or NTriples)parser#   )r   sourcer   s     r(   _load QueryContext.load.<locals>._load`  s    {{6E(EfEE {{6B%B6BB {{6A$A&AA {{6A$A&AA IFR s9    
%%> 
A
AA$ $
A10A15B
 
B#N)r   r   r   SPARQL_LOAD_GRAPHSr   r   r   )r&   r  r   intor   r  s       ` r(   r   QueryContext.loadJ  sz    ,	( ~~$$77 

dll66v>>
  djj&)<!Ddll..t4f=r*   c                |    [        U[        [        45      (       d  U$  U R                  U   $ ! [         a     g f = fr"   )r   r   r   r   rR   rS   s     r(   rU   QueryContext.__getitem__  s?    #x011J	==%% 		s   . 
;;c                0     X   $ ! [          a    Us $ f = fr"   rX   )r&   rT   r   s      r(   getQueryContext.get  s#    	9 	N	s    c                   ^ T(       a.  [        U U4S jU R                  R                  5        5       5      $ [        X R                  R                  5       5      $ )z?
Return a static copy of the current variable bindings as dict
c              3  >   >#    U  H  u  pUT;   d  M  X4v   M     g 7fr"   r+   )rp   rq   vr   s      r(   rr   (QueryContext.solution.<locals>.<genexpr>  s     M*?$!19vv*?s   
)r   r   r   r   s    `r(   solutionQueryContext.solution  sG     !M$--*=*=*?M  "$(;(;(=>>r*   c                x    XR                   ;   a  U R                   U   U:w  a
  [        5       eX R                   U'   g r"   )r   r<   r]   s      r(   r_   QueryContext.__setitem__  s0    --DMM#$6%$?. "cr*   c                2    U R                  5       nXl        U$ r"   )r  r   )r&   r   r  s      r(   	pushGraphQueryContext.pushGraph  s    JJLr*   c                N    U R                  [        U R                  5      5      nU$ r"   )r  rI   r   )r&   r  s     r(   pushQueryContext.push  s    JJx./r*   c                $    U R                  / 5      $ r"   r  r?   s    r(   cleanQueryContext.clean  s    zz"~r*   c                (    U R                  U5      nU$ )z?
Create a new read/write query context from the given solution
r+  )r&   frozenbindingscs      r(   thawQueryContext.thaw  s     JJ~&r*   )r   r   r   r   r   r   r   )NNNN)r   Optional[Graph]r   z4Optional[Union[Bindings, FrozenBindings, List[Any]]]r   z"Optional[Mapping[str, Identifier]]r   r"   )r   z4Optional[Union[FrozenBindings, Bindings, List[Any]]]r{   r   )r{   r   )FN)
r  r   r   r|   r  zOptional[Identifier]r   r   r{   r}   )rT   zUnion[str, Path]r{   zOptional[Union[str, Path]])rT   rx   r   zOptional[Any]r{   r   )r   zOptional[Iterable[Variable]]r{   r   )rT   rx   r^   rx   r{   r}   )r   r3  r{   r   )r{   r   )r/  r   r{   r   )r/   r0   r1   r2   rB   r$   r   r   r  r   r   rU   r  r   r_   r%  r(  r,  r1  r3   r+   r*   r(   r   r      s     "&IM;?/
/
 G/
 9	/
b   PTL	   %)	6>6> 6> #	6>
 6> 
6>p	?#
r*   r   c                  H    \ rS rSrSrS	S jrS
S jrSS jr    SS jrSr	g)Prologuei  zA
A class for holding prefixing bindings and base URI information
c                B    S U l         [        [        5       5      U l        g r"   )baser   r   namespace_managerr?   s    r(   r$   Prologue.__init__  s    #'	!1%'!:r*   c                    U R                   R                  R                  U=(       d    S5      nUc  [        SU-  5      e[	        X2=(       d    S-   5      $ )N zUnknown namespace prefix : %s)r8  r   	namespacer#   r   )r&   prefix	localnamenss       r(   resolvePNamePrologue.resolvePName  sJ    ##))33FLbA:;fDEEbO,--r*   c                8    U R                   R                  XSS9  g )NT)replace)r8  bind)r&   r=  uris      r(   rD  Prologue.bind  s    ##F#>r*   c                   [        U[        5      (       a  UR                  S:X  a&  U R                  UR                  UR
                  5      $ UR                  S:X  a8  [        UR                  UR                  U R                  UR                  5      S9$  U$ [        U[        5      (       a  SU;  a  [        XR                  S9$ U$ )zk
Apply BASE / PREFIXes to URIs
(and to datatypes in Literals)

TODO: Move resolving URIs to pre-processing
pnameliteral)langdatatype:)r7  )r   r   namer@  r=  r>  r   stringrJ  
absolutizerK  r   r7  )r&   iris     r(   rO  Prologue.absolutize  s     c9%%xx7"((S]]CCxx9$JJSXX8U  % 
 V$$SCZ#II..
r*   )r7  r8  N)r{   r}   )r=  r-   r>  r-   r{   r   )r=  r-   rE  r   r{   r}   )rP  Optional[Union[CompValue, str]]r{   rR  )
r/   r0   r1   r2   rB   r$   r@  rD  rO  r3   r+   r*   r(   r5  r5    s+    ;.?2	(r*   r5  c                  "    \ rS rSrSrSS jrSrg)Queryi  z
A parsed and translated query
c                     Xl         X l        U   g r"   r   algebrar&   r   rW  s      r(   r$   Query.__init__       r*   rW  r   N)r   r5  rW  r   rA   r+   r*   r(   rT  rT        Jr*   rT  c                  "    \ rS rSrSrSS jrSrg)Updatei  z 
A parsed and translated update
c                     Xl         X l        U   g r"   rV  rX  s      r(   r$   Update.__init__  rZ  r*   r[  N)r   r5  rW  zList[CompValue]rA   r+   r*   r(   r^  r^    r\  r*   r^  )5
__future__r   r   r   r   typingtcollections.abcr   r   r   r   r   r	   r
   r   r   r   r   r   r   rdflib.plugins.sparqlr   rdflib.graphr   r   r   rdflib.namespacer   !rdflib.plugins.sparql.parserutilsr   rdflib.termr   r   r   r   r   r   rdflib.pathsr   r   r#   r   r5   r<   rD   rI   r   r   r   r5  rT  r^  r+   r*   r(   <module>rk     s    "     3     9 9 - 7 J J! 	&) &
(K (
#; #(k (
6~ 6r; ;|CTZ CTL~ ~B' 'TJ JJ Jr*   