
    PinU                    Z   d Z ddlmZ ddlZddlZddl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 ddlmZ ddlmZ dd	l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+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6 erddl7m8Z8 ddl9Z9	 ddl:Z:dZ;n# e<$ r dZ:dZ;Y nw xY wee3e3e3f         Z=dSdZ>dTdZ?dUdZ@dVdZAdWd"ZBdXd$ZCdUd%ZDdYd'ZEdYd(ZFdYd)ZGdZd*ZHd[d,ZIdZd-ZJ	 d\d0ZKd]d5ZLd^d7ZMd_d9ZNdYd:ZOd`d<ZPdYd=ZQdYd>ZRdad@ZSdbdCZTdcdEZUdddGZVdedIZW	 	 dfdgdRZXdS )ha  
These method recursively evaluate the SPARQL Algebra

evalQuery is the entry-point, it will setup context and
return the SPARQLResult object

evalPart is called on each level and will delegate to the right method

A `rdflib.plugins.sparql.sparql.QueryContext` is passed along, keeping
information needed for evaluation

A list of dicts (solution mappings) is returned, apart from GroupBy which may
also return a dict of list of dicts
    )annotationsN)TYPE_CHECKINGAnyDequeDict	GeneratorIterableListMappingOptionalTupleUnion)	urlencode)Requesturlopen)ParseException)Graph)CUSTOM_EVALSparser)
Aggregator)_ebv_eval_fillTemplate_join_minus_val)	CompValuevalue)AlreadyBoundFrozenBindings
FrozenDictQueryQueryContextSPARQLError)BNode
IdentifierLiteralURIRefVariable)PathTFctxr#   bgpList[_Triple]return%Generator[FrozenBindings, None, None]c              #    K   |s|                                  V  dS |d         \  }}}| |         }| |         }| |         }| j                            |||f          D ]|\  }}	}
d|||fv r|                                 }n| }||||<   	 ||	||<   n# t          $ r Y @w xY w	 ||
||<   n# t          $ r Y Yw xY wt          ||dd                   D ]}|V  }dS )z
    A basic graph pattern
    Nr      )solutiongraphtriplespushr   evalBGP)r+   r,   spo_s_p_ossspsocxs                r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/sparql/evaluate.pyr6   r6   M   sX       llnn!fGAq!	QB	QB	QB i''R55  
BBB<

AAA:AaD	z! 	 	 	H		z! 	 	 	H	 CG$$ 	 	AGGGG	1 s$   
B
BB#B++
B87B8extendr   c              #  ,  K   t          | |j                  D ]{}	 t          |j        |                    | |j                            }t          |t                    r||                    |j	        |i          V  h# t          $ r |V  Y xw xY wd S N)_except)
evalPartr8   r   exprforget_vars
isinstancer$   mergevar)r+   rC   r@   es       rB   
evalExtendrO   |   s      
 c68$$ 	 		fk188C8#F#FGGA![)) ''6:q/****** 	 	 	GGGGG		 	s   A$B  BBjoinc              #     K   t          | |j                  D ]F}|                     |          }t          ||j                  D ]}|                    |          V  GdS )z
    A lazy join will push the variables bound
    in the first part to the second part,
    essentially doing the join implicitly
    hopefully evaluating much fewer triples
    N)rG   p1thawp2rL   )r+   rP   ar@   bs        rB   evalLazyJoinrW      su       c47##  HHQKK!TW%% 	 	A''!**	     !Generator[FrozenDict, None, None]c                    |j         rt          | |          S t          | |j                  }t	          t          | |j                            }t          ||          S N)lazyrW   rG   rR   setrT   r   )r+   rP   rU   rV   s       rB   evalJoinr^      sV     y C&&&S$'""dg&&''Q{{rX   union	List[Any]c                    g }t          | |j                  D ]}|                    |           t          | |j                  D ]}|                    |           |S r[   )rG   rR   appendrT   )r+   r_   branch1_branch2rA   s       rB   	evalUnionrd      sq    Oc58$$ " "q!!!!c58$$ " "q!!!!rX   minusc                    t          | |j                  }t          t          | |j                            }t	          ||          S r[   )rG   rR   r]   rT   r   )r+   re   rU   rV   s       rB   	evalMinusrg      s:    ehAHS%(##$$A!Q<<rX   c              #    K   t          | j                  D ]}d}|                     |          }t          |j                  D ]C}t	          j        |                    |                     rd}|                    |          V  D|sfj        j        }|Tt          fdt          |                     |
                    |                    j                  D                       s|V  d S )NFTc              3  B   K   | ]}t          j        |          V  d S r[   )r   rH   ).0rV   rP   s     rB   	<genexpr>zevalLeftJoin.<locals>.<genexpr>   sC       * * TY""* * * * * *rX   )rG   rR   rS   rT   r   rH   rI   rL   rJ   anyremember)r+   rP   rU   okr@   rV   p1_varss    `     rB   evalLeftJoinrp      s      c47##  HHQKK!TW%% 	! 	!ADIqxx}}-- !ggajj    	 gmGc * * * *!#((1::g+>+>"?"?II* * * ' ' % rX   partc              #     K   t          | |j                  D ]>}t          |j        |j        s|                    | |j                  n|          r|V  ?d S rE   )rG   r8   r   rH   no_isolated_scoperI   rJ   )r+   rq   r@   s      rB   
evalFilterrt      ss       c46""  I595KRAHHS$*H---QR
 
 	 GGG rX   c              #    K   | j         t          d          |                                 } | |j                 }| j        }|| j                                         D ]}|| j         j        k    r|                     |          }|                                }|j        |j	        ig}t          t          ||j                  |          D ]}||j        _        |V  d S t          rt          |t                     rJ |                     | j                             |                    }t          ||j                  D ]}||j        _        |V  d S )NzKNon-conjunctive-graph doesn't know about graphs. Try a query without GRAPH.)dataset	Exceptionclonetermr3   contextsdefault_context	pushGraphr5   
identifierr   rG   r8   r+   r   rK   r   get_context)r+   rq   r3   
prev_graphr@   graphSolutionrA   s          rB   	evalGraphr      so      {3
 
 	

 ))++C+.ty>EJ}[))++ 
	 
	E333e$$AA"i)9:;M8Atv..>>  (
	 
	  	0!%/////MM#+11%8899!TV$$ 	 	A$AEKGGGG	 	rX   c              #     K   |j         j        D ]c}|                                 }	 |                                D ]\  }}|dk    r|||<   n# t          $ r Y Iw xY w|                                V  dd S )NUNDEF)r8   resr5   itemsr   r2   )r+   rq   rr@   kvs         rB   
evalValuesr      s       VZ 	 	HHJJ			  1<<AaD  	 	 	H	 jjll	 	s   %A
AAc                l    |j         j        dk    rt          | |          S t          | |j                   S )Nvalues)r8   namer   rG   )r+   rq   s     rB   evalMultisetr     s3    v{h#t$$$C   rX   r   c                @    t          j                    D ]#\  }}	  | |          c S # t          $ r Y  w xY w|j        dk    r)t	          |j         fd          }t           |          S |j        dk    rt           |          S |j        dk    rt           |          S |j        dk    rt           |          S |j        dk    rt           |          S |j        dk    rt           |          S |j        d	k    rt           |          S |j        d
k    rt           |          S |j        dk    rt           |          S |j        dk    rt           |          S |j        dk    rt!           |          S |j        dk    rt#           |          S |j        dk    rt%           |          S |j        dk    rt'           |          S |j        dk    rt)           |          S |j        dk    rt+           |          S |j        dk    rt-           |          S |j        dk    rt/           |          S |j        dk    rt1           |          S |j        dk    rt3           |          S |j        dk    rt5           |          S t7          d|j        z            )NBGPc                :    t          fd| D                       S )Nc                $    g | ]}|         
|S r[    )rj   nr+   s     rB   
<listcomp>z.evalPart.<locals>.<lambda>.<locals>.<listcomp>!  s    ,L,L,L1SV^Q^^^rX   )len)tr+   s    rB   <lambda>zevalPart.<locals>.<lambda>!  s$    ,L,L,L,L,L,L,L(M(M rX   )keyFilterJoinLeftJoinr   r   
ToMultiSetExtendMinusProjectSliceDistinctReducedOrderByGroupAggregateJoinSelectQueryAskQueryConstructQueryServiceGraphPatternDescribeQueryzI dont know: %s)r   r   NotImplementedErrorr   sortedr4   r6   rt   r^   rp   r   rd   r   rO   rg   evalProject	evalSliceevalDistinctevalReducedevalOrderBy	evalGroupevalAggregateJoinevalSelectQueryevalAskQueryevalConstructQueryevalServiceQueryevalDescribeQueryrw   )r+   rq   r   r@   r4   s   `    rB   rG   rG     s    %''  a	1S$<<" 	 	 	D	 yE LMMMM
 
 
 sG$$$	h		#t$$$	f		T"""	j	 	 C&&&	g		d###	g		d###	l	"	"C&&&	h		#t$$$	g		d###	i		3%%%	g		d###	j	 	 C&&&	i		3%%%	i		3%%%	g		d###	o	%	% d+++	m	#	#sD)))	j	 	 C&&&	&	&	&!#t,,,	+	+	+T***	o	%	% d+++ )DI5666s   )
66c              #    K   i }t          j        d|                    dd          t           j        t           j        z            }|r|                    d          }t          | |                    d                    }|dd}dd	d
}t          |          dk     r2t          t          |dz   t          |          z   |                    }n>t          t          |t          |                                          |                    }|j        dk    rt          r't          j        |                                          }	n&t#          j        |                                          }	|	d         d         x}
|d<   |	d         d         }t          |          dk    r|D ]}t%          | ||
          D ]}|V  d S d S t'          d||j                  d S )Nz ^service <(.*)>[ 
]*{(.*)}[ 
]*$service_string r1      json)queryoutputzapplication/sparql-results+jsonrdflibForAnUser)acceptz
user-agentiX  ?)headers)datar      headvarsvars_resultsbindingsr   z#Service: %s responded with code: %s)rematchgetDOTALLIgroup_buildQueryStringForServiceCallr   r   r   r   encodestatus_HAS_ORJSONorjsonloadsreadr   #_yieldBindingsFromServiceCallResultrw   )r+   rq   r   r   service_urlservice_queryquery_settingsr   response	json_dict	variablesr   bounds                rB   r   r   W  s     
CH,!2&&
	BD	 E  &kk!nn7U[[^^LL#0FCC7+
 

 }##c)In,E,EEwWWW HH ">2299;;#   H ?c!! 8"L99		 Jx}}77	'0'8'@@IGI&z2C3xx!|| $ $A!DS!Y!W!W $ $#$ |$ $
 5{HO  I& &rX   r   strc                j    	 t          j        |           n# t          $ r d|z   dz   } j        j        j                                        D ]1}d|d         z   dz   |d                                         z   dz   |z   }2 j        j        }|t          |          dk    rd|z   d	z   |z   }Y nw xY wd
  
                                D             }t          |          dk    rQd                    d |D                       }d                     fd|D                       }|dz   |z   dz   |z   dz   }|S )NzSELECT REDUCED * WHERE {}zPREFIX r   :r1    zBASE <z> c                <    g | ]}t          |t                    |S r   )rK   r)   rj   r   s     rB   r   z3_buildQueryStringForServiceCall.<locals>.<listcomp>  s'    
@
@
@
1h(?(?
@1
@
@
@rX   c                6    g | ]}|                                 S r   )n3r   s     rB   r   z3_buildQueryStringForServiceCall.<locals>.<listcomp>  s     222addff222rX   c                ^    g | ])}                     |                                          *S r   )r   r   )rj   r   r+   s     rB   r   z3_buildQueryStringForServiceCall.<locals>.<listcomp>  s+    #A#A#ACGGAJJMMOO#A#A#ArX   zVALUES (z) {(z)})r   
parseQueryr   prologuenamespace_managerstore
namespacesr   baser   r2   rP   )r+   r   r8   r   solr   variables_bounds   `      rB   r   r     sr   C-(((( 
C 
C 
C2]BSH/5@@BB 	U 	UA%!,s2QqTWWYY>D}TMM | D		A$tOd2]BM
C A
@cllnn
@
@
@C
3xx!||HH22c22233	((#A#A#A#AS#A#A#ABBJ&2V;oMPTT 	 s    BB.-B.r   Dict[str, Dict[str, str]]r   	List[str]c              #    K   i }|D ]%}||v r||         r||         }|d         }|dk    r&t          |d                   |t          |          <   M|dk    rOt          |d         |                    d          |                    d                    |t          |          <   |dk    r;t          |d         t          |d                   	          |t          |          <   |d
k    r't	          |d                   |t          |          <   t          d|d|          't          | |          V  d S )Ntypeurir   literaldatatypezxml:lang)r   langztyped-literal)r   bnodezinvalid type z for variable )r(   r)   r'   r   r%   
ValueErrorr    )r+   r   r   res_dictrM   var_bindingvar_types          rB   r   r     so      ,.H T T!88#8C&K"6*H5  *0W1E*F*F#''Y&&*1((__Z88$44+ + +#'' _,,*1(6+j:Q3R3R+ + +#'' W$$*/G0D*E*E#'' !R!R!R3!R!RSSS
h
'
''''''rX   r   c                ,    t          | |j                  S )z<
    http://www.w3.org/TR/sparql11-query/#defn_algGroup
    rG   r8   )r+   r   s     rB   r   r     s    
 C!!!rX   aggc              #     K   t          | j                  }j        j        }t          j        fd          }|#|d         }|D ]|                               n;|D ]8t          fd|D                       }||                                        9|                                D ]&}t          | |	                                          V  't          |          dk    rt          |           V  d S d S )Nc                 .    t           j                  S )N)aggregations)r   A)r  s   rB   r   z#evalAggregateJoin.<locals>.<lambda>  s    
... rX   Tc              3  :   K   | ]}t          |d           V  dS )FN)r   )rj   rN   rows     rB   rk   z$evalAggregateJoin.<locals>.<genexpr>  s/      ??qeAsE**??????rX   r   )rG   r8   rH   collectionsdefaultdictupdatetupler   r    get_bindingsr   )r+   r  r8   
group_exprr   
aggregatorr   r  s    `     @rB   r   r     s>      	ceA J%1.... C  Y
 	# 	#Cc""""	#  	 	C????J?????AFMM# jjll = =
S*"9"9";";<<<<<< 3xx1}}S!!!!!!! }rX   c                    t          | |j                  }t          |j                  D ]6t	          j        o
j        dk              }t          |fd|          }7|S )NDESCc                L    t          t          | j        d                    S )NT)r   )r   r   rH   )rA   rN   s    rB   r   zevalOrderBy.<locals>.<lambda>  s     tE!QVt$D$D$DEE rX   )r   reverse)rG   r8   reversedrH   boolorderr   )r+   rq   r   r  rN   s       @rB   r   r     sx     3

Cdi   
 
qw417f#455EEEEw
 
 
 JrX   slicec                    t          | |j                  }t          j        ||j        |j        |j        |j        z   nd           S r[   )rG   r8   	itertoolsislicestartlength)r+   r  r   s      rB   r   r     sH    
3
 
 C&+l&>el""D  rX   c              #    K   d}t                      }t          j                    }t          | |j                  D ]}||v r|                    |           nS|V  |                    |           t          |          |k    r'|                    |                                           |	                    |           dS )zapply REDUCED to result

    REDUCED is not as strict as DISTINCT, but if the incoming rows were sorted
    it should produce the same result with limited extra memory and time per
    incoming row.
    r1   N)
r]   r  dequerG   r8   removeaddr   pop
appendleft)r+   rq   MAXmru_set	mru_queuer  s         rB   r   r     s       C eeG'-//ITV$$ " "'>>S!!!! IIIKK7||c!!y}}///S!!!!" "rX   c              #     K   t          | |j                  }t                      }|D ]}||vr|V  |                    |            d S r[   )rG   r8   r]   r  )r+   rq   r   donerA   s        rB   r   r   /  s]       3

C55D  D==GGGHHQKKK rX   projectc                J    t          | j                  }fd|D             S )Nc              3  L   K   | ]}|                     j                  V  d S r[   )r'  PV)rj   r  r'  s     rB   rk   zevalProject.<locals>.<genexpr>=  s1      33CKK
##333333rX   r   )r+   r'  r   s    ` rB   r   r   ;  s.    
3	
"
"C3333s3333rX   r   >Mapping[str, Union[str, List[Variable], Iterable[FrozenDict]]]c                X    i }d|d<   t          | |j                  |d<   |j        |d<   |S )NSELECTtype_r   r   )rG   r8   r*  )r+   r   r   s      rB   r   r   @  s9     HJCCLsEG,,C
O8CLJrX   Mapping[str, Union[str, bool]]c                X    i }d|d<   d|d<   t          | |j                  D ]}d|d<    |S )NASKr.  F	askAnswerTr   )r+   r   r   rA   s       rB   r   r   J  sG    ')CCLCc57##  KJrX   Mapping[str, Union[str, Graph]]c                    |j         }|s|j        j        j        }t                      }t	          | |j                  D ]}|t          ||          z  }i }d|d<   ||d<   |S )N	CONSTRUCTr.  r3   )templater8   r4   r   rG   r   )r+   r   r6  r3   r@   r   s         rB   r   r   U  su     ~H %79$GGEc57## , ,x+++(*CCLCLJrX   Dict[str, Union[str, Graph]]c                   t                      }| j                                        D ]\  }}|                    ||           t	                      }|j        D ],}t          |t                    r|                    |           -|j	        )t          | |j	                  } |j        d |D               |D ]}| j                            ||           i }	d|	d<   ||	d<   |	S )Nc              3  X   K   | ]%}t          |                                          V  &d S r[   )r]   r   )rj   bindings     rB   rk   z$evalDescribeQuery.<locals>.<genexpr>  s4      KKwS!1!122KKKKKKrX   )target_graphDESCRIBEr.  r3   )r   r3   r   bindr]   r*  rK   r(   r  r8   rG   r
  cbd)
r+   r   r3   pfxnsto_describeirir   resourcer   s
             rB   r   r   j  s   GGE9''))  R

3%%K x ! !c6"" 	!OOC    wC))KK(KKKLL   4 4	hU3333(*CCLCLJrX   r3   r   r"   initBindings"Optional[Mapping[str, Identifier]]r   Optional[str]Mapping[Any, Any]c                    |j         }t          d |pi                                 D                       }t          | ||j                  }|j        |_        t          ||          S )a5  Evaluate a SPARQL query against a graph.

    !!! warning "Caution"

        This method can access indirectly requested network endpoints, for
        example, query processing will attempt to access network endpoints
        specified in `SERVICE` directives.

        When processing untrusted or potentially malicious queries, measures
        should be taken to restrict network and file access.

        For information on available security measures, see the RDFLib
        [Security Considerations](../security_considerations.md)
        documentation.
    c              3  >   K   | ]\  }}t          |          |fV  d S r[   )r)   )rj   r   r   s      rB   rk   zevalQuery.<locals>.<genexpr>  s1      RRTQ!a(RRRRRRrX   )rD  datasetClause)algebradictr   r#   rJ  r   rG   )r3   r   rD  r   mainr+   s         rB   	evalQueryrN    sq    * =DRRl6Hb5O5O5Q5QRRRRRL
L8J  C >CLCrX   )r+   r#   r,   r-   r.   r/   )r+   r#   rC   r   r.   r/   )r+   r#   rP   r   r.   r/   )r+   r#   rP   r   r.   rY   )r+   r#   r_   r   r.   r`   )r+   r#   re   r   r.   rY   )r+   r#   rq   r   r.   r/   )r+   r#   rq   r   )r+   r#   rq   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   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   r   r.   r3  )r+   r#   r.   r7  )NN)
r3   r   r   r"   rD  rE  r   rF  r.   rG  )Y__doc__
__future__r   r  r  r   typingr   r   r   r   r   r	   r
   r   r   r   r   urllib.parser   urllib.requestr   r   	pyparsingr   rdflib.graphr   rdflib.plugins.sparqlr   r    rdflib.plugins.sparql.aggregatesr   rdflib.plugins.sparql.evalutilsr   r   r   r   r   r   !rdflib.plugins.sparql.parserutilsr   r   rdflib.plugins.sparql.sparqlr   r    r!   r"   r#   r$   rdflib.termr%   r&   r'   r(   r)   rdflib.pathsr*   r   r   r   ImportError_Tripler6   rO   rW   r^   rd   rg   rp   rt   r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN  r   rX   rB   <module>r_     s    # " " " " "         				                          # " " " " " + + + + + + + + $ $ $ $ $ $       6 6 6 6 6 6 6 6 7 7 7 7 7 7                ? > > > > > > >                E D D D D D D D D D D D D D "!!!!!! MMMKK   FKKK 
J
2
3, , , ,^   "   	 	 	 	         2	 	 	 	       F   ! ! ! !?7 ?7 ?7 ?7D/ / / /d   0( ( ( (:" " " "" " " "B      %" %" %" %"P	 	 	 	4 4 4 4
         *       L 8<	      s   B! !	B-,B-