
    Pi              
         U 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	Z	ddl
Z
ddlZddlZddl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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%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z; ddZ<ddZ=ddZ>ddZ?ddZ@ddZAddZBddZCddZDdd ZEdd!ZFdd"ZGdd#ZHdd$ZIdd%ZJdd&ZKdd'ZLdd(ZMdd)ZNdd*ZOdd+ZPdd,ZQdd-ZRdd.ZSdd/ZTdd3ZUdd4ZVdd5ZWdd6ZXdd7ZYdd8ZZdd9Z[dd:Z\dd<Z]dd=Z^dd>Z_dd?Z`dd@ZaddAZbddBZcddCZdddDZeddEZfddFZgddGZhddHZiddIZjddJZkddLZlddMZmddNZnddOZoee+e-ge6f         Zpi ZqdPerdQ<   	 dddYZs	 ddd[Zt	 ddd]Zudd_Zv ete#jw        d`a           ete#jx        d`a           ete#jy        d`a           ete#jz        d`a           ete#j        d`a           ete#j{        d`a           ete#j|        d`a          ddb                                                                                    Z}ddcZ~dddZddeZddgZddhZddiZddjZddkZddlZddnZ e+dodp           ZddrZddtZddvZddxZddyZwddzZdd{ZddZddZddZedd            Zedd            Zedd            ZddZddZdS )z
This contains evaluation functions for expressions

They get bound as instances-methods to the CompValue objects from parserutils
using setEvalFn
    )annotationsN)ROUND_HALF_DOWNROUND_HALF_UPDecimalInvalidOperation)reduce)AnyCallableDictNoReturnOptionalTupleUnionoverload)quote)ParseResults)RDFXSD)XSD_DateTime_DTsXSD_DTsXSD_Duration_DTstype_promotion)	CompValueExpr)FrozenBindingsQueryContextSPARQLErrorSPARQLTypeError)BNodeIdentifiedNode
IdentifierLiteralNodeURIRefVariable)Durationparse_datetimeexprr   ctxr   returnr$   c                    | j         }t          |t                    r|S t          |t                    r'|j                            t          |                    S t          d          )z7
    http://www.w3.org/TR/sparql11-query/#func-iri
    z6IRI function only accepts URIRefs or Literals/Strings!)arg
isinstancer$   r"   prologue
absolutizer   r(   r)   as      s/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/sparql/operators.pyBuiltin_IRIr3   3   sa    
 	A!V !W 2 |&&vayy111
N
O
OO    r"   c                P    t          t          | j        t                              S N)r"   r-   r,   r   r(   r)   s     r2   Builtin_isBLANKr8   D   s    :dh..///r4   c                P    t          t          | j        t                               S r6   )r"   r-   r,   r7   s     r2   Builtin_isLITERALr:   H   s    :dh00111r4   c                P    t          t          | j        t                              S r6   )r"   r-   r,   r$   r7   s     r2   Builtin_isIRIr<   L   s    :dh//000r4   c                v    	 t          | j                   t          d          S #  t          d          cY S xY wNTF)numericr,   r"   r7   s     r2   Builtin_isNUMERICr@   P   s>    t}}u~~s   "% 8r   c                    | j         }|t                      S t          |t                    r|j        |         S t          d          )z9
    http://www.w3.org/TR/sparql11-query/#func-bnode
    Nz9BNode function only accepts no argument or literal/string)r,   r   r-   r"   bnodesr   r0   s      r2   Builtin_BNODErC   X   sF    
 	Ayww!W z!}
Q
R
RRr4   c                ^    t          t          t          | j                                      S )z7
    http://www.w3.org/TR/sparql11-query/#func-abs
    )r"   absr?   r,   r7   s     r2   Builtin_ABSrF   h   s$    
 3wtx(())***r4   c                F    t          | j                  r| j        n| j        S )z6
    http://www.w3.org/TR/sparql11-query/#func-if
    )EBVarg1arg2arg3r7   s     r2   
Builtin_IFrL   p   s    
 DI5499DI5r4   c                B    t          t          j                              S )z9
    http://www.w3.org/TR/sparql11-query/#idp2133952
    )r"   randomr7   s     r2   Builtin_RANDrO   x   s    
 6=??###r4   c                L    t          t          j                    j                  S 9
    http://www.w3.org/TR/sparql11-query/#func-strdt
    )r$   uuiduuid4urnr7   s     r2   Builtin_UUIDrV      s    
 $*,,"###r4   c                \    t          t          t          j                                        S rQ   )r"   strrS   rT   r7   s     r2   Builtin_STRUUIDrY      s     
 3tz||$$%%%r4   c                    t          | j                                      d          }t          t	          j        |                                                    S Nutf-8)stringr,   encoder"   hashlibmd5	hexdigestr(   r)   ss      r2   Builtin_MD5rd      sA    tx((A7;q>>++--...r4   c                    t          | j                                      d          }t          t	          j        |                                                    S r[   )r]   r,   r^   r"   r_   sha1ra   rb   s      r2   Builtin_SHA1rg      sA    tx((A7<??,,..///r4   c                    t          | j                                      d          }t          t	          j        |                                                    S r[   )r]   r,   r^   r"   r_   sha256ra   rb   s      r2   Builtin_SHA256rj      C    tx((A7>!$$..00111r4   c                    t          | j                                      d          }t          t	          j        |                                                    S r[   )r]   r,   r^   r"   r_   sha384ra   rb   s      r2   Builtin_SHA384rn      rk   r4   c                    t          | j                                      d          }t          t	          j        |                                                    S r[   )r]   r,   r^   r"   r_   sha512ra   rb   s      r2   Builtin_SHA512rq      rk   r4   c                    |                      dd          D ]$}| t          |t          t          f          s|c S %t          d          )z<
    http://www.w3.org/TR/sparql11-query/#func-coalesce
    r,   T	variablesNz;COALESCE got no arguments that did not evaluate to an error)getr-   r   r%   )r(   r)   xs      r2   Builtin_COALESCErw      sT     XXetX,,  =AX/F!G!G=HHH
S
T
TTr4   c           	         | j         }t          t          t          j        t          |                              |j                  S )z8
    http://www.w3.org/TR/sparql11-query/#func-ceil
    datatype)r,   r"   intmathceilr?   rz   r(   r)   l_s      r2   Builtin_CEILr      s8    
 
B3ty--..EEEEr4   c           	         | j         }t          t          t          j        t          |                              |j                  S )z9
    http://www.w3.org/TR/sparql11-query/#func-floor
    ry   )r,   r"   r{   r|   floorr?   rz   r~   s      r2   Builtin_FLOORr      s8     
B3tz'"++..//"+FFFFr4   c                    | j         }t          |          }t          t          |                              d|dk    rt
          nt                              }t          ||j                  S )z9
    http://www.w3.org/TR/sparql11-query/#func-round
       r   ry   )	r,   r?   r{   r   quantizer   r   r"   rz   )r(   r)   r   vs       r2   Builtin_ROUNDr      sZ     
BAGAJJAEE==OOPPA1r{++++r4   c           	        t          | j                  }t          | j                  }| j        }d}|r\t	          dt
          j        fdt
          j        fdt
          j        fg          t          t          j        fd|D                       }t          t          t          j        t          |          ||                              S )a*  
    http://www.w3.org/TR/sparql11-query/#func-regex
    Invokes the XPath fn:matches function to match text against a regular
    expression pattern.
    The regular expression language is defined in XQuery 1.0 and XPath 2.0
    Functions and Operators section 7.6.1 Regular Expression Syntax
    r   irc   mc                <    g | ]}                     |d           S r   ru   .0fflagMaps     r2   
<listcomp>z!Builtin_REGEX.<locals>.<listcomp>   '    !C!C!C'++a"3"3!C!C!Cr4   )r]   textpatternflagsdictre
IGNORECASEDOTALL	MULTILINEr   pyopor_r"   boolsearchrX   )r(   r)   r   r   r   cFlagr   s         @r2   Builtin_REGEXr      s     $)DT\""GJEE E bm,sBI.>bl@STUUtx!C!C!C!CU!C!C!CDD4	#g,,e<<==>>>r4   c                   t          | j                  }t          | j                  }t          | j                  }| j        }t          j        dd|          }d}|r\t          dt
          j        fdt
          j	        fdt
          j
        fg          t          t          j        fd|D                       }t          t          j        t          |          |||          |j        |j                  S )	:
    http://www.w3.org/TR/sparql11-query/#func-substr
    z
\$([0-9]*)z\\\1r   r   rc   r   c                <    g | ]}                     |d           S r   r   r   s     r2   r   z#Builtin_REPLACE.<locals>.<listcomp>   r   r4   rz   lang)r]   r,   r   replacementr   r   subr   r   r   r   r   r   r   r"   rX   rz   language)r(   r)   r   r   r   r   r   r   s          @r2   Builtin_REPLACEr      s     $(DT\""G)**KJE &==KE E bm,sBI.>bl@STUUtx!C!C!C!CU!C!C!CDD 
s7||[$66]   r4   c                R    t          t          | j                  | j                  S )rR   ry   )r"   rX   rI   rJ   r7   s     r2   Builtin_STRDTr     s!    
 3ty>>DI6666r4   c                    t          | j                  }|j        s|j        rt	          d          t          t          |          t          | j                                                            S )z;
    http://www.w3.org/TR/sparql11-query/#func-strlang
    z STRLANG expects a simple literal)r   )	r]   rI   r   rz   r   r"   rX   rJ   lowerrb   s      r2   Builtin_STRLANGr     sd    
 	tyAz >QZ ><=== 3q66DI 4 4 6 67777r4   c                   t          d | j        D                       }t          |          dk    r|                                nd}t          d | j        D                       }t          |          dk    r|                                nd}t	          d                    d | j        D                       ||          S )z:
    http://www.w3.org/TR/sparql11-query/#func-concat
    c              3  N   K   | ] }t          |t                    |j        V  !d S r6   )r-   r"   rz   r   rv   s     r2   	<genexpr>z!Builtin_CONCAT.<locals>.<genexpr>$  s3      DDAZ7-C-CDQZDDDDDDr4   r   Nc              3  N   K   | ] }t          |t                    |j        V  !d S r6   )r-   r"   r   r   s     r2   r   z!Builtin_CONCAT.<locals>.<genexpr>(  s3      FFaz!W/E/EFqzFFFFFFr4    c              3  4   K   | ]}t          |          V  d S r6   )r]   r   s     r2   r   z!Builtin_CONCAT.<locals>.<genexpr>/  s(      776!99777777r4   r   )setr,   lenpopr"   join)r(   r)   dtr   s       r2   Builtin_CONCATr     s     
DDDDD	D	DBWW\\tBFF48FFFFFDTa488:::TD
 27777dh77777"4PPPPr4   r1   bNonec                    t          |            t          |           |j        r| j        |j        k    rt          d          d S d S )Nz'incompatible arguments to str functions)r]   r   r   )r1   r   s     r2   _compatibleStringsr   2  sR    
1III
1IIIz EajAJ..CDDDE E..r4   c                    | j         }| j        }t          ||           t          |                    |                    S )z=
    http://www.w3.org/TR/sparql11-query/#func-strstarts
    )rI   rJ   r   r"   
startswithr(   r)   r1   r   s       r2   Builtin_STRSTARTSr   :  s:    
 		A	Aq!1<<??###r4   c                    | j         }| j        }t          ||           t          |                    |                    S )z;
    http://www.w3.org/TR/sparql11-query/#func-strends
    )rI   rJ   r   r"   endswithr   s       r2   Builtin_STRENDSr   F  s:     		A	Aq!1::a==!!!r4   c                    | j         }| j        }t          ||           |                    |          }|dk    rt	          d          S t	          |d|         |j        |j                  S )z=
    http://www.w3.org/TR/sparql11-query/#func-strbefore
    r   Nr   rz   )rI   rJ   r   findr"   r   rz   r(   r)   r1   r   r   s        r2   Builtin_STRBEFOREr   R  sg    
 		A	Aq!	q		ABwwr{{q!u1:
CCCCr4   c                    | j         }| j        }t          ||           |                    |          }|dk    rt	          d          S t	          ||t          |          z   d         |j        |j                  S )z<
    http://www.w3.org/TR/sparql11-query/#func-strafter
    r   r   Nr   )rI   rJ   r   r   r"   r   r   rz   r   s        r2   Builtin_STRAFTERr   b  sq    
 		A	Aq!	q		ABwwr{{qSVVQZ!*MMMMr4   c                `    | j         }| j        }t          ||           t          ||v           S )z?
    http://www.w3.org/TR/sparql11-query/#func-strcontains
    )rI   rJ   r   r"   r   s       r2   Builtin_CONTAINSr   r  s2    
 		A	Aq!16??r4   c                    t          t          t          | j                                      d          d                    S )Nr\   r   )safe)r"   r   r]   r,   r^   r7   s     r2   Builtin_ENCODE_FOR_URIr   ~  s5    5))0099CCCDDDr4   c                    t          | j                  }t          | j                  dz
  }| j        }|t          |          |z   }t          |||         |j        |j                  S )r   r   Nr   )r]   r,   r?   startlengthr"   r   rz   )r(   r)   r1   r   r   s        r2   Builtin_SUBSTRr     se    
 	txADJ!#E[F5(1U6\?ajIIIIr4   ec                b    t          | j                  }t          t          |                    S r6   )r]   r,   r"   r   r   r)   r   s      r2   Builtin_STRLENr     s#    	B3r77r4   c                v    | j         }t          |t                    r|t          t	          |                    S r6   )r,   r-   r   r"   rX   )r   r)   r,   s      r2   Builtin_STRr     s4    
%C#{## 	3s88r4   c                    t          | j                  }t          |                                |j        |j                  S Nr   )r]   r,   r"   r   rz   r   r   s      r2   Builtin_LCASEr     0    	B288::"+FFFFr4   c                    t          | j                  }t          | j                  }t          |          dk    rt	          d          S t	          t          ||                    S )zA
    http://www.w3.org/TR/sparql11-query/#func-langMatches


    r   F)r]   rI   rJ   rX   r"   _lang_range_check)r   r)   langTag	langRanges       r2   Builtin_LANGMATCHESr     sT     QVnnGqvI
7||ru~~$Y88999r4   c                *    t          |j                  S )z7
    http://www.w3.org/TR/sparql11-query/#func-now
    )r"   now)r   r)   s     r2   Builtin_NOWr     s     37r4   c                R    t          | j                  }t          |j                  S r6   )dater,   r"   yearr   r)   ds      r2   Builtin_YEARr     s    QUA16??r4   c                R    t          | j                  }t          |j                  S r6   )r   r,   r"   monthr   s      r2   Builtin_MONTHr     s    QUA17r4   c                R    t          | j                  }t          |j                  S r6   )r   r,   r"   dayr   s      r2   Builtin_DAYr     s    QUA15>>r4   c                R    t          | j                  }t          |j                  S r6   )datetimer,   r"   hourr   s      r2   Builtin_HOURSr     s    A16??r4   c                R    t          | j                  }t          |j                  S r6   )r   r,   r"   minuter   s      r2   Builtin_MINUTESr     s    A18r4   c                    t          | j                  }t          |j                  }|j        r'|t          |j                  t          d          z  z  }t          |t          j                  S )z;
    http://www.w3.org/TR/sparql11-query/#func-seconds
    i@B ry   )r   r,   r   secondmicrosecondr"   r   decimal)r   r)   r   result_values       r2   Builtin_SECONDSr    sa     	A18$$L} B..1A1AAA<#+6666r4   c                   t          | j                  }|j        st          d|z            |                                }|j        }|j        }d}|dk     rd|z  |z
  }d}d}|dz  }||dz  dz  z
  dz  }||dz  dz  z
  |dz  z
  }|d|rd	|z  ndd
|rd|z  nd|rd|z  nd|s	|s|sd|z  nd}	t          |	t          j	                  S )z
    http://www.w3.org/TR/sparql11-query/#func-timezone

    Returns:
        The timezone part of arg as an xsd:dayTimeDuration.

    Raises:
        An error if there is no timezone.
    zdatatime has no timezone: %rr   r   i-i  <   Pz%dDTz%dHz%dMz%dSry   )
r   r,   tzinfor   	utcoffsetdayssecondsr"   r   dayTimeDuration)
r   r)   r   deltar   rc   neghr   tzdeltas
             r2   Builtin_TIMEZONEr    s-    
!%B9 ?82=>>>LLNNE 	
AA
C1uuA!	WA	
QVb[BA	AFRK!b& A 			B		B		B616Q6		B6G 7S%89999r4   c                   t          | j                  }|j        st          d          S |j                            |          }|d}n(|dk    rd}n|                    d          r
|dd          }t          |          S )Nr   UTCZ   )r   r,   r
  r"   tznamer   )r   r)   r   ns       r2   
Builtin_TZr  	  s    A8 r{{	Ay	
e	
e		 abbE1::r4   c                    t          | j                  }t          |                                |j        |j                  S r   )r]   r,   r"   upperrz   r   r   s      r2   Builtin_UCASEr    r   r4   c                V    t          | j                  }t          |j        pd          S )zhttp://www.w3.org/TR/sparql11-query/#func-lang

    Returns the language tag of ltrl, if it has one. It returns "" if ltrl has
    no language tag. Note that the RDF data model does not include literals
    with an empty language tag.
    r   )literalr,   r"   r   r   s      r2   Builtin_LANGr     s&     
B2;$"%%%r4   Optional[str]c                    | j         }t          |t                    st          d|z            |j        rt
          j        S |j        s|j        st          j	        S |j        S )Nz$Can only get datatype of literal: %r)
r,   r-   r"   r   r   r   
langStringrz   r   r]   r   s      r2   Builtin_DATATYPEr$  *  se    	
Bb'"" G@2EFFF	{ ~; r{ z;r4   c                D    | j         }| j        }t          ||k              S r6   )rI   rJ   r"   )r   r)   r1   r   s       r2   Builtin_sameTermr&  5  s     	A	A16??r4   c                v    |                      dd          }t          t          |t                               S )z9
    http://www.w3.org/TR/sparql11-query/#func-bound
    r,   Trs   )ru   r"   r-   r%   )r   r)   r  s      r2   Builtin_BOUNDr(  ;  s4     	
et$$Az!X...///r4   c                    ddl m} | j        dk    }|j                            |          } ||| j                  D ]}t          |          c S t          |           S )Nr   )evalPartBuiltin_EXISTS)rdflib.plugins.sparql.evaluater*  namer)   thawgraphr"   )r   r)   r*  existsrv   s        r2   r+  r+  D  su    777777V''F ',,s

CXc17##  vv:r4   z*Dict[URIRef, Tuple[_CustomFunction, bool]]_CUSTOM_FUNCTIONSFurifunc_CustomFunctionoverrider   rawc                |    |s-| t           v r$t          d|                                 z            ||ft           | <   dS )a  Register a custom SPARQL function.

    By default, the function will be passed the RDF terms in the argument list.
    If raw is True, the function will be passed an Expression and a Context.

    The function must return an RDF term, or raise a SparqlError.
    z&A function is already registered as %sN)r1  
ValueErrorn3)r2  r3  r5  r6  s       r2   register_custom_functionr:  W  sI      N000ACFFHHLMMM"C[cr4   ,Callable[[_CustomFunction], _CustomFunction]c                     d fd}|S )z@
    Decorator version of :func:`register_custom_function`.
    r3  r4  r*   c                .    t          |            | S )N)r5  r6  )r:  )r3  r5  r6  r2  s    r2   	decoratorz"custom_function.<locals>.decoratorm  s     dX3GGGGr4   )r3  r4  r*   r4   )r2  r5  r6  r>  s   ``` r2   custom_functionr@  f  s5            r4   Optional[Callable[..., Any]]c                    t                               |           r
t           | = dS t          j        d|                                 z             dS )a  
    The 'func' argument is included for compatibility with existing code.
    A previous implementation checked that the function associated with
    the given uri was actually 'func', but this is not necessary as the
    uri should uniquely identify the function.
    z%This function is not registered as %sN)r1  ru   warningswarnr9  )r2  r3  s     r2   unregister_custom_functionrE  t  sM     S!! Jc"""=HIIIIIr4   r#   c                    t                               | j                  }|t          d| j        z            |\  }}|r || |          S 	  || j         S # t
          $ r}t          |j         d}~ww xY w)z$
    Custom functions and casts
    NzUnknown function %r)r1  ru   irir   r(   	TypeErrorargs)r   r)   pairr3  r6  exs         r2   FunctionrL    s       ''D|/!%7888ID#
 	(tAs||	(4=  	( 	( 	(rw''	(s   	A 
A4!A//A4T)r6  c                   | j         st          d          t          | j                   dk    rt          d          | j         d         }| j        t          j        k    rYt          |t          t          f          rt          |t          j                  S t          d|dt          |                    t          |t                    st          d          |j
        r%|j
        t          vrt          d	|j
        z            | j        t          j        k    rx|j
        r6|j
        t          j        t          j        fvrt          d
|j
        z            	 t          t          |          | j                  S #  t          d|z            xY w|j
        t          j        k    rt          d| j        z            | j        t          j        t          j        fv r;	 t          t          |          | j                  S #  t          d|z            xY w| j        t          j        k    rUd|v sd|v rt          d|z            	 t          t#          |          | j                  S #  t          d|z            xY w| j        t          j        k    r@	 t          t'          |          t          j                  S #  t          d|z            xY w| j        t          j        k    r\|                                dv rt          d          S |                                dv rt          d          S t          d|z            d S )NzNothing given to cast.r   z Cannot cast more than one thing!r   ry   zCannot cast term z	 of type z/Can only cast Literals to non-string data-typesz-Cannot cast literal with unknown datatype: %rzCannot cast %r to XSD:dateTimez!Cannot interpret '%r' as datetimezCannot cast XSD.dateTime to %rzCannot interpret '%r' as floatr   Ez Cannot interpret '%r' as decimalzCannot interpret '%r' as int)1trueT)0falseFzCannot interpret '%r' as bool)r(   r   r   rG  r   r]   r-   r$   r"   typerz   r   dateTimer'   floatdoubler  r   integerr{   booleanr   )r   r)   rv   s      r2   default_castrY    s     6 42333
16{{Q<===	q	Au
a&'*++ 	O1sz2222+!!!T!WWWMNNNa!! MKLLLz X!*//IAJVWWWu: 	M!*S\3:,FFF>KLLL	G>!,,qu====	GAAEFFFzS\!!:QUBCCCuCJ'''	D588ae4444	D>BCCC	
#+		!88saxx@1DEEE	F71::6666	F@1DEEE	
#+			B3q66CK8888	B<q@AAA	
#+		
 7799%%4== 7799&&5>>!9A=>>> 
	s0   "E? ?F""H H"I/ /J'K Kc                F    t          t          | j                             S r6   )r"   rH   r(   r7   s     r2   UnaryNotr[    s    s49~~%&&&r4   c                F    t          t          | j                             S r6   r"   r?   r(   r7   s     r2   
UnaryMinusr^        GDI&&&'''r4   c                F    t          t          | j                  
           S r6   r]  r7   s     r2   	UnaryPlusra    r_  r4   #Union[QueryContext, FrozenBindings]c                   | j         }| j        }||S 	 t          t          |                    }t	          | j        |          D ]L\  }}t          |          }t          |          t          k    rt          |          }|dk    r||z  }G||z  }Mn$# t          t          f$ r t          d          w xY wt          |          S )N*zdivide by 0)r(   otherr   r?   zipoprS  rU  r   ZeroDivisionErrorr   r"   )r   r)   r(   re  resrg  r   s          r2   MultiplicativeExpressionrj    s     6DGE })gdmm$$u%% 		 		EB

AAww%CjjSyyqq		 /0 ) ) )-((() 3<<s   A>B !B4c                   | j         }| j        }||S t          |d          rQ|j        t          v s|j        t
          v r4t          |          }|j        }t          | j        |          D ]\  }}|t          v r^||j        k    rS|dk    rMt          |          dk    rd}t          ||j                  t          |          }	t          ||	          }|c S |t          v r9|j        t
          v r+t          |          }	t          |||	|j        |          }|c S |t
          v r@|j        t          v r2|dk    r+t          |          }	t          |||	|j        |          }|c S t          d          d S t          |          }|j        }t          | j        |          D ]\  }}t          |          }	t          |	t                    r$t          |t                     rt!          |	          }	t          |	t                     r$t          |t                    rt!          |          }t#          ||j                  }|dk    r||	z  }||	z  }t%          ||          S )Nrz   r  r   z$Can't evaluate multiple %r arguments+zInvalid DateTime Operationsry   )r(   re  hasattrrz   r   r   dateTimeObjectsrf  rg  r   r   calculateDurationcalculateFinalDateTimer?   r-   r   rU  r   r"   )
r   r)   r(   re  ri  r   rg  termerror_messager  s
             r2   AdditiveExpressionrs    s   6DGE } tZ   ;))))T]>N-N-Nd##]AD%(( 	A 	AHB %%%"*=*=")) u::>>$JM%mR[AAA'--A+C33CJJJ '''DM=M,M,M#D)),S"aKK


 '''DM=M,M,M99'--A0b!T]BOOCJJJ  ""?@@@?	A 	AF dmm]AD%(( 	 	HBA!W%% *S%*@*@ !HH!U## !
3(@(@ !CjjDM22BSyyqqsR((((r4   c                H   | j         }| j        }| j        }||S t          dd fdd fdd fdd fd	d
 fdd fdt          j        fdd fg          }|dv ri|dk    }d}|t          j        k    rg }|D ]6}	 ||k    rt          d|z            c S # t          $ r} | }Y d } ~ /d } ~ ww xY w|st          d|z            S ||dvrOt          |t                    st          d|z            t          |t                    st          d|z            nNt          |t                    st          d|z            t          |t                    st          d|z            t          |t                    rRt          |t                    r=|j        6|j        t          vr(|j        !|j        t          vr|dvrt          d          	  ||         ||          }	|	t          k    rt          d          n # t          $ r}
t          |
j         d }
~
ww xY wt          |	          S )N>c                ,    |                      |          S r6   )__gt__rv   ys     r2   <lambda>z&RelationalExpression.<locals>.<lambda>]      qxx{{ r4   <c                ,    |                      |          S r6   )__lt__rx  s     r2   rz  z&RelationalExpression.<locals>.<lambda>^  r{  r4   =c                ,    |                      |          S r6   )eqrx  s     r2   rz  z&RelationalExpression.<locals>.<lambda>_  s    qttAww r4   !=c                ,    |                      |          S r6   )neqrx  s     r2   rz  z&RelationalExpression.<locals>.<lambda>`  s    a r4   z>=c                ,    |                      |          S r6   )__ge__rx  s     r2   rz  z&RelationalExpression.<locals>.<lambda>a       r4   z<=c                ,    |                      |          S r6   )__le__rx  s     r2   rz  z&RelationalExpression.<locals>.<lambda>b  r  r4   INNOT INc                .    t          j        | |           S r6   )r   containsrx  s     r2   rz  z&RelationalExpression.<locals>.<lambda>d  s    a(;(;$; r4   )r  r  FT)r  r  r  r  z8Compare other than =, != of non-literals is an error: %rz"I cannot compare this non-node: %r)r  r  z0Can only do =,!= comparisons of non-XSD LiteralszError when comparing)r(   re  rg  r   r   r  r   nilr"   r   r-   r#   rz   r   NotImplementedrH  rI  )r   r)   r(   re  rg  opsri  errorrv   rtes              r2   RelationalExpressionr  Q  s   6DGE	
B }
**+**+&&'(()++,++,4=!;;<		
 C 
Hn*/CGE 	 	A99"4#:.....     	53;''' K	,,,$(( 	JTQ   %)) 	JUR  	
 $%% 	KBTIJJJ%&& 	LBUJKKK$   	VZw%?%? 	VM%W,,*g-- $$!"TUUU$CGD%  4555  $ $ $27##$1::s0   5B
B&B!!B&,G5 5
H?HHc                z    | j         }| j        }||S t          t          d |g|z   D                                 S )Nc              3  4   K   | ]}t          |          V  d S r6   )rH   r   s     r2   r   z+ConditionalAndExpression.<locals>.<genexpr>  s(      66!s1vv666666r4   )r(   re  r"   all)r   r)   r(   re  s       r2   ConditionalAndExpressionr    sI    
 6DGE }366v~66666777r4   c                    | j         }| j        }||S d }|g|z   D ]<}	 t          |          rt          d          c S $# t          $ r} | }Y d } ~ 5d } ~ ww xY w|r|t          d          S r>   )r(   re  rH   r"   r   )r   r)   r(   re  r  rv   s         r2   ConditionalOrExpressionr    s    
 6DGE } EVe^  	1vv %t}}$$$% 	 	 	EEEEEE	 5>>s   ?
A	AAc                0    t          dt          |           S )Nr[  r(   )r   r[  )r,   s    r2   not_r    s    
H3////r4   rI  c            
         t          |           dk    r| d         S t          dt          | d         t          | dd                              S )Nr   r   r  )r(   re  )r   r   r  list)rI  s    r2   and_r    sO    
4yyA~~Aw" !W48nn	   r4   
TrueFilterc                     t          d          S )NT)r"   )_1_2s     r2   rz  rz    s    wt}} r4   r	   c                   t          | t                    r(t          |           dk    rt          | d                   S t          | t          t          f          r"t	          t          t          |                     S t          | t                    s| S | j                            d          r| j	        t          | j
                  S |                                 D ]}t          | |                   | |<   | S )Nr   r   
Expression)r-   r   r   simplifyr  mapr   r-  r   re  r(   keys)r(   ks     r2   r  r    s    $%% !#d))q..Q   $|,-- )C$''(((dI&& y,'' ':DI&&&YY[[ $ $47##Q Kr4   rc   c                T    t          | t                    st          d| z            | S )Nz Non-literal passed as string: %r)r-   r"   r   rc   s    r2   r  r    s.    a!! B<q@AAAHr4   py_datetime.datetimec                    t          | t                    st          d| z            | j        t          j        k    st          d| z            |                                 S )Nz"Non-literal passed as datetime: %rz2Literal with wrong datatype passed as datetime: %r)r-   r"   r   rz   r   rT  toPython)r   s    r2   r   r     s[    a!! D>BCCC:%%NQRRSSS::<<r4   py_datetime.datec                :   t          | t                    st          d| z            | j        t          j        t          j        fvrt          d| z            |                                 }t          |t          j	                  r|                                S |S )NzNon-literal passed as date: %rz.Literal with wrong datatype passed as date: %r)
r-   r"   r   rz   r   r   rT  r  py_datetimer   )r   results     r2   r   r      s    a!! @:Q>???z#(CL111JQNOOOZZ\\F&+.// {{}}Mr4   c                    t          | t                    st          d| z            | j        r'| j        t          j        k    rt          d| z            | S )zz
    Make sure the passed thing is a string literal
    i.e. plain literal, xsd:string literal or lang-tagged literal
    z Non-literal passes as string: %rz0Non-string datatype-literal passes as string: %r)r-   r"   r   rz   r   r]   r  s    r2   r]   r]     s]    
 a!! B<q@AAAz RajCJ..LqPQQQHr4   c                   t          | t                    st          d| z            | j        t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        t          j        fvrt          d| z            |                                 S )zf
    return a number from a literal
    http://www.w3.org/TR/xpath20/#promotion

    or TypeError
    z%r is not a literal!z$%r does not have a numeric datatype!)r-   r"   r   rz   r   rU  rV  r  rW  nonPositiveIntegernegativeIntegernonNegativeIntegerpositiveIntegerunsignedLongunsignedIntunsignedShortunsignedBytelongr{   shortbyter  r  s    r2   r?   r?     s     dG$$ =4t;<<<}	
	!  $ DtKLLL==??r4   c                *    |                                  S )zn
    return a dataTime/date/time/duration/dayTimeDuration/yearMonthDuration python objects from a literal
    )r  r  s    r2   rn  rn  9  s     ==??r4   obj1-Union[py_datetime.date, py_datetime.datetime]dt1obj2&Union[Duration, py_datetime.timedelta]dt2c                   |t           j        k    rG|t           j        k    rdS |t           j        k    s|t           j        k    rdt          |          v rdS dS |t           j        k    rO|t           j        k    rdS |t           j        k    s|t           j        k    rdt          |          d         k    rdS dS |t           j        k    rdS dS )zp
    Returns a boolean indicating if first object is compatible
    with operation(+/-) over second object.
    Tr	  Fr   N)r   r   yearMonthDurationr  r&   rX   timerT  )r  r  r  r  s       r2   isCompatibleDateTimeDatatyper  A  s     ch#'''4C'''3#,+>+> c$iiut
ch#'''5C'''3#,+>+> c$iil""tu
clt r4   c                J    | }|}||z
  }t          |t          j                  S )z;
    returns the duration Literal between two datetime
    ry   )r"   r   duration)r  r  date1date2
differences        r2   ro  ro  g  s,     EEJ:5555r4   	operationrX   c                    t          | |||          r2|dk    r| |z
  }t          ||          S | |z   }t          ||          S t          d          )z
    Calculates the final dateTime/date/time resultant after addition/
    subtraction of duration/dayTimeDuration/yearMonthDuration
    r  ry   z.Incompatible Data types to DateTime Operations)r  r"   r   )r  r  r  r  r  anss         r2   rp  rp  u  so     $D#tS99 
L+C3----+C3---- JKKKr4   rtc                    d S r6   r?  r  s    r2   rH   rH     s    !cr4   2Union[Variable, IdentifiedNode, SPARQLError, Expr]r   c                    d S r6   r?  r  s    r2   rH   rH     s    MPSr4   $Union[Identifier, SPARQLError, Expr]Union[bool, NoReturn]c                    d S r6   r?  r  s    r2   rH   rH     s    LOCr4   c                   t          | t                    r| j        t          j        k    r|                                 S | j        t          j        k    s| j        t          |           dk    S |                                 }t          |t                    rt          d| z            t          |          S t          d| z            )a}  Effective Boolean Value (EBV)

    * If the argument is a typed literal with a datatype of xsd:boolean,
      the EBV is the value of that argument.
    * If the argument is a plain literal or a typed literal with a
      datatype of xsd:string, the EBV is false if the operand value
      has zero length; otherwise the EBV is true.
    * If the argument is a numeric type or a typed literal with a datatype
      derived from a numeric type, the EBV is false if the operand value is
      NaN or is numerically equal to zero; otherwise the EBV is true.
    * All other arguments, including unbound arguments, produce a type error.
    Nr   zjhttp://www.w3.org/TR/rdf-sparql-query/#ebv - ' +                     'Could not determine the EBV for : %rzchttp://www.w3.org/TR/rdf-sparql-query/#ebv - ' +             'Only literals have Boolean values! %r)
r-   r"   rz   r   rX  r  r]   r   r   r   )r  pyRTs     r2   rH   rH     s     "g 
;#+%%;;== [CJ&&"+*=r77Q; ;;==D$(( "%;   Dzz! 4
 
 	
r4   ranger   c                   dd|                                                                                      d          }|                                                                                     d          } |d         |d                   sd	S t          |          t          |          k    rd	S t	          fd
t          ||          D                       S )a  
    Implementation of the extended filtering algorithm, as defined in point
    3.3.2, of [RFC 4647](http://www.rfc-editor.org/rfc/rfc4647.txt), on
    matching language ranges and language tags.
    Needed to handle the `rdf:PlainLiteral` datatype.

    Args:
        range: language range
        lang: language tag

    Author: [Ivan Herman](http://www.w3.org/People/Ivan/)

    Taken from [`RDFClosure/RestrictedDatatype.py`](http://dev.w3.org/2004/PythonLib-IH/RDFClosure/RestrictedDatatype.py)
    r  rX   r   r*   r   c                    | dk    p| |k    S )z
        Matching of a range and language item: either range is a wildcard
        or the two are equal

        Args:
            r: language range item
            l_: language tag item
        rd  r?  )r  r   s     r2   _matchz!_lang_range_check.<locals>._match  s     Cx"17"r4   r  r   Fc              3  "   K   | ]	} | V  
d S r6   r?  )r   rv   r  s     r2   r   z$_lang_range_check.<locals>.<genexpr>  s)      <<avvqz<<<<<<r4   )r  rX   r   rX   r*   r   )stripr   splitr   r  rf  )r  r   	rangeListlangListr  s       @r2   r   r     s     	# 	# 	# 	# ##%%++C00Izz||!!##))#..H6)A,,, u
9~~H%%u<<<<3y(#;#;<<<<<<r4   )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$   )r1   r"   r   r"   r*   r   )r   r   r*   r"   )r   r   r*   r!  )r   r   r)   r   r*   r"   )FF)
r2  r$   r3  r4  r5  r   r6  r   r*   r   )r2  r$   r5  r   r6  r   r*   r;  r6   )r2  r$   r3  rA  r*   r   )r   r   r)   r   r*   r#   )r   r   r)   rb  r*   r"   )r*   r   )rI  r   r*   r   )r(   r	   r*   r	   )rc   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  rX   r*   r"   )r  r"   r*   r   )r  r  r*   r   )r  r  r*   r  )r  r  r*   r   )r  r"   r   r"   r*   r   )__doc__
__future__r   r   r  r_   r|   operatorr   rN   r   rS   rC  r  r   r   r   r   	functoolsr   typingr	   r
   r   r   r   r   r   r   urllib.parser   	pyparsingr   rdflib.namespacer   r   rdflib.plugins.sparql.datatypesr   r   r   r   !rdflib.plugins.sparql.parserutilsr   r   rdflib.plugins.sparql.sparqlr   r   r   r   rdflib.termr   r    r!   r"   r#   r$   r%   rdflib.xsd_datetimer&   r'   r3   r8   r:   r<   r@   rC   rF   rL   rO   rV   rY   rd   rg   rj   rn   rq   rw   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+  r4  r1  __annotations__r:  r@  rE  rL  r]   rT  rU  rV  rW  rX  rY  r[  r^  ra  rj  rs  r  r  r  r  r  r  r  r  r   r?   rn  r  ro  rp  rH   r   r?  r4   r2   <module>r     s
     # " " " " "            				   M M M M M M M M M M M M       R R R R R R R R R R R R R R R R R R R R       " " " " " " % % % % % % % %            > = = = = = = =                             9 8 8 8 8 8 8 8P P P P"0 0 0 02 2 2 21 1 1 1   S S S S + + + +6 6 6 6$ $ $ $$ $ $ $& & & &/ / / /
0 0 0 0
2 2 2 2
2 2 2 2
2 2 2 2
U U U UF F F FG G G G, , , ,? ? ? ?.   :7 7 7 78 8 8 8Q Q Q Q*E E E E	$ 	$ 	$ 	$	" 	" 	" 	"D D D D N N N N 	 	 	 	E E E EJ J J J       G G G G: : : :      
   
   
   
   
7 7 7 7': ': ': ':T   G G G G	& 	& 	& 	&      0 0 0 0    D.1478@B  B B B B MR) ) ) ) )  6;     7;J J J J J( ( ( (* &&&4(((%%%&&&$'''$'''$'''<? <? <? (' (' (' '& &% )( '&<?~' ' ' '( ( ( (( ( ( (   <F) F) F) F)RL L L L^8 8 8 8    60 0 0 0	 	 	 	 T, < <==
   (         	 	 	 	   D   # # # #L6 6 6 6L L L L4 
 ! ! ! 
 ! 
 P P P 
 P 
 O O O 
 O'
 '
 '
 '
T"= "= "= "= "= "=r4   