
    iG                       d Z 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 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mZ ddlmZmZmZmZmZmZ ddlmZmZ dd	lmZ  dd
l!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z- dHdZ.dIdZ/dJdZ0dKdZ1dJdZ2dLdZ3	 dM	 	 	 dNdZ4dJdZ5dOdZ6	 	 	 	 	 	 	 	 dPdZ7dQdZ8dRdZ9dMdSdZ:	 	 	 	 	 	 	 	 dTdZ;	 	 	 	 dUdZ<	 	 	 	 dVdZ=	 	 	 	 	 	 dWdZ>edXd       Z?edYd       Z?dZd Z?	 	 	 	 d[d!Z@d\d"ZAd]d#ZBd^d$ZCd^d%ZDd^d&ZE G d' d(eF      ZGd) d* f	 	 	 	 	 d_d+ZHd, fd`d-ZId. d/ df	 	 	 	 	 	 	 dad0ZJdbd1ZKdcd2ZLddd3ZMded4ZNdMdfd5ZOdgd6ZP	 	 	 	 	 	 dhd7ZQ	 	 	 	 did8ZRdjd9ZSdkd:ZTdld;Zdmd<ZU	 	 dn	 	 	 	 	 	 	 	 	 dod=ZV	 	 	 	 dpd>ZWdqd?ZX	 	 dn	 	 	 	 	 	 	 drd@ZY	 	 dn	 	 	 	 	 	 	 dsdAZZ G dB dCeF      Z[ G dD dE      Z\dtdFZ]dbdGZ^y)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                    t        d| |      S )NOrderBypexprr   r&   s     LC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/sparql/algebra.pyr%   r%   1   s    Y!$//    c                    t        d|       S )N
ToMultiSetr'   r)   r.   s    r*   r-   r-   5   s    \Q''r+   c                    t        d| |      S )NUnionp1p2r)   r1   s     r*   r0   r0   9       W++r+   c                    t        d| |      S )NJoinr1   r)   r1   s     r*   r6   r6   =   s    Vr**r+   c                    t        d| |      S )NMinusr1   r)   r1   s     r*   r8   r8   A   r4   r+   c                    t        d| |      S )NGraph)termr'   r)   )r;   graphs     r*   r:   r:   E   s    W4511r+   c                $    t        d| xs g       S )NBGPtriplesr)   r?   s    r*   r>   r>   I   s     UGMr22r+   c                     t        d| ||      S )NLeftJoinr2   r3   r(   r)   rC   s      r*   rB   rB   O   s    ZB2D99r+   c                    t        d| |      S )NFilterr(   r'   r)   rF   s     r*   rE   rE   S   s    XDA..r+   c                     t        d| ||      S )NExtendr'   r(   varr)   rI   s      r*   rH   rH   W   s     X377r+   c                    t        d|       S )Nvaluesresr)   rM   s    r*   ValuesrO   ]   s    X3''r+   c                    t        d| |      S )NProjectr'   PVr)   rR   s     r*   rQ   rQ   a   s    Y!++r+   c                    t        d| |      S )NGroupr&   r)   r&   s     r*   rU   rU   e   s    W--r+   c           
         t        | D cg c]  }||vrt        |t        t        f      r|  c}      t	        fd| D               t        | d   t
               fS c c}w )Nc              3  B   K   | ]  }j                  |d         yw)r   N)get).0x	varscounts     r*   	<genexpr>z_knownTerms.<locals>.<genexpr>v   s     1&QY]]1a &s      )len
isinstancer#   r   sumr!   )triple	varsknownr[   rZ   s     ` r*   _knownTermsrc   i   ss     	  AI%*Q58I*J 	
 
1&1	11vay'**
 
s   #Ac                x   dd}| D cg c]  }d|f } }t               t        j                  t              | D ]0  }|d   D ]&  }t	        |t
        t        f      s|xx   dz  cc<   ( 2 d}|t        |       k  rt        fd| |d D              | |d | |   d   d   }d}||z   t        |       k  rR| ||z      d   d   |k(  rA| ||z      d   D ]  } ||        |dz  }||z   t        |       k  r| ||z      d   d   |k(  rA|dz  }|t        |       k  r| D cg c]  }|d   	 c}S c c}w c c}w )zZ
    Reorder triple patterns so that we execute the
    ones with most bindings first
    c                T    t        | t        t        f      r|j                  |        y y N)r_   r#   r   add)r;   rb   s     r*   _addvarzreorderTriples.<locals>._addvar   s"    dXu-.MM$ /r+   N   r   c              3  H   K   | ]  }t        |d          |d    f  yw)ri   N)rc   )rY   rZ   r[   rb   s     r*   r\   z!reorderTriples.<locals>.<genexpr>   s*     XQWAQqT9i@!A$GQWs   ")r;   strrb   z"Set[typing.Union[Variable, BNode]])	setcollectionsdefaultdictintr_   r#   r   r^   sorted)	l_rh   rZ   tcijr[   rb   s	          @@r*   reorderTriplesrv   {   sn      	 R4)RB	 47EI'2'>'>s'CI1A!h./!!   	
A c"g+ XQSTUTVQWXX12qE!HQK!ec"go"QU)A,q/Q"6AYq\9% "FA !ec"go"QU)A,q/Q"6 	
Q c"g+ "QAaD"= 
!< s   D2#D7c           	         t        d |       t              dz  dk7  rt        d      t        fdt	        dt              d      D              S )Nc                    | |z   S rf    )rZ   ys     r*   <lambda>ztriples.<locals>.<lambda>   s    QUr+      r   zthese aint triplesc              3  F   K   | ]  }|   |d z      |dz      f  yw)ri   r]   Nry   )rY   rZ   _ls     r*   r\   ztriples.<locals>.<genexpr>   s/     VAUA2a5"QU)RAY7AUs   !)r   r^   	Exceptionrv   range)lr~   s    @r*   r@   r@      sM    
 
"A	&BB!,--Vq#b'STAUVVVr+   c                <   t        | t              rk| j                  dk(  r|j                  |       S | j                  dk(  r;t	        | j
                  | j                  |j                  | j                              S yt        | t              r|j                  |       S y)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                     y rf   ry   r.   s    r*   translatePathr      s    &)r+   c                     y rf   ry   r.   s    r*   r   r      s    ),r+   c                :   t        | t              r
| j                  dk(  r9t        | j                        dk(  r| j                  d   S t        | j                   S | j                  dk(  r9t        | j                        dk(  r| j                  d   S t        | j                   S | j                  dk(  r| j                  s| j                  S t        | j                  t              rFt        | j                        dk7  rt        d      t        | j                  d   | j                        S t        | j                  | j                        S | j                  dk(  rjt        | j                  t              r;t        | j                        dk7  rt        d      t        | j                  d         S t        | j                        S | j                  dk(  rJt        | j                  t              rt        t        | j                         S t        | j                        S y	y	)
z,
    Translate PropertyPath expressions
    PathAlternativeri   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                &    d }t        | |      } | S )z
    Translate the graph pattern used by EXISTS and NOT EXISTS
    http://www.w3.org/TR/sparql11-query/#sparqlCollectFilters
    c                    t        | t              rU| j                  dv rFt        | j                        | _        | j                  j                  dk(  rd| j                  _        y y y y )N)Builtin_EXISTSBuiltin_NOTEXISTSrE   T)r_   r   r   translateGroupGraphPatternr<   no_isolated_scopens    r*   _cztranslateExists.<locals>._c
  sU    a#vv@@4QWW=77<<8+04AGG- , A $r+   	visitPost)traverse)er   s     r*   translateExistsr     s    5 	b!AHr+   c                    g }d}|t        |       k  r^| |   }|j                  dk(  r6|j                  t        |j                               | j                  |       n|dz  }|t        |       k  r^|rt        | S y)z

    FILTER expressions apply to the whole group graph pattern in which
    they appear.

    http://www.w3.org/TR/sparql11-query/#sparqlCollectFilters
    r   rE   ri   N)r^   r   appendr   r(   popr   )partsfiltersrt   r'   s       r*   collectAndRemoveFiltersr     sv     G	A
c%j.!H66XNN?16623IIaLFA c%j. W~r+   c                d    d }| j                   D ]  }t        |      }|s|}t        ||      }  |S rf   )r<   r   r0   )graphPatternAgs      r*   !translateGroupOrUnionGraphPatternr   2  s;    !A&q)AaA   Hr+   c                T    t        | j                  t        | j                              S rf   )r:   r;   r   r<   r   s    r*   translateGraphGraphPatternr   >  s!    ""$>|?Q?Q$RSSr+   c                *    t        t        |             S rf   )r-   translateValuesr   s    r*   translateInlineDatar   B  s    ol344r+   c                \   | j                   r| S | j                  dk(  rt        t        |       d         S | j                  sg | _        t        | j                        }g }| j                  D ]s  }|j                  dk(  rQ|r|d   j                  dk(  s|j                  t                      |d   dxx   t        |j                        z  cc<   c|j                  |       u t               }|D ]  }|j                  dk(  rXt        |j                        }|j                  dk(  r"t        ||j                  |j                        }Yt        ||t              }k|j                  d	k(  r!t        |t        |j                        
      }|j                  dk(  rt!        |t#        |      
      }|j                  dk(  rt!        |t%        |      
      }|j                  dk(  rt!        |t'        |      
      }|j                  dk(  rt!        ||
      },|j                  dv rt!        ||
      }I|j                  dk(  r,t)        |t+        |j                        |j,                        }t/        dt1        |      d|j                         |rt3        ||      }d|_         |S )zB
    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   F  s9   
  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 AVV((a AVVv q/!&&11559A @DQP 5 < 1% ALHr+   c                      e Zd ZddZy)StopTraversalc                    || _         y rf   )rv)selfr   s     r*   __init__zStopTraversal.__init__  s	    r+   N)r   bool)__name__
__module____qualname__r   ry   r+   r*   r   r     s    r+   r   c                     y rf   ry   r   s    r*   r{   r{         tr+   c                     y rf   ry   r   s    r*   r{   r{         r+   c           
         ||       }||S | yt        | t        t        f      r| D cg c]  }t        |||       c}S t        | t              r$t	        | D cg c]  }t        |||       c}      S t        | t
              r(| j                         D ]  \  }}t        |||      | |<     ||       }||S | S c c}w c c}w )m
    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	!Xy11==	Au	CAi8Y7CDD	Ay	!ggiFAsS(I6AaD   
1B	~	H >Cs   B;C c                     y rf   ry   )r   vs     r*   r{   r{     s    dr+   c                   g }t        | t        t        t        f      r| D cg c]  }t	        ||       }}nFt        | t
              r6| j                         D ]#  \  }}|	|j                  t	        ||             %  || |      S c c}w )r   )r_   r   r   r   _traverseAggr   r   r   )r   visitorrN   rZ   r   r   s         r*   r   r     s~     C!dL%01123A|Aw'3	Ay	!ggiFAs

<W56   1c? 4s   Bc                     y rf   ry   r   s    r*   r{   r{     r   r+   c                     y rf   ry   r   s    r*   r{   r{     r   r+   c                n    	 t        | ||      }||S |S # t        $ r}|j                  cY d}~S d}~ww xY w)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>    dHi0O uus     	4/44c                r    t        | t              r'| j                  j                  d      rt	        d      yy)zL
    Traverse parse(sub)Tree
    return true if any aggregates are used
    
Aggregate_TN)r_   r   r   
startswithr   )rZ   s    r*   _hasAggregater     s5     !Y66\*%% +  r+   c                    t        | t              rK| j                  j                  d      r/|j	                  |        t        dt        |      z        }|| d<   |S yy)zR
    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     sT     !YAFF$5$5l$C	,Q/0%	 %Dr+   c                >   t        | t              r|j                  |        t        | t              rl| j                  dk(  r|j                  | j
                         | S | j                  dk(  r0| j                  r"|j                  d | j                  D               | S yy)z&
    Find all variables in a tree
    r   r   c              3  P   K   | ]  }|j                   xs |j                     y wrf   rJ   evarrY   r   s     r*   r\   z_findVars.<locals>.<genexpr>  s     ALq155?AFF?L   $&N)r_   r#   rg   r   r   rJ   
projectionupdate)rZ   rN   s     r*   	_findVarsr     s{     !X
!Y66VGGAEENHVV{"||

AALLAAH	 #	  r+   c           	        t        | t              rt        | g      S t        | t              r| j                  dk(  rt               | d<   | d   S | j                  dk(  rNt        t        j                  t        ||       D cg c]  \  }}|dk7  s| c}}t                     | d<   | d   S t        t        t        j                  |t                           | d<   | j                  dk(  r6| j                  rt        d | j                  D              }|S t               }|S | d   S t        t        j                  |t                     S c c}}w )zE
    find which variables may be bound by this part of the query
    RelationalExpression_varsrH   r(   r   c              3  P   K   | ]  }|j                   xs |j                     y wrf   r   r   s     r*   r\   z_addVars.<locals>.<genexpr>  s     B\AEEOQVVO\r   )
r_   r#   rl   r   r   r   operatoror_zipr   )rZ   childrenchildr   ss        r*   _addVarsr  	  s     !XA3x	Ay	!66++AgJ( z' VVx*-h*:M*:;5$dfn*:MAgJ" z VHLL(CEBCAgJvv$<<BQ\\BBA  Az(,,#%00# Ns    EEc                    t        | t              r| j                  j                  d      r| S t        | t              r|| k7  rt        d|       S yy)zO
    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	  +  sJ    
 !YAFF$5$5l$C!X16+!44 $*r+   c                :    t        | t              rt        |       S y rf   )r_   r   simplifyFilters)r   s    r*   _simplifyFiltersr  6  s    !Tq!! r+   c                   g }g }| j                   r| j                   D ]  }|j                  st        |j                  t	        j
                  t        |j                              |_        t        |j                  t	        j
                  t        |            |_         t        | j                  t        d      rNt        | j                  t              | _        t        | j                  t	        j
                  t        |             t        | j                  t        d      rNt        | j                  t              | _
        t        | j                  t	        j
                  t        |             | j                   r|| j                   D ]m  }|j                  st        dt        |      dz   z        }|j                  t        d|j                  |	             |j                  ||j                  f       o t        d
||      |fS )N)r   )r   Tr   Fr   ri   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  ;  se    *,AA 	||Avv!!&&)*;*;Gqvv*NO!!&&)*;*;EQ*GH  -$7AHHg.9,,Ua89 		=59QYY0	I--eq9: 	||Auulc!fqj9:#5AEErJK"aee%	  _Q/22r+   c           	        g }| j                   s|S | j                  s|S t        | j                  d   t              s<| j                  D ]"  }|j	                  | j                   d   |i       $ t        |      S | j                  D ]0  }|j	                  t        t        | j                   |                   2 t        |      S )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                `	   t        | t               t        | j                  t              | _        t               }| j                  dk(  r6t        | j                        }| j                  dt        |      fS d| _	        n/t        | j                  t        j                  t        |             t        | j                        }d}| j                  rg }| j                  j                  D ]_  }t!        |t"              r<|j                  dk(  r-t%        ||j&                  |j                        }|j                  }|j)                  |       a t+        ||      }d	}nft        | j,                  t.        d
      s<t        | j0                  t.        d
      s t3        d | j4                  xs g D              rt+        |      }d	}|rt7        | |      \  }}ng }|D ]  \  }}t%        |||      } | j,                  r't9        t;        | j,                  j                   |      }| j<                  r)t?        |tA        tC        | j<                                    }| j4                  s4tE        |      D ]  }	|t        |	jF                        z  } t        |      }
nt               }t               }
| j4                  D ]  }|j                  r!||
vs|
j)                  |j                         0|jH                  rG||
vr|
j)                  |jH                         |j)                  |j&                  |jH                  f       tK        d       |D ]  \  }}t%        |||      } | j0                  rNtM        || j0                  j                  D cg c]$  }t#        d|j&                  |jN                        & c}      }tQ        ||
      }| j                  r9| j                  dk(  rt#        d|      }n| j                  dk(  rt#        d|      }| jR                  rd}| jR                  jT                  $| jR                  jT                  jW                         }| jR                  jX                  5t#        d||| jR                  jX                  jW                               }||
fS t#        d||      }||
fS c c}w )z=
    http://www.w3.org/TR/sparql11-query/#convertSolMod

    r   DescribeQueryNDISTINCTrM   FGroupAsr&   Tr  c              3  l   K   | ],  }|j                   rt        |j                  t        d        . yw)Fr  N)r   r   r(   r   )rY   rZ   s     r*   r\   ztranslate.<locals>.<genexpr>  s/      
'vv QVV]U;;'s   24r.   rF   r1   zI expected a var or evar here!OrderCondition)r(   orderDistinctREDUCEDReducedr   Slice)r'   startlength)r'   r'  )-r   r  r   wherer   rl   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
conditionsrs   aggregateAliasesaliasrJ   child_projectionrS   r  r   r   r1  s                  r*   r   r   t  s    a!"qww-8AG B 	vv 
 Z 77?b>! $AJ 	)++I2>? 	#177+AIyy
$$A!Y'AFFi,?1affaee,EEa 	 % AJ'	=59AII}u= 
\\'R'
 
 AJ	1!Q7 '
s1eS! ' 	xxahh001Q7 	~~A*_Q^^%DEF<<
 !>a @#&))**B !A "XFVAuuB;IIaee$B;IIaff%!&&!&&)* @AA  DAqq!QA  	yy ,,,A *qwwG,
 	2Azz::#**AZZ9$)q)A}}==+]]))224F==*1F1==3F3F3O3O3QA b5L 'Qf5Ab5L7s   )R+
c              #     K   | j                         D ];  }t        |t              s|j                  dk(  r| (t	        |      D ]  }|  = yw)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_opr9  s      r*   r/  r/     sJ      HHJh	*}}	)(Eh(O$** )P s
   $A+Ac                   t        | t              r| j                  dk(  r| j                  j                  dk(  r.t	        | j                  j
                        dk(  r| j                  S | j                  j                  dk(  r/t	        | j                  j
                        dk(  r| j                  S yy| j                  dk(  rt        | j
                        | d<   | S yy)zRemove joins to empty BGPsr6   r>   r   r@   N)r_   r   r   r2   r^   r@   r3   rv   r   s    r*   r   r     s    !Y66VttyyE!c!$$,,&71&<ttttyyE!c!$$,,&71&<tt '=!VVu_)!))4AiLH   r+   c                    t        | t              r8| j                  dk(  rt        |      | d<   y| j                  dv ryt        |      S y)z
    Some things can be lazily joined.
    This propegates whether they can up the tree
    and sets lazy flags for all joins
    r6   lazyF)r&  r#  T)r_   r   r   all)r   r  s     r*   analyser@    sG     !Y66VHAfIVV,,x= r+   c                p   |t               }d|_        |r||_        |r*|j                         D ]  \  }}|j                  ||        | D ]h  }|j                  dk(  r|j
                  |_        $|j                  dk(  s4|j                  |j                  |j                  |j
                               j |S )N Base
PrefixDecl)r   baser   bindr   iriprefixr   )r'   rE  initNsr   r   r   rZ   s          r*   translateProloguerJ  0  s     :LLNDAqMM!Q # 66VEEHMVV|#MM!((H$7$7$>?	  Or+   c                ,   | j                   rt        | j                         }ng }t        j                  t              }| j                  rH| j                  D ]9  }|j                   s||j
                  xx   t        |j                         z  cc<   ; ||fS rf   )r@   rm   rn   r   quadsNotTriplesr;   )quads
alltriplesallquadsr  s       r*   translateQuadsrP  I  s     }}U]]+

 	%  &&Ayy GAII$66  ' xr+   c                ^   | j                   dv rn| j                   dv rn| j                   dv r1t        | j                        \  }}|| d<   || d<   | j                   dv rn| j                   dk(  r| j                  r<t        | j                  j                        \  | j                  d<   | j                  d<   | j                  r<t        | j                  j                        \  | j                  d<   | j                  d<   t        | j                        | d<   nt        d	| z        || _        | S )
N)LoadClearDropCreate)AddMoveCopy)
InsertData
DeleteDataDeleteWhererM  r@   )r[  rZ  Modifyr)  z$Unknown type of update operation: %s)	r   rP  rM  deleteinsertr   r)  r   r   )ur   rr   r  s       r*   translateUpdate1r`  `  s    vv44	
*	*	
>	>agg&1'
)6622	
8	885CAHHNN5S2AHHY'!2885CAHHNN5S2AHHY'!2/8'
>BCCAJHr+   c                n   g }d}| j                   s|S t        | j                  | j                         D ]u  \  }}t        ||||      }t	        |t        j                  t        |            }t        |t              }t	        |t              }|j                  t        ||             w t        ||      S )z=
    Returns a list of SPARQL Update Algebra expressions
    Nr   r   )requestr   r   rJ  r   r  r  r   r   r  r   r   r`  r   )r  rE  rI  rN   r   r'   r_  s          r*   translateUpdaterd  x  s     CH99
AJJ		*1$Qfh? Q)"3"3NX"VWa)*Q-0

#Ax01 + (C  r+   c                   t        | d   ||      }t        | d   t        j                  t        |            | d<   t        | d         \  }}| d   j                  }| d   j                  dk(  rF| d   j                  rt        | d   j                        nd}t        | d   j                  |||      }nt        | d   j                  |||      }t        |t              }t        |t        	       t        |t               t        ||      S )
z|
    Translate a query-parsetree to a SPARQL Algebra Expression

    Return a rdflib.plugins.sparql.sparql.Query object
    r   ri   rb  r   ConstructQueryN)r'   templatedatasetClause)r'   rh  rS   )r   )rJ  r   r  r  r   r   rh  r   rg  r@   r   r   r   r@  r  r   )	r  rE  rI  r   PrS   rh  rg  rN   s	            r*   translateQueryrj    s     !1tV4H 	!	)).8LAaD adOEAraD&&Mtyy$$-.qT]]71Q4==)!		QW!		QmK
3(
+Cg&h3r+   c                      e Zd Zy)ExpressionNotCoveredExceptionN)r   r   r   ry   r+   r*   rl  rl    s    r+   rl  c                  X    e Zd ZdZddZ	 	 	 d		 	 	 	 	 	 	 	 	 d
dZ	 	 	 	 ddZd ZddZy)_AlgebraTranslatora  
    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:

    .. code-block:: 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                \    || _         t        j                  t              | _        d| _        y )NrB  )query_algebrarm   rn   r   	aggr_vars_alg_translation)r   rp  s     r*   r   z_AlgebraTranslator.__init__  s)    *##D) 	 &(r+   Nc                    d }|rP|rN || j                   ||      }| j                   d | }| j                   |d  j                  |||      }	||	z   | _         y | j                   j                  |||      | _         y )Nc                    | j                         j                  |      }|dk\  rA|dkD  r<| j                         j                  ||t        |      z         }|dz  }|dk\  r|dkD  r<|S )Nr   ri   )lowerfindr^   )haystackneedler   r'  s       r*   find_nthz-_AlgebraTranslator._replace.<locals>.find_nth  sg    NN$))&1E1*Q (--fec&k6IJQ 1*Q Lr+   )rr  replace)
r   oldnewsearch_from_matchsearch_from_match_occurrencecountry  positionfiledata_prefiledata_posts
             r*   _replacez_AlgebraTranslator._replace  s    	 !=%%'8:VH  00(;L 11()<DDS#uUM$0=$@D!$($9$9$A$A#sE$RD!r+   c                r   t        |t              rZ|| j                  j                         v r.| j                  |   j	                  d      j                         }|S |j                         S t        |t              rd|j                  z   dz   S t        |t              r|S t        dj                  |            )Nr   {},The expression {0} might not be covered yet.)r_   r    rq  keysr   n3r   r   rk   rl  format)r   node_arggrp_vars      r*   convert_node_argz#_AlgebraTranslator.convert_node_arg  s     h
+4>>..00..266q9<<>{{}$),&,,#&O/>EEhO r+   c                fA    t        |t               r|j                  dk(  r"d|j                  j                  z   dz    _        yA|j                  dk(  rqdj                  d |j                  D              } j                  d|        j                  dd	d
        j                  ddd
        j                  ddd
       yA|j                  dk(  rG j                  dd|j                  j                  z   dz   |j                  j                  z   dz          yA|j                  dk(  rG j                  dd|j                  j                  z   dz   |j                  j                  z   dz          yA|j                  dk(  rt        |j                  t              r|j                  j                  }nt        d      |j                  r|j                  j                  dk(  rE j                  dd|j                  j                  z   dz           j                  dd|z   dz          yA j                  dd|z   dz   |j                  j                  z   dz          yA j                  dd|z   dz          yA|j                  dk(  rG j                  dd |j                  j                  z   d!z   |j                  j                  z   dz          yA|j                  d"k(  rMd#|j                  j                         z   d$z   |j                  j                  z   dz   } j                  d%|       yA|j                  d&k(  r j                  j                         }|j                  d'      } j                  |j                   j                         d( j#                  |j                        z   d)z   |j                   j                         z   d*z   d'|+        j                  d,d|j                  j                  z   dz          yA|j                  d-k(  rId|j                  j                  z   d.z   |j                  j                  z   dz   } j                  d/|       yA|j                  d0k(  rg }|j                  r|j                  D ]<  }t        |t$              r |j'                  |j                                3t        d        j                  d1d|j                  j                  z   dz           j                  dd2d3j                  |      z   d3z          yA j                  d1d|j                  j                  z   dz          yA|j                  dk(  r܉ j                  d4d|j                  j                  z   dz          |j(                  D ]  }t        |j*                  t$              r|j*                  j                         }	nt        d       j,                  |j*                     j'                  |j.                         |j                  j1                  d5      d6   }
d}|j2                  r|j2                  d3z   }|
d7k(  rR j                  |	d8|z   |j.                  j                         z   d9z   |j4                  j                         z   d*z          nE j                  |	|
j7                         d(z   |z    j#                  |j.                        z   d*z           j                  d:j9                   j#                  |j.                               j#                  |j.                                yA|j                  d;k(  rI j                  d;d3j                  |j:                  D cg c]  } j#                  |       c}             yA|j                  d<k(  r3 j                  d=dj                  d> |j                  D                     yA|j                  d?k(  rt        d      |j                  d@k(  rg }|j                  D ]v  }t        |j                  t$              rP|j                  j                         }|j<                  |j<                  d(z   |z   d*z   }n|}|j'                  |       mt        d        j                  dBd|j                  j                  z   dz           j                  dCd3j                  |      d3z          yA|j                  dDk(  rg }|j>                  D ]<  }t        |t$              r |j'                  |j                                3t        d       d}|j                  j                  d@k(  rdE} j                  dFd3j                  |      d z   |j                  j                  z   dz   dz   |z   dz          yA|j                  dGk(  r- j                  dHdI|j                  j                  z   dz          yA|j                  dJk(  r- j                  dKdL|j                  j                  z   dz          yA|j                  dMk(  radNtA        |jB                        z   dOz   tA        |jD                        z   } j                  dPd|j                  j                  z   dz   |z          yA|j                  dQk(  rv|j                  j                  dRk(  r- j                  dSd |j                  j                  z   dz          yA j                  dSdT|j                  j                  z   dz   dz          yA|j                  dUk(  r j#                  |j                        }|jF                  }t        tH        tK        |jL                              r+d(dVj                   fdW|jL                  D              z   d*z   }n j#                  |jL                        }dXj9                  |||Y      } j                  dZ|       yA|j                  d[k(  rjd\j                  |jL                  D cg c]  } j#                  |       c}      } j                  d] j#                  |j                        d\z   |z          yA|j                  d^k(  rpd_j                  |jL                  D cg c]  } j#                  |       c}      } j                  d`d( j#                  |j                        z   d_z   |z   d*z          yA|j                  dak(  rw j#                  |j                        }|}tO        |jF                        D ]/  \  }}||d3z    j#                  |jL                  |         z   d3z   z  }1  j                  db|       yA|j                  dck(  rw j#                  |j                        }|}tO        |jF                        D ]/  \  }}||d3z    j#                  |jL                  |         z   d3z   z  }1  j                  dd|       yA|j                  dek(  r/ j                  dfdg j#                  |j                        z          yA|j                  jQ                  dh      r4 j#                  |jR                        } j                  didj|z   d*z          yA|j                  jQ                  dk      rq j#                  |jT                        } j#                  |jV                        }dl|jX                  j                  z   dmz   |z   dVz   |z   d*z   } j                  dn|       yA|j                  jQ                  do      r; j                  dpdqdVj                   fdr|jR                  D              z   d*z          yA|j                  jQ                  ds      rY j                  dtdu|jZ                  j                  z   dz          t]        |jZ                   j^                  v       |jZ                  S |j                  jQ                  dw      rY j                  dxdy|jZ                  j                  z   dz          t]        |jZ                   j^                  v       |jZ                  S |j                  jQ                  dz      rQ j                  d{d| j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d}      r2 j                  d~d j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      r j                  dd       yA|j                  jQ                  d      r j                  dd       yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      rx j#                  |jR                        |jB                  g} |jD                  r| j'                  |jD                         ddVj                  |       z   d*z   } j                  d|       yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      rQ j                  dd j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  d      r2 j                  dd j#                  |jR                        z   d*z          yA|j                  jQ                  d«      rGdj9                  dVj                   fdĄ|jR                  D              ū      } j                  d|       yA|j                  jQ                  dǫ      rQ j                  ddɉ j#                  |jX                        z   dVz    j#                  |jT                        z   d*z          yA|j                  jQ                  dʫ      r` j#                  |j`                         j#                  |jb                        g} ddVj                  |       z   d*z   } j                  d|       yA|j                  jQ                  dͫ      rp j                  ddω j#                  |jR                        z   dVz    j#                  |jb                        z   dVz    j#                  |jd                        z   d*z          yA|j                  dk(  r2 j                  dd҉ j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  ddՉ j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd؉ j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  ddۉ j#                  |jR                        z   d*z          yA|j                  dk(  r j                  ddޫ       yA|j                  dk(  r j                  dd       yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r2 j                  dd j#                  |jR                        z   d*z          yA|j                  d k(  r4 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r4 j                  dd j#                  |jR                        z   d*z          yA|j                  dk(  r4 j                  dd j#                  |jR                        z   d*z          yA|j                  dRk(  rSg }!|j*                  d	   jg                         D ]L  }"t        |"t$              r |!j'                  |"j                                3t        d
j9                  |"             dd3j                  |!      z   d*z   }#d}$|j*                  D ]  }%g }&|%ji                         D ]n  }'t        |'t$              r |&j'                  |'j                                3t        |'t@              r|&j'                  |'       Ut        d
j9                  |'             |$d(d3j                  |&      z   d*z   z  }$  j                  dR|#dz   |$z   dz          yA|j                  dk(  rz j                  dd j#                  |j                        z   dz   |jZ                  j                  z   dz          t]        |jZ                   j^                  v       |jZ                  S yAyAc c}w c c}w c c}w (  zl
         https://www.w3.org/TR/sparql11-query/#sparqlSyntax

        :param node:
        :return:
        SelectQueryz-*-SELECT-*- {r  r>   rB  c              3     K   | ]H  }|d    j                         dz   |d   j                         z   dz   |d   j                         z   dz    J ywr    ri   r]   .Nr  rY   ra   s     r*   r\   z7_AlgebraTranslator.sparql_query_text.<locals>.<genexpr>  sP      "". 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}_ri   GroupConcatzGROUP_CONCAT(z;SEPARATOR=z(SAMPLE({0}) as {0})GroupGraphPatternSubr   z{TriplesBlock}c              3     K   | ]H  }|d    j                         dz   |d   j                         z   dz   |d   j                         z   dz    J ywr  r  r  s     r*   r\   z7_AlgebraTranslator.sparql_query_text.<locals>.<genexpr>  sh       '3F q	 ),,.)  !),,.	)
  '3r  ToListr%   Nz	{OrderBy}z{OrderConditions}rQ   zORDER BY {OrderConditions}z	{Project}r#  z
{Distinct}z
DISTINCT {r%  z	{Reduced}z	REDUCED {r&  zOFFSET z LIMIT z{Slice}r-   rL   z{ToMultiSet}z{-*-SELECT-*- {r   z, c              3  @   K   | ]  }j                  |        y wrf   r  )rY   r(   r   s     r*   r\   z7_AlgebraTranslator.sparql_query_text.<locals>.<genexpr>  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  @   K   | ]  }j                  |        y wrf   r  )rY   argr   s     r*   r\   z7_AlgebraTranslator.sparql_query_text.<locals>.<genexpr>#  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  @   K   | ]  }j                  |        y wrf   r  )rY   elemr   s     r*   r\   z7_AlgebraTranslator.sparql_query_text.<locals>.<genexpr>  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'   rr  joinr@   r  r2   r3   r(   rl  r;   r  ru  r  rJ   r  r    r   r   rN   rq  r  splitdistinct	separatorupperr  r   r"  rS   rk   r'  r(  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_conditionsrs   condproject_variablesorder_by_patternslicer  r  r,  inner_nodes	left_sidemultiplicationrt   r   addition	bound_varr  r  if_expressionargscolumnskeyrL   rowsr  rowr;   s(   `                                       r*   r  z$_AlgebraTranslator.sparql_query_text  sj    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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)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ffiik77.#$77S=3#6#<D#&D(//5;G  # k3+<s+BC1388<L3MPS3STi'$&!77C!#z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))#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
 &(84::??(JT(Q d.D.DEzz!##$78
 )+?$**//+QTX+X d.D.DEzz! ##J/(++DII67 ++DII67 	 ##O4%x$2G2G2Q'QTW'W ##$56'!6!6txx!@@3F ##$78) 4#8#8#BBSH ##$78) 4#8#8#BBSH ##M2#Vd.C.CDHH.M%MPS%S ##N3$g0E0Edhh0O&ORU&U ##$67($"7"7"AACG ##M2#Vd.C.CDHH.M%MPS%S ##O4%x$2G2G2Q'QTW'W ##G,%++DII67 ++DII67 	 ##$56'++DII67 ++DII67 	 ##N3.9##$561;? ##$45& 5 5dhh ??#E ##$45--dhh7D;;KK, 499T?2S80$7##O4%x$2G2G2Q'QTW'W ##O4%x$2G2G2Q'QTW'W ##$78) ++DII67 ++DII67 	 ##$56'++DII67 ++DII67 	 ##$67(++DII67 ++DII67 	 ##$78) ++DII67 ++DII67 	 ##$67(++DII67 ++DII67 	 ##$<=.%(=(=dhh(GG#M ##$4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svvx0;JQQRUV 	 . $chhw&77#= HHDC $%dJ7JJ $	 (c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   BB$BB)BB.c                p    t        | j                  j                  | j                         | j                  S )Nr  )r   rp  algebrar  rr  )r   s    r*   translateAlgebraz#_AlgebraTranslator.translateAlgebraq  s*    ##++d6L6LM$$$r+   )rp  r   )NNri   )
r{  rk   r|  rk   r}  rk   r~  ro   r  ro   )r  z.typing.Union[Identifier, CompValue, Expr, str]returnrk   )r  rk   )	r   r   r   __doc__r   r  r  r  r
  ry   r+   r*   rn  rn    ss    "( "&,0SS S 	S
 '*S S2F	$l	"`%r+   rn  c                :    t        |       j                         }|S )z
    Translates a SPARQL 1.1 algebra tree into the corresponding query string.

    :param query_algebra: An algebra returned by `translateQuery`.
    :return: The query form generated from the SPARQL 1.1 algebra tree for
        SELECT queries.
    )rp  )rn  r
  )rp  query_from_algebras     r*   r
  r
  v  s%     ,#  r+   c                t    dfd		  | j                          y # t        $ r | D ]
  } |        Y y w xY w)Nc                    t        | t              st        |        y t        | j                  d       | D ]#  }t        ||dd        | |   |dz          % t        d|z         y )Nr  z =r  )end    z%s))r_   r   printr   )r'   indr   pps      r*   r  zpprintAlgebra.<locals>.pp  sn     !Y'!Hqvv A 
  qtS6\"  	eckr+   )r  )r	  AttributeError)r  rZ   r  s     @r*   pprintAlgebrar    s8    ,
199 AqE s    77)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   rf   )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   )ra   z)Tuple[Identifier, Identifier, Identifier]rb   z"Set[typing.Union[BNode, Variable]]r[   zDict[Identifier, int]r  zTuple[int, int, bool])rq   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  r  )r   r  r  zOptional[Expr])r   r   r  r  )r   r   r  r   )r   r   r   Callable[[Any], Any]r   r  )r   zCallable[[Any, Any], Any])r   r  r   r  r   zOptional[bool]r  r   )r  r  )r  Optional[Variable])rN   Set[Variable]r  r  )r  zList[Set[Variable]]r  r   )r   z>typing.Union[CompValue, List[Expr], Expr, List[str], Variable]r   r  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   rE  Optional[str]rI  Optional[Mapping[str, Any]]r   zOptional[Prologue]r  r   )rM  r   r  zyTuple[List[Tuple[Identifier, Identifier, Identifier]], DefaultDict[str, List[Tuple[Identifier, Identifier, Identifier]]]])r_  r   r   r   r  r   )r  r   rE  r!  rI  r"  r  r   )r  r   rE  r!  rI  r"  r  r   )rp  r   r  rk   )_r  
__future__r   rm   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   rc   rv   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r   r   r/  r@  rJ  rP  r`  rd  rj  rl  rn  r
  r  ry   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*6	T5EPI  &4&4
" $B :K * &4&4#	" $ 	
 	*& "1D5"
!3!3!36!3H7*IX+ 
, +/#'	
 ( !	
 2   .4 *.!!
! (! 	!> *.! ! 
!  (!  	! H	I 	v
% v
%rr+   