
    01i
                    $   S r 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  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Jr  SSKJrJrJrJrJrJr  SSKJrJr  SS	KJr   SS
K!J"r"J#r#  SSK$J%r%J&r&J'r'  SSK(J)r)J*r*J+r+J,r,J-r-  SHS jr.SIS jr/SJS jr0SKS jr1SJS jr2SLS jr3 SM   SNS jjr4SJS jr5SOS jr6        SPS jr7SQS jr8SRS jr9SMSSS jjr:        STS jr;    SUS jr<    SVS jr=      SWS jr>\SXS j5       r?\SYS j5       r?SZS  jr?    S[S! jr@S\S" jrAS]S# jrBS^S$ jrCS^S% jrDS^S& jrE " S' S(\F5      rGS) S* 4     S_S+ jjrHS, 4S`S- jjrIS. S/ S4       SaS0 jjrJSbS1 jrKScS2 jrLSdS3 jrMSeS4 jrNSMSfS5 jjrOSgS6 jrP      ShS7 jrQ    SiS8 jrRSjS9 jrSSkS: jrTSlS; jrSmS< jrU  Sn         SoS= jjrV    SpS> jrWSqS? jrX  Sn       SrS@ jjrY  Sn       SsSA jjrZ " SB SC\F5      r[ " SD SE5      r\StSF jr]SbSG jr^g)uz
Converting the 'parse-tree' output of pyparsing to a SPARQL Algebra expression

http://www.w3.org/TR/sparql11-query/#sparqlQuery
    )annotationsN)reduce)AnyCallableDefaultDictDictIterableListMappingOptionalSetTupleoverload)ParseResults)AlternativePathInvPathMulPathNegatedPathPathSequencePath)
TrueFilterand_)simplify)	CompValueExpr)PrologueQueryUpdate)BNode
IdentifierLiteralURIRefVariablec                    [        SXS9$ )NOrderBypexprr   r&   s     W/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/sparql/algebra.pyr%   r%   0   s    Y!//    c                    [        SU S9$ )N
ToMultiSetr'   r)   r.   s    r*   r-   r-   4   s    \Q''r+   c                    [        SXS9$ )NUnionp1p2r)   r1   s     r*   r0   r0   8       W++r+   c                    [        SXS9$ )NJoinr1   r)   r1   s     r*   r6   r6   <   s    V**r+   c                    [        SXS9$ )NMinusr1   r)   r1   s     r*   r8   r8   @   r4   r+   c                    [        SXS9$ )NGraph)termr'   r)   )r;   graphs     r*   r:   r:   D   s    W411r+   c                (    [        SU =(       d    / S9$ )NBGPtriplesr)   r?   s    r*   r>   r>   H   s     UGMr22r+   c                    [        SXUS9$ )NLeftJoinr2   r3   r(   r)   rC   s      r*   rB   rB   N   s    ZBD99r+   c                    [        SXS9$ )NFilterr(   r'   r)   rF   s     r*   rE   rE   R   s    XD..r+   c                    [        SXUS9$ )NExtendr'   r(   varr)   rI   s      r*   rH   rH   V   s     X377r+   c                    [        SU S9$ )Nvaluesresr)   rM   s    r*   ValuesrO   \   s    X3''r+   c                    [        SXS9$ )NProjectr'   PVr)   rR   s     r*   rQ   rQ   `   s    Y!++r+   c                    [        SXS9$ )NGroupr&   r)   r&   s     r*   rU   rU   d   s    W--r+   c           
        ^ [        U  Vs/ s H)  nX1;  d  M
  [        U[        [        45      (       d  M'  UPM+     sn5      [	        U4S jU  5       5      * [        U S   [
        5      (       + 4$ s  snf )Nc              3  H   >#    U  H  nTR                  US 5      v   M     g7f)r   N)get).0x	varscounts     r*   	<genexpr>_knownTerms.<locals>.<genexpr>u   s     1&QY]]1a  &s   "   )len
isinstancer#   r   sumr!   )triple	varsknownr[   rZ   s     ` r*   _knownTermsrd   h   sw     	  A% *4Q58I*J 	
 
1&1	11vay'**
 
s   	A/A/A/c                  ^^ SS jnU  Vs/ s H  nSU4PM	     n n[        5       m[        R                  " [        5      mU  H9  nUS    H-  n[	        U[
        [        45      (       d  M   TU==   S-  ss'   M/     M;     SnU[        U 5      :  a  [        UU4S jXS  5       5      XS& X   S   S   nSnXV-   [        U 5      :  aT  XU-      S   S   U:X  aC  XU-      S    H  nU" UT5        M     US-  nXV-   [        U 5      :  a  XU-      S   S   U:X  a  MC  US-  nU[        U 5      :  a  M  U  Vs/ s H  o"S   PM	     sn$ s  snf s  snf )zN
Reorder triple patterns so that we execute the
ones with most bindings first
c                ^    [        U [        [        45      (       a  UR                  U 5        g g N)r`   r#   r   add)r;   rc   s     r*   _addvarreorderTriples.<locals>._addvar   s%    dXu-..MM$ /r+   N   r   c              3  N   >#    U  H  n[        US    TT5      US    4v   M     g7f)rk   N)rd   )rY   rZ   r[   rc   s     r*   r\   !reorderTriples.<locals>.<genexpr>   s)     XQWAQqT9i@!A$GQWs   "%)r;   strrc   z"Set[typing.Union[Variable, BNode]])	setcollectionsdefaultdictintr`   r#   r   r_   sorted)	l_ri   rZ   tcijr[   rc   s	          @@r*   reorderTriplesry   z   s^      	 R4)RB	 47EI'2'>'>s'CI1A!h.//!!   	
A c"g+ XQSTVQWXX2E!HQKec"go"U)A,q/Q"6AYq\9% "FA ec"go"U)A,q/Q"6 	
Q c"g+ "QaD"= 
!< s   E5Ec           	        ^ [        S U 5      m[        T5      S-  S:w  a  [        S5      e[        U4S j[	        S[        T5      S5       5       5      $ )Nc                
    X-   $ rg    )rZ   ys     r*   <lambda>triples.<locals>.<lambda>   s    QUr+      r   zthese aint triplesc              3  L   >#    U  H  nTU   TUS -      TUS-      4v   M     g7f)rk   r^   Nr|   )rY   rZ   _ls     r*   r\   triples.<locals>.<genexpr>   s.     VAUA2a5"QU)RAY7AUs   !$)r   r_   	Exceptionry   range)lr   s    @r*   r@   r@      sM    
 
"A	&BB!,--Vq#b'STAUVVVr+   c                N   [        U [        5      (       aj  U R                  S:X  a  UR                  U 5      $ U R                  S:X  a8  [	        U R
                  U R                  UR                  U R                  5      S9$ g[        U [        5      (       a  UR                  U 5      $ g)z
Expand prefixed/relative URIs
pnameliteral)langdatatypeN)	r`   r   name
absolutizer!   stringr   r   r"   )r'   prologues     r*   translatePNamer      s     !Y66W&&q))66Yqvv0C0CAJJ0O  
 
Av		""1%% 
r+   c                    g rg   r|   r.   s    r*   translatePathr      s    &)r+   c                    g rg   r|   r.   s    r*   r   r      s    ),r+   c                ~   [        U [        5      (       Ga'  U R                  S:X  a:  [        U R                  5      S:X  a  U R                  S   $ [        U R                  6 $ U R                  S:X  a:  [        U R                  5      S:X  a  U R                  S   $ [        U R                  6 $ U R                  S:X  a  U R                  (       d  U R                  $ [        U R                  [        5      (       aG  [        U R                  5      S:w  a  [        S5      e[        U R                  S   U R                  5      $ [        U R                  U R                  5      $ U R                  S:X  ap  [        U R                  [        5      (       a<  [        U R                  5      S:w  a  [        S5      e[        U R                  S   5      $ [        U R                  5      $ U R                  S:X  aO  [        U R                  [        5      (       a  [        [        U R                  6 5      $ [        U R                  5      $ g	g	)
z$
Translate PropertyPath expressions
PathAlternativerk   r   PathSequencePathEltzDenkfehler!PathEltOrInversePathNegatedPropertySetN)r`   r   r   r_   partr   r   modlistr   r   r   r   r.   s    r*   r   r      s   
 !Y66&&166{avvay &//VV~%166{avvay #QVV,,VVy 55vvaffd++166{a''66"166!9aee44"16615511VV))!&&$''qvv;!##M22qvvay))qvv&VV//!&&$''"?AFF#;<<"166**	 0C  r+   c                    S n[        XS9n U $ )zu
Translate the graph pattern used by EXISTS and NOT EXISTS
http://www.w3.org/TR/sparql11-query/#sparqlCollectFilters
c                    [        U [        5      (       aX  U R                  S;   aG  [        U R                  5      U l        U R                  R                  S:X  a  SU R                  l        g g g g )N)Builtin_EXISTSBuiltin_NOTEXISTSrE   T)r`   r   r   translateGroupGraphPatternr<   no_isolated_scopens    r*   _ctranslateExists.<locals>._c	  sX    a##vv@@4QWW=77<<8+04AGG- , A $r+   	visitPost)traverse)er   s     r*   translateExistsr     s    5 	!AHr+   c                   / nSnU[        U 5      :  a`  X   nUR                  S:X  a6  UR                  [        UR                  5      5        U R                  U5        OUS-  nU[        U 5      :  a  M`  U(       a  [        U6 $ g)zFILTER expressions apply to the whole group graph pattern in which
they appear.

http://www.w3.org/TR/sparql11-query/#sparqlCollectFilters
r   rE   rk   N)r_   r   appendr   r(   popr   )partsfiltersrw   r'   s       r*   collectAndRemoveFiltersr     st     G	A
c%j.H66XNN?16623IIaLFA c%j. W~r+   c                r    S nU R                    H$  n[        U5      nU(       d  UnM  [        X5      nM&     U$ rg   )r<   r   r0   )graphPatternAgs      r*   !translateGroupOrUnionGraphPatternr   /  s9    !A&q)AaA   Hr+   c                T    [        U R                  [        U R                  5      5      $ rg   )r:   r;   r   r<   r   s    r*   translateGraphGraphPatternr   ;  s!    ""$>|?Q?Q$RSSr+   c                *    [        [        U 5      5      $ rg   )r-   translateValuesr   s    r*   translateInlineDatar   ?  s    ol344r+   c                   U R                   (       a  U $ U R                  S:X  a  [        [        U 5      S   5      $ U R                  (       d  / U l        [        U R                  5      n/ nU R                   H|  nUR                  S:X  aX  U(       a  US   R                  S:X  d  UR                  [        5       5        US   S==   [        UR                  5      -  ss'   Mk  UR                  U5        M~     [        5       nU GH  nUR                  S:X  aY  [        UR                  5      nUR                  S:X  a"  [        XER                  UR                  5      nM[  [        XE[        5      nMm  UR                  S	:X  a  [        U[        UR                  5      S
9nM  UR                  S:X  a  [!        U[#        U5      S
9nM  UR                  S:X  a  [!        U[%        U5      S
9nM  UR                  S:X  a  [!        U['        U5      S
9nGM  UR                  S:X  a  [!        XCS
9nGM(  UR                  S;   a  [!        XCS
9nGMD  UR                  S:X  a-  [)        U[+        UR                  5      UR,                  5      nGM  [/        S[1        U5      < SUR                  < 35      e   U(       a	  [3        XS9nSUl         U$ )z:
http://www.w3.org/TR/sparql11-query/#convertGraphPattern
	SubSelectr   TriplesBlockr>   r@   OptionalGraphPatternrE   MinusGraphPatternr1   GroupOrUnionGraphPatternGraphGraphPattern
InlineDataServiceGraphPattern)r>   rH   Bindz#Unknown part in GroupGraphPattern: z - rF   T)
translatedr   r-   	translater   r   r   r>   r@   r   r<   rB   r'   r(   r   r8   r6   r   r   r   rH   r   rJ   r   typerE   )r   r   r   r'   Gr   s         r*   r   r   C  s/   
  K'
 )L1!455%l&7&78GA66^#!B%**-bE)		 22HHQK  	A66++*1773Avv!QQVV,Q:.VV**9!''BCAVV11?BCAVV**8;<AVV|#1!45AVV,, AVV(( AVVv q/!&&11559A @DQP 5 < % ALHr+   c                      \ rS rSrSS jrSrg)StopTraversali  c                    Xl         g rg   rv)selfr   s     r*   __init__StopTraversal.__init__  s    r+   r   N)r   bool)__name__
__module____qualname____firstlineno__r   __static_attributes__r|   r+   r*   r   r     s    r+   r   c                    g rg   r|   r   s    r*   r~   r~         tr+   c                    g rg   r|   r   s    r*   r~   r~         r+   c           
        U" U 5      nUb  U$ U c  g[        U [        [        45      (       a  U  Vs/ s H  n[        XAU5      PM     sn$ [        U [        5      (       a&  [	        U  Vs/ s H  n[        XAU5      PM     sn5      $ [        U [
        5      (       a'  U R                  5        H  u  pV[        XaU5      X'   M     U" U 5      nUb  U$ U $ s  snf s  snf )z`Traverse a parse-tree, visit each node

if visit functions return a value, replace current node
N)r`   r   r   	_traversetupler   items)r   visitPrer   _erZ   kvals          r*   r   r     s     
!B	~	y!dL)**;<=1a	!y11==	Au		CAiY7CDD	Ay	!	!ggiFASI6AD   
1B	~	H >Cs   C(Cc                    g rg   r|   )r   vs     r*   r~   r~     s    4r+   c                2   / n[        U [        [        [        45      (       a  U  Vs/ s H  n[	        X15      PM     nnOM[        U [
        5      (       a8  U R                  5        H$  u  pEUc  M
  UR                  [	        XQ5      5        M&     U" X5      $ s  snf )za
Traverse a parse-tree, visit each node

if visit functions return a value, replace current node
)r`   r   r   r   _traverseAggr   r   r   )r   visitorrN   rZ   r   r   s         r*   r   r     s~     C!dL%011123A|A'3	Ay	!	!ggiFA

<56   1? 4s   Bc                    g rg   r|   r   s    r*   r~   r~     r   r+   c                    g rg   r|   r   s    r*   r~   r~     r   r+   c                p     [        XU5      nUb  U$ U$ ! [         a  nUR                  s SnA$ SnAff = f)z
Traverse tree, visit each node with visit function
visit function may raise StopTraversal to stop traversal
if complete!=None, it is returned on complete traversal,
otherwise the transformed tree is returned
N)r   r   r   )treer   r   completersts         r*   r   r     s<    di0O uus     
5055c                    [        U [        5      (       a,  U R                  R                  S5      (       a  [	        S5      egg)z@
Traverse parse(sub)Tree
return true if any aggregates are used

Aggregate_TN)r`   r   r   
startswithr   )rZ   s    r*   _hasAggregater     s;     !Y66\**%% +  r+   c                    [        U [        5      (       aO  U R                  R                  S5      (       a.  UR	                  U 5        [        S[        U5      -  5      nX S'   U$ gg)zF
Collect Aggregates in A
replaces aggregates with variable references
r   
__agg_%d__rN   N)r`   r   r   r   r   r#   r_   )r   r   aggvars      r*   _aggsr     sX     !YAFF$5$5l$C$C	,Q/0%	 %Dr+   c                `   [        U [        5      (       a  UR                  U 5        [        U [        5      (       as  U R                  S:X  a  UR                  U R
                  5        U $ U R                  S:X  a5  U R                  (       a"  UR                  S U R                   5       5        U $ gg)z
Find all variables in a tree
r   r   c              3  ^   #    U  H#  oR                   =(       d    UR                  v   M%     g 7frg   rJ   evarrY   r   s     r*   r\   _findVars.<locals>.<genexpr>   s     ALq55?AFF?L   +-N)r`   r#   rh   r   r   rJ   
projectionupdate)rZ   rN   s     r*   	_findVarsr    s     !X
!Y66VGGAEENHVV{"||

AALLAAH	 #	  r+   c           	        [        U [        5      (       a  [        U /5      $ [        U [        5      (       Ga  U R                  S:X  a  [        5       U S'   U S   $ U R                  S:X  aQ  [        [        R                  [        X5       VVs/ s H  u  p#US:w  d  M  UPM     snn[        5       5      U S'   U S   $ [        [        [        R                  U[        5       5      5      U S'   U R                  S:X  a;  U R                  (       a  [        S U R                   5       5      nU$ [        5       nU$ U S   $ [        [        R                  U[        5       5      $ s  snnf )z=
find which variables may be bound by this part of the query
RelationalExpression_varsrH   r(   r   c              3  ^   #    U  H#  oR                   =(       d    UR                  v   M%     g 7frg   r   r   s     r*   r\   _addVars.<locals>.<genexpr>  s     B\EEOQVVO\r   )
r`   r#   ro   r   r   r   operatoror_zipr  )rZ   childrenchildr   ss        r*   _addVarsr    s"    !XA3x	Ay	!	!66++AgJ( z' VVx*-h*:M*:;5dfn*:MAgJ" z VHLL(CEBCAgJvv$<<BQ\\BBA  Az(,,#%00# Ns   EEc                    [        U [        5      (       a"  U R                  R                  S5      (       a  U $ [        U [        5      (       a  X:w  a
  [        SU S9$ gg)zC
For each unaggregated variable V in expr
Replace V with Sample(V)
r   Aggregate_SamplevarsN)r`   r   r   r   r#   )r   r   s     r*   _sampler  '  sQ    
 !YAFF$5$5l$C$C!X16+!44 $*r+   c                D    [        U [        5      (       a  [        U 5      $ g rg   )r`   r   simplifyFilters)r   s    r*   _simplifyFiltersr  2  s    !Tq!! r+   c           	     6   / n/ nU R                   (       a  U R                    H  nUR                  (       d  M  [        UR                  [        R
                  " [        UR                  S95      Ul        [        UR                  [        R
                  " [        US95      Ul        M     [        U R                  [        SS9(       aL  [        U R                  [        5      U l        [        U R                  [        R
                  " [        US95        [        U R                  [        SS9(       aL  [        U R                  [        5      U l
        [        U R                  [        R
                  " [        US95        U R                   (       a  U R                    Hp  nUR                  (       d  M  [        S[        U5      S-   -  5      nUR                  [        SUR                  US	95        UR                  XTR                  45        Mr     [        S
X1S9U4$ )N)r   )r   Tr   Fr   rk   r  )r  rN   AggregateJoin)r   r'   )r  r   r   r(   	functoolspartialr  r   havingr   orderbyrJ   r#   r_   r   r   )qMEr   r   r   s         r*   translateAggregatesr"  7  se    *,AA 	||Avvv!!&&)*;*;Gqvv*NO!!&&)*;*;EQ*GH  -$7AHHg.9,,Ua89 		=59QYY0	I--eq9: 	||Auuulc!fqj9:#5AEErJK"ee%	  _/22r+   c           	        / nU R                   (       d  U$ U R                  (       d  U$ [        U R                  S   [        5      (       d4  U R                   H#  nUR	                  U R                   S   U05        M%     OAU R                   H1  nUR	                  [        [        U R                   U5      5      5        M3     [        U5      $ )Nr   )rJ   valuer`   r   r   dictr  rO   )r   rN   r   valss       r*   r   r   [  s     &(C55
77
aggaj$''77CJJa#'  GGDJJtCt,-.  #;r+   c                	   [        U [        5        [        U R                  [        S9U l        [        5       nU R                  S:X  a7  [        U R                  5      nU R                  c  S[        U5      4$ SU l	        O-[        U R                  [        R                  " [        US95        [        U R                  5      nSnU R                  (       a  / nU R                  R                   He  n[!        U["        5      (       a<  UR                  S:X  a,  [%        X%R&                  UR                  5      nUR                  nUR)                  U5        Mg     [+        X$S9nS	nOq[        U R,                  [.        SS
9(       dH  [        U R0                  [.        SS
9(       d*  [3        S U R4                  =(       d    /  5       5      (       a  [+        US9nS	nU(       a  [7        X5      u  p&O/ nU H  u  px[%        X'U5      nM     U R,                  (       a$  [9        [;        U R,                  R                  6 US9nU R<                  (       a&  [?        U[A        [C        U R<                  5      5      S9nU R4                  (       d6  [E        U5       H  n	U[        U	RF                  5      -  nM     [        U5      n
O[        5       n[        5       n
U R4                   H  nUR                  (       a$  X;  a  U
R)                  UR                  5        M6  M8  URH                  (       aI  X;  a  U
R)                  URH                  5        UR)                  UR&                  URH                  45        M  [K        S5      e   U H  u  p[%        X-U5      nM     U R0                  (       aN  [M        UU R0                  R                   Vs/ s H"  n[#        SUR&                  URN                  S9PM$     sn5      n[Q        X*5      nU R                  (       a5  U R                  S:X  a  [#        SUS9nOU R                  S:X  a
  [#        SUS9nU RR                  (       a  SnU RR                  RT                  b$  U RR                  RT                  RW                  5       nU RR                  RX                  b0  [#        SX.U RR                  RX                  RW                  5       S9nX*4$ [#        SX.S9nX*4$ s  snf )z4
http://www.w3.org/TR/sparql11-query/#convertSolMod
r   DescribeQueryNDISTINCTrM   FGroupAsr&   Tr  c              3  z   #    U  H1  nUR                   (       d  M  [        UR                  [        S S9v   M3     g7f)Fr  N)r   r   r(   r   )rY   rZ   s     r*   r\   translate.<locals>.<genexpr>  s-      
'vv <HQVV]U;'s   ; ;r.   rF   r1   zI expected a var or evar here!OrderCondition)r(   orderDistinctREDUCEDReducedr   Slice)r'   startlength)r'   r3  )-r   r  r   wherer   ro   r   rJ   r   modifierr  r  r  r   groupby	conditionr`   r   rH   r(   r   rU   r  r   r  anyr  r"  rE   r   valuesClauser6   r-   r   _find_first_child_projectionsrS   r   r   r%   r.  rQ   limitoffsetoffsettoPythonlimit)r  VSr   	aggregate
conditionsrv   aggregateAliasesaliasrJ   child_projectionrS   r!  r   r   r=  s                  r*   r   r   p  s   
 a!"qww-8AG B 	vv 
 Z 77?b>! $AJ 	)++I2>? 	#177+AIyy
$$A!Y''AFFi,?1ffaee,EEa 	 % A'	=59AII}u= 
\\'R'
 
 
 AJ	1!7 '
1S! ' 	xxahh001Q7 	~~A*_Q^^%DEF<<
 !>a @#&))**B !A "XFVAuu;IIaee$ ;IIaff%!&&!&&)* @AA  DAqQA  	yy ,,,A *qwwG,
 	Azz::#**AZZ9$)q)A}}==+]]))224F==*11==3F3F3O3O3QA 5L 'Q5A5L7s   8)S
c              #     #    U R                  5        HF  n[        U[        5      (       d  M  UR                  S:X  a  Uv   M0  [	        U5       H  nUv   M	     MH     g7f)z
Recursively find the first child instance of a Projection operation in each of
the branches of the query execution plan/tree.
rQ   N)rL   r`   r   r   r;  )r   child_oprE  s      r*   r;  r;    sL      HHJh	**}}	)(Eh(O$** )P s
   'A1Ac                   [        U [        5      (       a  U R                  S:X  a  U R                  R                  S:X  a/  [	        U R                  R
                  5      S:X  a  U R                  $ U R                  R                  S:X  a0  [	        U R                  R
                  5      S:X  a  U R                  $ ggU R                  S:X  a  [        U R
                  5      U S'   U $ gg)zRemove joins to empty BGPsr6   r>   r   r@   N)r`   r   r   r2   r_   r@   r3   ry   r   s    r*   r   r     s    !Y66VttyyE!c!$$,,&71&<ttttyyE!c!$$,,&71&<tt '=!VVu_)!))4AiLH   r+   c                    [        U [        5      (       a;  U R                  S:X  a  [        U5      U S'   gU R                  S;   a  g[        U5      $ g)zr
Some things can be lazily joined.
This propegates whether they can up the tree
and sets lazy flags for all joins
r6   lazyF)r2  r/  T)r`   r   r   all)r   r  s     r*   analyserL    sJ     !Y66VHAfIVV,,x= r+   c                   Uc  [        5       nSUl        U(       a  Xl        U(       a*  UR                  5        H  u  pEUR                  XE5        M     U  Hm  nUR                  S:X  a  UR
                  Ul        M&  UR                  S:X  d  M8  UR                  UR                  UR                  UR
                  5      5        Mo     U$ )N Base
PrefixDecl)r   baser   bindr   iriprefixr   )r'   rQ  initNsr   r   r   rZ   s          r*   translateProloguerV  +  s     :LLNDAMM! # 66VEEHMVV|#MM!((H$7$7$>?	  Or+   c                N   U R                   (       a  [        U R                   5      nO/ n[        R                  " [        5      nU R                  (       aO  U R                   H?  nUR                   (       d  M  X#R
                  ==   [        UR                   5      -  ss'   MA     X4$ rg   )r@   rp   rq   r   quadsNotTriplesr;   )quads
alltriplesallquadsr  s       r*   translateQuadsr\  D  s}     }}U]]+

 	%  &&Ayyy GAII$66  ' r+   c                ~   U R                   S;   a  GO$U R                   S;   a  GOU R                   S;   a1  [        U R                  5      u  p#X0S'   X S'   U R                   S;   a   OU R                   S:X  a  U R                  (       a<  [        U R                  R                  5      u  U R                  S'   U R                  S'   U R                  (       a<  [        U R                  R                  5      u  U R                  S'   U R                  S'   [        U R                  5      U S'   O[        S	U -  5      eXl        U $ )
N)LoadClearDropCreate)AddMoveCopy)
InsertData
DeleteDataDeleteWhererY  r@   )rg  rf  Modifyr5  z$Unknown type of update operation: %s)	r   r\  rY  deleteinsertr   r5  r   r   )ur   ru   r  s       r*   translateUpdate1rl  [  s    vv44	
*	*	
>	>agg&'
)6622	
8	885CAHHNN5S2AHHY'!2885CAHHNN5S2AHHY'!2/8'
>BCCJHr+   c           	     b   / nSnU R                   (       d  U$ [        U R                  U R                   5       Hj  u  pV[        XQX$5      n[	        U[
        R                  " [        US9S9n[        U[        5      n[	        U[        S9nUR                  [        Xd5      5        Ml     [        XC5      $ )z5
Returns a list of SPARQL Update Algebra expressions
Nr   r   )requestr  r   rV  r   r  r  r   r   r  r   r   rl  r   )r  rQ  rU  rN   r   r'   rk  s          r*   translateUpdaterp  s  s     CH99
AJJ		*$Qf? Q)"3"3NX"VWa)*Q-0

#A01 + (  r+   c                   [        U S   X5      n[        U S   [        R                  " [        US9S9U S'   [        U S   5      u  pEU S   R                  nU S   R                  S:X  aG  U S   R                  (       a  [        U S   R                  5      OSn[        U S   R                  XGUS9nO[        U S   R                  XFUS9n[        U[        S9n[        U[        S	9  [        U[        5        [        X85      $ )
zp
Translate a query-parsetree to a SPARQL Algebra Expression

Return a rdflib.plugins.sparql.sparql.Query object
r   rk   rn  r   ConstructQueryN)r'   templatedatasetClause)r'   rt  rS   )r   )rV  r   r  r  r   r   rt  r   rs  r@   r   r   r   rL  r  r   )	r  rQ  rU  r   PrS   rt  rs  rN   s	            r*   translateQueryrv    s     !1t4H 	!	)).8LAaD adOEAaD&&Mtyy$$-.qT]]71Q4==)!		QW!		QK
3(
+Cg&hr+   c                      \ rS rSrSrg)ExpressionNotCoveredExceptioni  r|   N)r   r   r   r   r   r|   r+   r*   rx  rx    s    r+   rx  c                  j    \ rS rSrSrS
S jr   S         SS jjr    SS jrS rSS jr	S	r
g)_AlgebraTranslatori  a  Translator of a Query's algebra to its equivalent SPARQL (string).

Coded as a class to support storage of state during the translation process,
without use of a file.

Anticipated Usage:

```python
translated_query = _AlgebraTranslator(query).translateAlgebra()
```

An external convenience function which wraps the above call,
`translateAlgebra`, is supplied, so this class does not need to be
referenced by client code at all in normal use.
c                \    Xl         [        R                  " [        5      U l        SU l        g )NrN  )query_algebrarp   rq   r   	aggr_vars_alg_translation)r   r|  s     r*   r   _AlgebraTranslator.__init__  s'    *##D) 	 &(r+   Nc                    S nU(       aR  U(       aK  U" U R                   X45      nU R                   S U nU R                   US  R                  XU5      n	X-   U l         g U R                   R                  XU5      U l         g )Nc                    U R                  5       R                  U5      nUS:  aD  US:  a>  U R                  5       R                  X[        U5      -   5      nUS-  nUS:  a  US:  a  M>  U$ )Nr   rk   )lowerfindr_   )haystackneedler   r3  s       r*   find_nth-_AlgebraTranslator._replace.<locals>.find_nth  se    NN$))&1E1*Q (--fc&k6IJQ 1*Q Lr+   )r~  replace)
r   oldnewsearch_from_matchsearch_from_match_occurrencecountr  positionfiledata_prefiledata_posts
             r*   _replace_AlgebraTranslator._replace  s~    	 !=%%'8H  00(;L 11()<DDSuUM$0$@D!$($9$9$A$A#E$RD!r+   c                   [        U[        5      (       a[  XR                  R                  5       ;   a.  U R                  U   R	                  S5      R                  5       nU$ UR                  5       $ [        U[        5      (       a  SUR                  -   S-   $ [        U[        5      (       a  U$ [        SR                  U5      5      e)Nr   {},The expression {0} might not be covered yet.)r`   r    r}  keysr   n3r   r   rn   rx  format)r   node_arggrp_vars      r*   convert_node_arg#_AlgebraTranslator.convert_node_arg  s     h
++>>..00..266q9<<>{{}$),,&,,#&&O/>EEhO r+   c                C  ^  [        U[        5      (       G!a  UR                  S:X  a"  SUR                  R                  -   S-   T l        gAUR                  S:X  ah  SR                  S UR                   5       5      nT R                  SU5        T R                  SS	S
S9  T R                  SSS
S9  T R                  SSS
S9  gAUR                  S:X  aG  T R                  SSUR                  R                  -   S-   UR                  R                  -   S-   5        gAUR                  S:X  aG  T R                  SSUR                  R                  -   S-   UR                  R                  -   S-   5        gAUR                  S:X  a  [        UR                  [        5      (       a  UR                  R                  nO[        S5      eUR                  (       a  UR                  R                  S:X  aE  T R                  SSUR                  R                  -   S-   5        T R                  SSU-   S-   5        gAT R                  SSU-   S-   UR                  R                  -   S-   5        gAT R                  SSU-   S-   5        gAUR                  S:X  aG  T R                  SS UR                  R                  -   S!-   UR                  R                  -   S-   5        gAUR                  S":X  aM  S#UR                  R                  5       -   S$-   UR                  R                  -   S-   nT R                  S%U5        gAUR                  S&:X  a  T R                  R                  5       nUR                  S'5      nT R                  UR                   R                  5       S(T R#                  UR                  5      -   S)-   UR                   R                  5       -   S*-   S'US+9  T R                  S,SUR                  R                  -   S-   5        gAUR                  S-:X  aI  SUR                  R                  -   S.-   UR                  R                  -   S-   nT R                  S/U5        gAUR                  S0:X  a  / nUR                  (       a  UR                   HB  n[        U[$        5      (       a!  UR'                  UR                  5       5        M9  [        S5      e   T R                  S1SUR                  R                  -   S-   5        T R                  SS2S3R                  U5      -   S3-   5        gAT R                  S1SUR                  R                  -   S-   5        gAUR                  S:X  Ga  T R                  S4SUR                  R                  -   S-   5        UR(                   GH  n[        UR*                  [$        5      (       a  UR*                  R                  5       n	O[        S5      eT R,                  UR*                     R'                  UR.                  5        UR                  R1                  S55      S6   n
SnUR2                  (       a  UR2                  S3-   nU
S7:X  aR  T R                  U	S8U-   UR.                  R                  5       -   S9-   UR4                  R                  5       -   S*-   5        OET R                  U	U
R7                  5       S(-   U-   T R#                  UR.                  5      -   S*-   5        T R                  S:R9                  T R#                  UR.                  5      5      T R#                  UR.                  5      5        GM     gAUR                  S;:X  aL  T R                  S;S3R                  UR:                   Vs/ s H  nT R#                  U5      PM     sn5      5        gAUR                  S<:X  a3  T R                  S=SR                  S> UR                   5       5      5        gAUR                  S?:X  a  [        S5      eUR                  S@:X  a  / nUR                   H}  n[        UR                  [$        5      (       aR  UR                  R                  5       nUR<                  b  UR<                  S(-   U-   S*-   nOUnUR'                  U5        Mt  [        S5      e   T R                  SBSUR                  R                  -   S-   5        T R                  SCS3R                  U5      S3-   5        gAUR                  SD:X  a  / nUR>                   HB  n[        U[$        5      (       a!  UR'                  UR                  5       5        M9  [        S5      e   SnUR                  R                  S@:X  a  SEnT R                  SFS3R                  U5      S -   UR                  R                  -   S-   S-   U-   S-   5        gAUR                  SG:X  a-  T R                  SHSIUR                  R                  -   S-   5        gAUR                  SJ:X  a-  T R                  SKSLUR                  R                  -   S-   5        gAUR                  SM:X  aa  SN[A        URB                  5      -   SO-   [A        URD                  5      -   nT R                  SPSUR                  R                  -   S-   U-   5        gAUR                  SQ:X  aw  UR                  R                  SR:X  a-  T R                  SSS UR                  R                  -   S-   5        gAT R                  SSSTUR                  R                  -   S-   S-   5        gAUR                  SU:X  a  T R#                  UR                  5      nURF                  n[        [H        [K        URL                  5      5      (       a,  S(SVR                  U 4SW jURL                   5       5      -   S*-   nOT R#                  URL                  5      nSXR9                  UUUSY9nT R                  SZU5        gAUR                  S[:X  am  S\R                  URL                   Vs/ s H  nT R#                  U5      PM     sn5      nT R                  S]T R#                  UR                  5      S\-   U-   5        gAUR                  S^:X  as  S_R                  URL                   Vs/ s H  nT R#                  U5      PM     sn5      nT R                  S`S(T R#                  UR                  5      -   S_-   U-   S*-   5        gAUR                  Sa:X  ay  T R#                  UR                  5      nUn[O        URF                  5       H0  u  nnUUS3-   T R#                  URL                  U   5      -   S3-   -  nM2     T R                  SbU5        gAUR                  Sc:X  ay  T R#                  UR                  5      nUn[O        URF                  5       H0  u  nnUUS3-   T R#                  URL                  U   5      -   S3-   -  nM2     T R                  SdU5        gAUR                  Se:X  a/  T R                  SfSgT R#                  UR                  5      -   5        gAUR                  RQ                  Sh5      (       a4  T R#                  URR                  5      nT R                  SiSjU-   S*-   5        gAUR                  RQ                  Sk5      (       aq  T R#                  URT                  5      nT R#                  URV                  5      nSlURX                  R                  -   Sm-   U-   SV-   U-   S*-   nT R                  SnU5        gAUR                  RQ                  So5      (       a<  T R                  SpSqSVR                  U 4Sr jURR                   5       5      -   S*-   5        gAUR                  RQ                  Ss5      (       aV  T R                  StSuURZ                  R                  -   S-   5        []        URZ                  T R^                  Sv9  URZ                  $ UR                  RQ                  Sw5      (       aV  T R                  SxSyURZ                  R                  -   S-   5        []        URZ                  T R^                  Sv9  URZ                  $ UR                  RQ                  Sz5      (       aQ  T R                  S{S|T R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S}5      (       a2  T R                  S~ST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       a  T R                  SS5        gAUR                  RQ                  S5      (       a  T R                  SS5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a}  T R#                  URR                  5      URB                  /n URD                  (       a  U R'                  URD                  5        SSVR                  U 5      -   S*-   nT R                  SU5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  RQ                  S5      (       aE  SR9                  SVR                  U 4S jURR                   5       5      S9nT R                  SU5        gAUR                  RQ                  S5      (       aQ  T R                  SST R#                  URX                  5      -   SV-   T R#                  URT                  5      -   S*-   5        gAUR                  RQ                  S5      (       a`  T R#                  UR`                  5      T R#                  URb                  5      /n SSVR                  U 5      -   S*-   nT R                  SU5        gAUR                  RQ                  S5      (       ap  T R                  SST R#                  URR                  5      -   SV-   T R#                  URb                  5      -   SV-   T R#                  URd                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a  T R                  SS5        gAUR                  S:X  a  T R                  SS5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  S:X  a2  T R                  SST R#                  URR                  5      -   S*-   5        gAUR                  GS :X  a4  T R                  GSGST R#                  URR                  5      -   S*-   5        gAUR                  GS:X  a4  T R                  GSGST R#                  URR                  5      -   S*-   5        gAUR                  GS:X  a4  T R                  GSGST R#                  URR                  5      -   S*-   5        gAUR                  SR:X  Gai  / n!UR*                  GS	   Rg                  5        HR  n"[        U"[$        5      (       a!  U!R'                  U"R                  5       5        M9  [        GS
R9                  U"5      5      e   GSS3R                  U!5      -   S*-   n#Sn$UR*                   H  n%/ n&U%Ri                  5        Hz  n'[        U'[$        5      (       a!  U&R'                  U'R                  5       5        M9  [        U'[@        5      (       a  U&R'                  U'5        Ma  [        GS
R9                  U'5      5      e   U$S(S3R                  U&5      -   S*-   -  n$M     T R                  SRU#S-   U$-   S-   5        gAUR                  GS:X  aw  T R                  GSGST R#                  UR                  5      -   S-   URZ                  R                  -   S-   5        []        URZ                  T R^                  Sv9  URZ                  $ gAgAs  snf s  snf s  snf (  z4<https://www.w3.org/TR/sparql11-query/#sparqlSyntax>SelectQueryz-*-SELECT-*- {r  r>   rN  c              3     #    U  HI  nUS    R                  5       S-   US   R                  5       -   S-   US   R                  5       -   S-   v   MK     g7fr    rk   r^   .Nr  rY   rb   s     r*   r\   7_AlgebraTranslator.sparql_query_text.<locals>.<genexpr>  sO      "". 1ILLNS(6!9<<>9C?&),,.PSVV".   AAz{BGP}z-*-SELECT-*-SELECTr   )r  z	{GroupBy}z{Having}r6   z{Join}r  z}{rB   z
{LeftJoin}z}OPTIONAL{{z}}rE   z)This expression might not be covered yet.r  z{Filter}zHAVING({z})zFILTER({z}) {r0   z{Union}z{{z	}}UNION{{r:   zGRAPH z {{z{Graph}rH   z-*-select-*-(z as ))r  r  z{Extend}r8   z}MINUS{{z{Minus}rU   z{Group}z	GROUP BY r  z{AggregateJoin}_rk   GroupConcatzGROUP_CONCAT(z;SEPARATOR=z(SAMPLE({0}) as {0})GroupGraphPatternSubr   z{TriplesBlock}c              3     #    U  HI  nUS    R                  5       S-   US   R                  5       -   S-   US   R                  5       -   S-   v   MK     g7fr  r  r  s     r*   r\   r    sg       '3F q	 ),,.)  !),,.	)
  '3r  ToListr%   Nz	{OrderBy}z{OrderConditions}rQ   zORDER BY {OrderConditions}z	{Project}r/  z
{Distinct}z
DISTINCT {r1  z	{Reduced}z	REDUCED {r2  zOFFSET z LIMIT z{Slice}r-   rL   z{ToMultiSet}z{-*-SELECT-*- {r  z, c              3  F   >#    U  H  nTR                  U5      v   M     g 7frg   r  )rY   r(   r   s     r*   r\   r    s     #WJDD$9$9$$?$?J   !z{left} {operator} {right})leftr	  rightz{RelationalExpression}ConditionalAndExpressionz && z{ConditionalAndExpression}ConditionalOrExpressionz || z{ConditionalOrExpression}MultiplicativeExpressionz{MultiplicativeExpression}AdditiveExpressionz{AdditiveExpression}UnaryNotz
{UnaryNot}!BOUNDz{Builtin_BOUND}zbound(IFzIF({z}, z{Builtin_IF}COALESCEz{Builtin_COALESCE}z	COALESCE(c              3  F   >#    U  H  nTR                  U5      v   M     g 7frg   r  )rY   argr   s     r*   r\   r    s     Ohs 5 5c : :hr  r   z{Builtin_EXISTS}z	EXISTS {{r   r   z{Builtin_NOTEXISTS}zNOT EXISTS {{sameTermz{Builtin_sameTerm}z	SAMETERM(Builtin_isIRIz{Builtin_isIRI}zisIRI(Builtin_isBLANKz{Builtin_isBLANK}zisBLANK(Builtin_isLITERALz{Builtin_isLITERAL}z
isLITERAL(Builtin_isNUMERICz{Builtin_isNUMERIC}z
isNUMERIC(Builtin_STRz{Builtin_STR}zSTR(Builtin_LANGz{Builtin_LANG}zLANG(Builtin_DATATYPEz{Builtin_DATATYPE}z	DATATYPE(Builtin_IRIz{Builtin_IRI}zIRI(Builtin_BNODEz{Builtin_BNODE}zBNODE(STRDTz{Builtin_STRDT}zSTRDT(Builtin_STRLANGz{Builtin_STRLANG}zSTRLANG(Builtin_UUIDz{Builtin_UUID}zUUID()Builtin_STRUUIDz{Builtin_STRUUID}z	STRUUID()Builtin_STRLENz{Builtin_STRLEN}zSTRLEN(Builtin_SUBSTRzSUBSTR(z{Builtin_SUBSTR}Builtin_UCASEz{Builtin_UCASE}zUCASE(Builtin_LCASEz{Builtin_LCASE}zLCASE(Builtin_STRSTARTSz{Builtin_STRSTARTS}z
STRSTARTS(Builtin_STRENDSz{Builtin_STRENDS}zSTRENDS(Builtin_CONTAINSz{Builtin_CONTAINS}z	CONTAINS(Builtin_STRBEFOREz{Builtin_STRBEFORE}z
STRBEFORE(Builtin_STRAFTERz{Builtin_STRAFTER}z	STRAFTER(Builtin_ENCODE_FOR_URIz{Builtin_ENCODE_FOR_URI}zENCODE_FOR_URI(Builtin_CONCATzCONCAT({vars})c              3  F   >#    U  H  nTR                  U5      v   M     g 7frg   r  )rY   elemr   s     r*   r\   r    s     "T844#8#8#>#>8r  r  z{Builtin_CONCAT}Builtin_LANGMATCHESz{Builtin_LANGMATCHES}zLANGMATCHES(REGEXzREGEX(z{Builtin_REGEX}REPLACEz{Builtin_REPLACE}zREPLACE(Builtin_ABSz{Builtin_ABS}zABS(Builtin_ROUNDz{Builtin_ROUND}zROUND(Builtin_CEILz{Builtin_CEIL}zCEIL(Builtin_FLOORz{Builtin_FLOOR}zFLOOR(Builtin_RANDz{Builtin_RAND}zRAND()Builtin_NOWz{Builtin_NOW}zNOW()Builtin_YEARz{Builtin_YEAR}zYEAR(Builtin_MONTHz{Builtin_MONTH}zMONTH(Builtin_DAYz{Builtin_DAY}zDAY(Builtin_HOURSz{Builtin_HOURS}zHOURS(Builtin_MINUTESz{Builtin_MINUTES}zMINUTES(Builtin_SECONDSz{Builtin_SECONDS}zSECONDS(Builtin_TIMEZONEz{Builtin_TIMEZONE}z	TIMEZONE(
Builtin_TZz{Builtin_TZ}zTZ(Builtin_MD5z{Builtin_MD5}zMD5(Builtin_SHA1z{Builtin_SHA1}zSHA1(Builtin_SHA256z{Builtin_SHA256}zSHA256(Builtin_SHA384z{Builtin_SHA384}zSHA384(Builtin_SHA512z{Builtin_SHA512}zSHA512(r   r  zVALUES (r   z{ServiceGraphPattern}zSERVICE )5r`   r   r   r'   r~  joinr@   r  r2   r3   r(   rx  r;   r  r  r  rJ   r  r    r   r   rN   r}  r  splitdistinct	separatorupperr  r   r.  rS   rn   r3  r4  opr   r   other	enumerateendswithr  arg2arg3arg1r<   r   sparql_query_texttextpatternreplacementr  rL   )(r   noder@   r(   query_stringselect_occurrencesgroup_by_varsrJ   agg_func
identifieragg_func_namer  r   order_conditionsrv   condproject_variablesorder_by_patternslicer  r  r8  inner_nodes	left_sidemultiplicationrw   r	  addition	bound_varr  r  if_expressionargscolumnskeyrL   rowsr  rowr;   s(   `                                       r*   r  $_AlgebraTranslator.sparql_query_text  s    dI&&yyM)(=(Kc(Q% e# '' ""&,,"  gw/ nhbA k2R8j"B7f$cDGGLL047$'',,FL j( $'',,&6EL h&dii3399>>D7C  66vv{{o5j#2Cc2IJj*t2Cd2JK&
T(9F(BTVV[[(PSV(V MM*j4.?$.FGg%tdggll2[@477<<ORVV g%$)),,.058466;;FMi.h&#44::<%1%7%7%G"HHKKM++DII67 hhkkm$ 	
 '51C  	 j#*;c*ABg%TWW\\)J6ELi.g% "99#yy%c:66)00:"? K# 	  ) MM)S466;;->-DEMM#[388M3J%JS%P MM)S466;;->-DEo-/tvv{{1BS1HI $H!(,,
;;%-\\__%6
;G  NN8<<077F$,MM$7$7$<Q$?M!H((#+#4#4s#:$5&"&' 'mm..01 ,	,
 '003356 ""	 &)//1!"&' #33HMMBC "	" MM.55 11(--@ --hmm<	K !'V 44*HHDIIVId33G<IVW n,$GG  '+ll  h&3?  i'#% A!!&&*55ffiik77.#$77S=3#6#<D#&D(//5;G  # k3+<s+BC1388<L3MPS3STi'$&!77C!#z22)00:;G 	 # $& 66;;)+'C$HH./ffkk"  "	"
 '' !!	 j(lL466;;,F,LMi'k;+Ds+JKg%!C

O3i?#dkkBRRitvv{{):S)@5)HIl*66;;(*MM.$2Dt2KLMM&(>(Ls(RUX(X 44,,TYY7WWdD$455))#WDJJ#WWX  !11$**=E7>>% ? 	 6	B88$kk=AZZHZTT**40ZH 0))$))4v=K 77$kk=AZZHZTT**40ZH /$//		::VCkQTWW 88 11$))<	!*#,TWW#5KAx" 3)>)>tzz!})MMPSSN $6 :NK22 11$))<	$#,TWW#5KAx 3)>)>tzz!})MMPSSH $6 4h?j(lC$2G2G		2R,RS ##G,, 11$((;	/I1E1KL##D)),,TYY7,,TYY7  $))..0584?$FMPSS  nm<##J//(iiOdhhOOP ##$455
 &(84::??(JT(Q d.D.DEzz!##$788
 )+?$**//+QTX+X d.D.DEzz! ##J//(++DII67 ++DII67 	 ##O44%x$2G2G2Q'QTW'W ##$566'!6!6txx!@@3F ##$788) 4#8#8#BBSH ##$788) 4#8#8#BBSH ##M22#Vd.C.CDHH.M%MPS%S ##N33$g0E0Edhh0O&ORU&U ##$677($"7"7"AACG ##M22#Vd.C.CDHH.M%MPS%S ##O44%x$2G2G2Q'QTW'W ##G,,%++DII67 ++DII67 	 ##$566'++DII67 ++DII67 	 ##N33.9##$5661;? ##$455& 5 5dhh ??#E ##$455--dhh7D;;KK, 499T?2S80$7##O44%x$2G2G2Q'QTW'W ##O44%x$2G2G2Q'QTW'W ##$788) ++DII67 ++DII67 	 ##$566'++DII67 ++DII67 	 ##$677(++DII67 ++DII67 	 ##$788) ++DII67 ++DII67 	 ##$677(++DII67 ++DII67 	 ##$<==.%(=(=dhh(GG#M ##$455'.."T488"TT /  0$7##$9::+"++DII67 ++DII67 	 ##G,,))$))4))$,,7  $))D/1C7/6##I..'++DHH56 ++DLL9: 	
 ++D,<,<=> 	 m+#Vd.C.CDHH.M%MPS%S o-%x$2G2G2Q'QTW'W n,$g0E0Edhh0O&ORU&U o-%x$2G2G2Q'QTW'W n,.9 m+ow7n,$g0E0Edhh0O&ORU&U o-%x$2G2G2Q'QTW'W m+#Vd.C.CDHH.M%MPS%S o-%x$2G2G2Q'QTW'W //'!6!6txx!@@3F //'!6!6txx!@@3F 00($"7"7"AACG l*"ED,A,A$((,K$Kc$Q
 m+#Vd.C.CDHH.M%MPS%S n,$g0E0Edhh0O&ORU&U ..& 5 5dhh ??#E ..& 5 5dhh ??#E ..& 5 5dhh ??#E h&88A;++-C!#z22svvx0;JQQRUV 	 . $chhw&77#= HHDC $%dJ77JJ $	 (c22JJt,"? N U U$(!"#  !. C#((3-/#55D %" ht(;c(AB33+++DII67 jjoo& 	 d.D.DEzz! 4u 'R W~ I Is   >BG"BGBGc                j    [        U R                  R                  U R                  S9  U R                  $ )Nr  )r   r|  algebrar  r~  )r   s    r*   translateAlgebra#_AlgebraTranslator.translateAlgebraf  s*    ##++d6L6LM$$$r+   )r~  r}  r|  )r|  r   )NNrk   )
r  rn   r  rn   r  rn   r  rr   r  rr   )r  z.typing.Union[Identifier, CompValue, Expr, str]returnrn   )r  rn   )r   r   r   r   __doc__r   r  r  r  r  r   r|   r+   r*   rz  rz    ss     ( "&,0SS S 	S
 '*S S2F	$g	"V%r+   rz  c                4    [        U S9R                  5       nU$ )z
Translates a SPARQL 1.1 algebra tree into the corresponding query string.

Args:
    query_algebra: An algebra returned by `translateQuery`.

Returns:
    The query form generated from the SPARQL 1.1 algebra tree for
        SELECT queries.
)r|  )rz  r  )r|  query_from_algebras     r*   r  r  k  s%     ,#  r+   c                ~   ^ SU4S jjm T" U R                   5        g ! [         a    U  H  nT" U5        M      g f = f)Nc                   > [        U [        5      (       d  [        U 5        g [        U R                  < S35        U  H"  n[        U< U< S3SS9  T" X   US-   5        M$     [        SU-  5        g )Nr  z =r  )end    z%s))r`   r   printr   )r'   indr   pps      r*   r(  pprintAlgebra.<locals>.pp}  so     !Y''!Hqvv A 
  qtS6\"  	eckr+   )r%  )r  AttributeError)r  rZ   r(  s     @r*   pprintAlgebrar+  |  s8    ,
199 AqE s    <<)r'   r   r(   List[CompValue]r  r   )r'   2typing.Union[List[Dict[Variable, str]], CompValue]r  r   )r2   r   r3   r   r  r   )r2   r   r3   Optional[CompValue]r  r   )r;   r    r<   r   r  r   rg   )r@   z9Optional[List[Tuple[Identifier, Identifier, Identifier]]]r  r   )r(   r   r'   r   r  r   )r'   r   r(   ztyping.Union[Identifier, Expr]rJ   r#   r  r   )rN   zList[Dict[Variable, str]]r  r   )r'   r   rS   zList[Variable]r  r   )r'   r   r(   zOptional[List[Variable]]r  r   )rb   z)Tuple[Identifier, Identifier, Identifier]rc   z"Set[typing.Union[BNode, Variable]]r[   zDict[Identifier, int]r  zTuple[int, int, bool])rt   z3Iterable[Tuple[Identifier, Identifier, Identifier]]r  /List[Tuple[Identifier, Identifier, Identifier]])r   zUtyping.Union[List[List[Identifier]], List[Tuple[Identifier, Identifier, Identifier]]]r  r/  )r'   ztyping.Union[CompValue, str]r   r   r  zOptional[Identifier])r'   r"   r  None)r'   r   r  r   )r'   ztyping.Union[CompValue, URIRef]r  zOptional[Path])r   -typing.Union[Expr, Literal, Variable, URIRef]r  r1  )r   r,  r  zOptional[Expr])r   r   r  r.  )r   r   r  r   )r   r   r   Callable[[Any], Any]r   r2  )r   r   r   zCallable[[Any, Any], Any])r   r2  r   r2  r   zOptional[bool]r  r   )r  r0  )r  Optional[Variable])rN   Set[Variable]r  r.  )r  zList[Set[Variable]]r  r4  )r   z>typing.Union[CompValue, List[Expr], Expr, List[str], Variable]r   r3  r  r.  )r   r   r  r   )r  r   r   r   r  z1Tuple[CompValue, List[Tuple[Variable, Variable]]])r   r   r  r-  )r  r   r  z*Tuple[Optional[CompValue], List[Variable]])r   r   r  zIterable[CompValue])r   r   r  r.  )r   r   r  r   r  r   )NN)
r'   r   rQ  Optional[str]rU  Optional[Mapping[str, Any]]r   zOptional[Prologue]r  r   )rY  r   r  zyTuple[List[Tuple[Identifier, Identifier, Identifier]], DefaultDict[str, List[Tuple[Identifier, Identifier, Identifier]]]])rk  r   r   r   r  r   )r  r   rQ  r5  rU  r6  r  r   )r  r   rQ  r5  rU  r6  r  r   )r|  r   r  rn   )_r  
__future__r   rp   r  r	  typingr   r   r   r   r   r	   r
   r   r   r   r   r   	pyparsingr   rdflib.pathsr   r   r   r   r   r   rdflib.plugins.sparql.operatorsr   r   r   r  !rdflib.plugins.sparql.parserutilsr   r   rdflib.plugins.sparql.sparqlr   r   r   rdflib.termr   r    r!   r"   r#   r%   r-   r0   r6   r8   r:   r>   rB   rE   rH   rO   rQ   rU   rd   ry   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r   r   r;  rL  rV  r\  rl  rp  rv  rx  rz  r  r+  r|   r+   r*   <module>r?     s\   #         #  = G = @ @ E D0(,+,2
 JN3F33:/8868=E88(,.51 % 	$.;.4.bWW 5	W&#&/7&&( 
 ) 
 ) 
 , 
 ,*+Z42*2	T5EPI  &4&4
" $@ ?P * &4&4#	" $ 	
 	*& "1D5"
!3!3!36!3H7*HV+ 
, +/#'	
 ( !	
 2   .4 *.!!
! (! 	!> *.! ! 
!  (!  	! H	I 	p
% p
%f"r+   