
    PiZ                     p    d Z ddlZddlmZ ddlmZ dZdZ G d de          Z	d Z
 G d	 d
e          ZdS )ab  
This wrapper intercepts calls through the store interface which make use of
the REGEXTerm class to represent matches by REGEX instead of literal
comparison.

Implemented for stores that don't support this and essentially
provides the support by replacing the REGEXTerms by wildcards (None) and
matching against the results from the store it's wrapping.
    N)Graph)Store   c                       e Zd ZdZd Zd ZdS )	REGEXTermz
    REGEXTerm can be used in any term slot and is interpreted as a request to
    perform a REGEX match (not a string comparison) using the value
    (pre-compiled) for checking rdf:type matches
    c                 8    t          j        |          | _        d S N)recompilecompiledExpr)selfexprs     w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/stores/regexmatching.py__init__zREGEXTerm.__init__   s    Jt,,    c                     t           dfS )N) )r   r   s    r   
__reduce__zREGEXTerm.__reduce__    s    5!!r   N)__name__
__module____qualname____doc__r   r    r   r   r   r      s<         - - -" " " " "r   r   c                     t          d          D ]F}t          ||         t                    r)||         j                            | |                   s dS GdS )N   FT)range
isinstancer   r   match)quad	regexQuadindexs      r   regexCompareQuadr#   $   s_    q  i&	22 	9<

uuT%[))	 554r   c                   ~    e Zd Zd ZddZddZd ZddZdd	Zdd
Z	ddZ
ddZd ZddZd Zd Zd Zd Zd ZdS )REGEXMatchingc                 \    || _         |j        | _        |j        | _        |j        | _        d S r	   )storagecontext_awareformula_awaretransaction_aware)r   r'   s     r   r   zREGEXMatching.__init__.   s2    $2 %2!(!:r   Tc                 8    | j                             ||          S r	   )r'   open)r   configurationcreates      r   r,   zREGEXMatching.open6   s    |  777r   Fc                 8    | j                                          d S r	   )r'   close)r   commit_pending_transactions     r   r0   zREGEXMatching.close9   s    r   c                 :    | j                             |           d S r	   )r'   destroy)r   r-   s     r   r3   zREGEXMatching.destroy<   s    ]+++++r   c                 P    |\  }}}| j                             |||f||           d S r	   )r'   add)r   triplecontextquotedsubject	predicateobject_s          r   r5   zREGEXMatching.add?   s5    (.%)W'9g6HHHHHr   Nc           
      F   |\  }}}t          |t                    sHt          |t                    s3t          |t                    s|:t          |j        t                    rt          |t                     r|pd }t          |t                     r|pd }t          |t                     r|pd }|d urt          |j        t                     r|pd }	g }
| j                            |||f|	          D ]Q\  \  }}}}|D ]E}|j        }t          ||||f||||d ur|j        p|f          r|
                    ||||f           FR|
D ]7\  }}}}	| j                            |||f|	rt          | |	          p|	           8d S | j                            |||f|           d S r	   )	r   r   
identifierr'   triplesr#   appendremover   )r   r6   r7   r9   r:   r;   spocremoveQuadLists1p1o1cgctxs                   r   r@   zREGEXMatching.removeC   s'   (.%)Ww	**"	H)Y//"	H '9--"	H #
73Ey(Q(Q# w	222>wF$Ay)444BJdAw	222>wF$A$VZ8JI-V-V)V    N$(L$8$8!QA$F$F A A Rb A AC.C'RS)#%##4/FG4FQ'	  	A '--r2r3.?@@@A - J J
1a##Q1Iq/CU4^^/HqIIIIJ J L)W =wGGGGGr   c              #   v  K   |\  }}}t          |t                    sHt          |t                    s3t          |t                    s|=t          |j        t                    r"t          |t                     r|pd }t          |t                     r|pd }t          |t                     r|pd }|d urt          |j        t                     r|pd }	| j                            |||f|	          D ]\  \  }
}}}g }|D ]U}|	<|$|j        j                            |j                  r|                    |           @|                    |           V|r+t          |
||d f|||d f          r|
||fd |D             fV  d S | j                            |||f|          D ]\  \  }
}}}|
||f|fV  d S )Nc              3      K   | ]}|V  d S r	   r   ).0rD   s     r   	<genexpr>z(REGEXMatching.triples.<locals>.<genexpr>   s"      (A(Aq(A(A(A(A(A(Ar   )	r   r   r=   r'   r>   r   r   r?   r#   )r   r6   r7   r9   r:   r;   rA   rB   rC   rD   rF   rG   rH   rI   matchingCtxsrJ   s                   r   r>   zREGEXMatching.triplesi   sU     (.%)Ww	**"	')Y//"	' '9--"	' #
73Ey(Q(Q# w	222>wF$Ay)444BJdAw	222>wF$A$VZ8JI-V-V)V  
 %)L$8$8!QA$F$F B B Rb! 1 1Cy"?g.@.M.S.SN/ /? )//444$++C0000 B$4R&)Wd(K% % B r2,(A(AL(A(A(AAAAAB B %)L$8$8)W-w% % ' ' Rb 2rlB&&&&&' 'r   c                 6    | j                             |          S r	   )r'   __len__)r   r7   s     r   rQ   zREGEXMatching.__len__   s     |##G,,,r   c              #   L   K   | j                             |          D ]}|V  d S r	   )r'   contexts)r   r6   rJ   s      r   rS   zREGEXMatching.contexts   s<       <((00 	 	CIIII	 	r   c                 <    | j                             d|           d S )N)NNN)r'   r@   )r   r=   s     r   remove_contextzREGEXMatching.remove_context   s!    .
;;;;;r   c                 @    | j                             |||           d S )N)override)r'   bind)r   prefix	namespacerW   s       r   rX   zREGEXMatching.bind   s%    &)h?????r   c                 6    | j                             |          S r	   )r'   rY   )r   rZ   s     r   rY   zREGEXMatching.prefix   s    |""9---r   c                 6    | j                             |          S r	   )r'   rZ   )r   rY   s     r   rZ   zREGEXMatching.namespace   s    |%%f---r   c                 4    | j                                         S r	   )r'   
namespacesr   s    r   r^   zREGEXMatching.namespaces   s    |&&(((r   c                 8    | j                                          d S r	   )r'   commitr   s    r   r`   zREGEXMatching.commit   s    r   c                 8    | j                                          d S r	   )r'   rollbackr   s    r   rb   zREGEXMatching.rollback   s    r   )T)Fr	   )r   r   r   r   r,   r0   r3   r5   r@   r>   rQ   rS   rU   rX   rY   rZ   r^   r`   rb   r   r   r   r%   r%   -   s:       ; ; ;8 8 8 8   , , ,I I I I$H $H $H $HL$' $' $' $'L- - - -
   < < <@ @ @ @. . .. . .) ) )           r   r%   )r   r
   rdflib.graphr   rdflib.storer   NATIVE_REGEXPYTHON_REGEXstrr   r#   r%   r   r   r   <module>rh      s     
			             " " " " " " " "  A  A  A  A  A E A  A  A  A  A r   