
    i=                       d dl mZ d dlZd dlZd dlZd dlZd dl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mZmZ d dlZd dlmZmZmZ d dlmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z% e
rd d	l&m'Z'  ed
      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/ G d de/      Z0 G d d      Z1 G d d      Z2 G d d      Z3 G d d       Z4y)!    )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                      e Zd ZdddZy)SPARQLErrorNc                0    t         j                  | |       y N)	Exception__init__selfmsgs     KC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/sparql/sparql.pyr#   zSPARQLError.__init__$   s    4%    r!   r&   Optional[str]__name__
__module____qualname__r#    r(   r'   r   r   #   s    &r(   r   c                      e Zd ZdddZy)NotBoundErrorNc                0    t         j                  | |       y r!   r   r#   r$   s     r'   r#   zNotBoundError.__init__)       T3'r(   r!   r)   r+   r/   r(   r'   r1   r1   (   s    (r(   r1   c                      e Zd ZdZd Zy)AlreadyBoundz<Raised when trying to bind a variable that is already bound!c                .    t         j                  |        y r!   r3   r%   s    r'   r#   zAlreadyBound.__init__0   s    T"r(   Nr,   r-   r.   __doc__r#   r/   r(   r'   r6   r6   -   s
    F#r(   r6   c                      e Zd ZddZy)SPARQLTypeErrorc                0    t         j                  | |       y r!   r3   r$   s     r'   r#   zSPARQLTypeError.__init__5   r4   r(   Nr)   r+   r/   r(   r'   r<   r<   4   s    (r(   r<   c                  ^    e Zd ZdZdg fddZddZddZddZddZddZ	dd	Z
dd
ZddZy)Bindingsz

    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                2    t        |      | _        || _        y r!   )dict_douter)r%   rC   ds      r'   r#   zBindings.__init__C   s    "&q'
r(   c                    || j                   v r| j                   |   S | j                  s
t               | j                  |   S r!   )rB   rC   KeyErrorr%   keys     r'   __getitem__zBindings.__getitem__G   s8    $''>773<zz*zz#r(   c                .    	 | |    y# t         $ r Y yw xY w)NTFrF   rG   s     r'   __contains__zBindings.__contains__O   s#    	I 		s    	c                "    || j                   |<   y r!   rB   r%   rH   values      r'   __setitem__zBindings.__setitem__V   s    r(   c                    t        d      )NzDelItem is not implemented!)r"   rG   s     r'   __delitem__zBindings.__delitem__Y   s    566r(   c                `    d}| }|'|t        |j                        z  }|j                  }|'|S Nr   )lenrB   rC   )r%   irD   s      r'   __len__zBindings.__len__\   s9     $mQTTNAA m r(   c              #  `   K   | }|$|j                   E d {    |j                  }|#y y 7 wr!   )rB   rC   )r%   rD   s     r'   __iter__zBindings.__iter__d   s.      $mttOOA ms   .,..c                D     ddj                   fd D              z   dz   S )Nz
Bindings({z, c              3  ,   K   | ]  }||   f  y wr!   r/   ).0kr%   s     r'   	<genexpr>z#Bindings.__str__.<locals>.<genexpr>l   s     'CdDGds   z}))joinr8   s   `r'   __str__zBindings.__str__j   s"    dii'Cd'CCCdJJr(   c                    t        |       S r!   )strr8   s    r'   __repr__zBindings.__repr__n   s    4yr(   )rC   zOptional[Bindings])rH   rc   returnrc   )rH   r   re   bool)rH   rc   rP   r   re   None)rH   rc   re   rg   re   int)re   zGenerator[str, None, None]re   rc   )r,   r-   r.   r:   r#   rI   rL   rQ   rS   rX   rZ   ra   rd   r/   r(   r'   r?   r?   9   s<     482 7Kr(   r?   c                  f    e Zd ZdZddZd ZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZy)
FrozenDictz^
    An immutable hashable dict

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

    c                2    t        |i || _        d | _        y r!   )rA   rB   _hash)r%   argskwargss      r'   r#   zFrozenDict.__init__z   s    04d0Ef0E$(
r(   c                ,    t        | j                        S r!   )iterrB   r8   s    r'   rZ   zFrozenDict.__iter__~       DGG}r(   c                ,    t        | j                        S r!   )rV   rB   r8   s    r'   rX   zFrozenDict.__len__       477|r(   c                     | j                   |   S r!   rN   rG   s     r'   rI   zFrozenDict.__getitem__   s    wws|r(   c                    | j                   [d| _         | j                         D ]A  \  }}| xj                   t        |      z  c_         | xj                   t        |      z  c_         C | j                   S rU   )rn   itemshashrO   s      r'   __hash__zFrozenDict.__hash__   sY     ::DJ"jjl
U

d3i'


d5k)
 + zzr(   c                H    t        fd| j                         D              S )Nc              3  2   K   | ]  }|d    v s|  ywr   Nr/   r]   xvarss     r'   r_   z%FrozenDict.project.<locals>.<genexpr>   s     B\QqTT\!\   )rl   rx   r%   r   s    `r'   projectzFrozenDict.project   s    BTZZ\BBBr(   c                J    t        t        |       j                  |             S r!   )rf   setintersection)r%   others     r'   disjointDomainzFrozenDict.disjointDomain   s    D	..u5666r(   c                L    | D ]  }	 | |   ||   k7  r y y# t         $ r Y w xY w)NFTrK   )r%   r   r^   s      r'   
compatiblezFrozenDict.compatible   sB    A7eAh&  '    s   	##c                |    t        t        j                  | j                         |j                                     }|S r!   )rl   	itertoolschainrx   r%   r   ress      r'   mergezFrozenDict.merge   s(    u{{}EF
r(   c                ,    t        | j                        S r!   )rc   rB   r8   s    r'   ra   zFrozenDict.__str__   ru   r(   c                ,    t        | j                        S r!   )reprrB   r8   s    r'   rd   zFrozenDict.__repr__   rs   r(   N)ro   r   rp   r   rh   )rH   r   re   r   )r   Container[Variable]re   rl   )r   !t.Mapping[Identifier, Identifier]re   rf   )r   r   re   rl   rj   )r,   r-   r.   r:   r#   rZ   rX   rI   rz   r   r   r   r   ra   rd   r/   r(   r'   rl   rl   r   s?    )C7
r(   rl   c                      e Zd ZddZddZddZddZedd       Zedd       Z	edd       Z
	 d	 	 	 	 	 dd	Zdd
Zy)FrozenBindingsc                D    t        j                  | g|i | || _        y r!   )rl   r#   ctx)r%   r   ro   rp   s       r'   r#   zFrozenBindings.__init__   s!    D24262r(   c                    t        |t              st        |      }t        |t        t        f      s|S || j                  vr| j
                  j                  |   S | j                  |   S r!   )
isinstancer   r   r   rB   r   initBindingsrG   s     r'   rI   zFrozenBindings.__getitem__   sZ    #t$3-C#x01Jdgg 88((--773<r(   c                ^    t        | j                  fd| j                         D              S )Nc              3  2   K   | ]  }|d    v s|  ywr}   r/   r~   s     r'   r_   z)FrozenBindings.project.<locals>.<genexpr>   s     (QLqAaDDLLr   r   r   rx   r   s    `r'   r   zFrozenBindings.project   s     dhh(QDJJL(QRRr(   c                    t        | j                  t        j                  | j	                         |j	                                     }|S r!   )r   r   r   r   rx   r   s      r'   r   zFrozenBindings.merge   s.    TXXytzz|U[[]'ST
r(   c                .    | j                   j                  S r!   )r   nowr8   s    r'   r   zFrozenBindings.now   s    xx||r(   c                .    | j                   j                  S r!   )r   bnodesr8   s    r'   r   zFrozenBindings.bnodes   s    xxr(   c                .    | j                   j                  S r!   )r   prologuer8   s    r'   r   zFrozenBindings.prologue   s    xx   r(   Nc                n     sg t         j                   fd j                         D              S )zY
        return a frozen dict only of bindings made in self
        since before
        c              3  v   K   | ]0  }|d    v s#|d    j                   j                  v s|d       | 2 ywr}   )r   r   )r]   r   _exceptbeforer%   s     r'   r_   z(FrozenBindings.forget.<locals>.<genexpr>   sH      	%AaDGOttxx444ad|+ %s   69r   )r%   r   r   s   ```r'   forgetzFrozenBindings.forget   s6     G HH		
 	
r(   c                ^    t        | j                  fd| j                         D              S )z@
        return a frozen dict only of bindings in these
        c              3  2   K   | ]  }|d    v s|  ywr}   r/   )r]   r   theses     r'   r_   z*FrozenBindings.remember.<locals>.<genexpr>   s     (RLqAaDEMLr   r   )r%   r   s    `r'   rememberzFrozenBindings.remember   s"     dhh(RDJJL(RSSr(   )r   QueryContext)rH   zUnion[Identifier, str]re   r   )r   r   re   r   )r   r   re   r   re   zdatetime.datetime)re   zt.Mapping[Identifier, BNode])re   zOptional[Prologue]r!   )r   r   r   zOptional[Container[Variable]]re   r   )re   r   )r,   r-   r.   r#   rI   r   r   propertyr   r   r   r   r   r/   r(   r'   r   r      s}     S     ! ! NR
"
-J
	
2Tr(   r   c                      e Zd ZdZ	 	 	 	 d	 	 	 	 	 ddZedd       Z	 d	 	 	 ddZedd       Z	 	 d	 	 	 	 	 	 	 	 	 ddZ	ddZ
ddd	Zddd
ZddZddZddZddZddZy)r   z@
    Query context - passed along when evaluating the query
    Nc                   || _         t        |xs g       | _        |r| j                  j                  |       |  |  t	        |t
        t        f      rV|rt               | _        t               | _	        |D ]  }|j                  rQ|j                  |j                        }| xj                  |z  c_	        |rB| j                  |j                  d       `|j                  smt        | j                  j                  |j                        }|j                  |j                        }||z  }|r| j                  |j                  d        ng|| _        t         j"                  j$                  j&                  r| j                  | _	        n*| j                  j(                  | _	        nd | _        || _	        d | _        d | _        t/        j0                  t2              | _        y )N)rD   T)default)store
identifierF)r   r?   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   datasetClauserD   
from_graphnamedGraphsfrom_named_graphss	            r'   r#   zQueryContext.__init__   sl    ) 8>r2MM  .eg'789 '	"W
&Ayy%*%6%6qyy%A


j0
) IIaiiI>&+"&,,"4"4' -2,=,=agg,F)#'880 IIagguI= ' !&>>((CC!%DJ!%!=!=DJ DMDJ,015	;F;R;R<
r(   c                    | j                   <t        j                  j                  t        j                  j                        | _         | j                   S r!   )r   datetimer   timezoneutcr8   s    r'   r   zQueryContext.now,  s:    99 ))--h.?.?.C.CDDIyyr(   c                    t        | j                  | j                  n| j                  |xs | j                  | j                        }| j
                  |_        | j                  |_        | j                  |_        |S )N)r   )r   r   r   r   r   r   r   )r%   r   rs      r'   clonezQueryContext.clone2  sa     !]]6DMMDJJ%**

 ]]
**;;r(   c                H    | j                   t        d      | j                   S )z "current datasetzwYou performed a query operation requiring a dataset (i.e. ConjunctiveGraph), but operating currently on a single graph.)r   r"   r8   s    r'   r   zQueryContext.dataset?  s,     == ; 
 }}r(   c                4   fd}t         j                  j                  j                  s2|r/| xj                  | j
                  j                  |      z  c_        yy|r || j                  |       y||} || j
                  j                  |      |       y)a7  
        Load data from the source into the query context's.

        :param source: The source to load from.
        :param 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.
        :param 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.
        :param kwargs: Keyword arguments to pass to
            :meth:`rdflib.graph.Graph.parse`.
        c                D   	  | j                   |fddiS # t        $ r Y nw xY w	  | j                   |fddiS # t        $ r Y nw xY w	  | j                   |fddiS # t        $ r Y nw xY w	  | j                   |fddiS # t        $ r t        d|z        w xY w)Nformatturtlexmln3ntz3Could not load %s as either RDF/XML, N3 or NTriples)parser"   )r   sourcerp   s     r'   _loadz QueryContext.load.<locals>._load_  s    "u{{6E(EfEE "u{{6B%B6BB "u{{6A$A&AA "u{{6A$A&AA IFR s9    	$$= 	A	A	A" "	A.-A.2B BN)r   r   r   SPARQL_LOAD_GRAPHSr   r   r   )r%   r   r   intorp   r   s       ` r'   r   zQueryContext.loadJ  sz    *	( ~~$$77 

dll66v>>
  djj&)<!Ddll..t4f=r(   c                p    t        |t        t        f      s|S 	 | j                  |   S # t        $ r Y y w xY wr!   )r   r   r   r   rF   rG   s     r'   rI   zQueryContext.__getitem__  s<    #x01J	==%% 		s   ) 	55c                0    	 | |   S # t         $ r |cY S w xY wr!   rK   )r%   rH   r   s      r'   getzQueryContext.get  s%    	9 	N	s    c                    r-t        | fd| j                  j                         D              S t        | | j                  j                               S )zO
        Return a static copy of the current variable bindings as dict
        c              3  6   K   | ]  \  }}|v s||f  y wr!   r/   )r]   r^   vr   s      r'   r_   z(QueryContext.solution.<locals>.<genexpr>  s"     M*?$!Q191v*?s   	)r   r   rx   r   s    `r'   solutionzQueryContext.solution  sI     !M$--*=*=*?M  "$(;(;(=>>r(   c                v    || j                   v r| j                   |   |k7  r
t               || j                   |<   y r!   )r   r6   rO   s      r'   rQ   zQueryContext.__setitem__  s4    $--DMM#$6%$?. "cr(   c                4    | j                         }||_        |S r!   )r   r   )r%   r   r   s      r'   	pushGraphzQueryContext.pushGraph  s    JJLr(   c                N    | j                  t        | j                              }|S r!   )r   r?   r   )r%   r   s     r'   pushzQueryContext.push  s    JJx./r(   c                $    | j                  g       S r!   r   r8   s    r'   cleanzQueryContext.clean  s    zz"~r(   c                (    | j                  |      }|S )zO
        Create a new read/write query context from the given solution
        r   )r%   frozenbindingscs      r'   thawzQueryContext.thaw  s     JJ~&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]]]re   r   )re   r   )FN)
r   r   r   rf   r   zOptional[Identifier]rp   r   re   rg   )rH   zUnion[str, Path]re   zOptional[Union[str, Path]])rH   rc   r   zOptional[Any]re   r   )r   zOptional[Iterable[Variable]]re   r   )rH   rc   rP   rc   re   rg   )r   r   re   r   )re   r   )r   r   re   r   )r,   r-   r.   r:   r#   r   r   r   r   r   rI   r   r   rQ   r   r   r   r   r/   r(   r'   r   r      s     "&IM;?/
/
 G/
 9	/
b   PTL	   %)	5>5> 5> #	5>
 5> 
5>n	?#
r(   r   c                  8    e Zd ZdZddZddZd	dZ	 	 	 	 d
dZy)ProloguezI
    A class for holding prefixing bindings and base URI information
    c                B    d | _         t        t                     | _        y r!   )baser   r   namespace_managerr8   s    r'   r#   zPrologue.__init__  s    #'	!1%'!:r(   c                    | j                   j                  j                  |xs d      }|t        d|z        t	        ||xs dz         S )N zUnknown namespace prefix : %s)r   r   	namespacer"   r   )r%   prefix	localnamenss       r'   resolvePNamezPrologue.resolvePName  sL    ##))33FLbA:;fDEEbIO,--r(   c                @    | j                   j                  ||d       y )NT)replace)r   bind)r%   r   uris      r'   r  zPrologue.bind  s    ##FC#>r(   c                ~   t        |t              r|j                  dk(  r&| j                  |j                  |j
                        S |j                  dk(  r;t        |j                  |j                  | j                  |j                              S |S t        |t              rd|vrt        || j                        S |S )z
        Apply BASE / PREFIXes to URIs
        (and to datatypes in Literals)

        TODO: Move resolving URIs to pre-processing
        pnameliteral)langdatatype:)r   )r   r   namer   r   r   r   stringr  
absolutizer  r   r   )r%   iris     r'   r  zPrologue.absolutize  s     c9%xx7"((S]]CCxx9$JJSXX8U  
 V$SCZ#DII..
r(   N)re   rg   )r   r*   r   r*   re   r   )r   r*   r  r   re   rg   )r  Optional[Union[CompValue, str]]re   r  )r,   r-   r.   r:   r#   r   r  r  r/   r(   r'   r   r     s+    ;.?2	(r(   r   c                      e Zd ZdZddZy)Queryz'
    A parsed and translated query
    c                $    || _         || _        |  y r!   r   algebrar%   r   r  s      r'   r#   zQuery.__init__       r(   N)r   r   r  r   r9   r/   r(   r'   r  r        Jr(   r  c                      e Zd ZdZddZy)Updatez(
    A parsed and translated update
    c                $    || _         || _        |  y r!   r  r  s      r'   r#   zUpdate.__init__  r  r(   N)r   r   r  zList[CompValue]r9   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   r1   r6   r<   r?   rl   r   r   r   r  r  r/   r(   r'   <module>r$     s    "     3     9 9 - 7 J J! 	&) &
(K (
#; #(k (
6~ 6r; ;|CTZ CTL} }@' 'TJ JJ Jr(   