
    Pi1B                    ,   d Z ddl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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 dd	lmZmZmZmZ  ed
e           Z!er
ddlm"Z"m#Z#m$Z$ ddgZ% G d de          Z&dZ'dZ(dZ)dZ*dZ+ G d de&          Z,dS )zr
Turtle RDF graph serializer for RDFLib.
See <http://www.w3.org/TeamSubmission/turtle/> for syntax specification.
    )annotations)defaultdict)IOTYPE_CHECKINGAnyDefaultDictDictListMappingOptionalSequenceTupleTypeVarUnion)Error)Graph)RDFRDFS)
Serializer)BNodeLiteralNodeURIRef_StrT)bound)_PredicateType_SubjectType_TripleTypeRecursiveSerializerTurtleSerializerc                       e Zd ZU dZej        gZej        ej	        gZ
dZdZdZded<   d, fd	Zd-dZd.dZd.dZd/dZd0dZd1dZd0dZd2dZd3d!Zd4d"Zd5d6d&Zd7d(Zd8d+Z xZS )9r   z%Base class for recursive serializers.
   z   zTuple[Any, ...]roundtrip_prefixesstorer   c                    t          t          |                               |           d | _        |                                  d S N)superr   __init__streamresetselfr%   	__class__s     u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/serializers/turtle.pyr)   zRecursiveSerializer.__init__/   s:    !4((11%888+/

    prefixstrurir   returnNonec           	         || j         v r4| j         |         |k    r#t          d|d|d| j         |                   || j         |<   d S )Nz$Trying to override namespace prefix z => z, but it's already bound to )
namespaces	Exception)r-   r1   r3   s      r/   addNamespacez RecursiveSerializer.addNamespace4   sf    T_$$)@C)G)G)66333 7 79   #&r0   subjectr   boolc                    |                      |          sB|| j        vs9|| j        v r| j        dk    s%t	          |t
                    r| j        | j        k    rdS dS )z4Check to see if the subject should be serialized yet   FT)isDone	_subjects
_topLevelsdepth
isinstancer   maxDepthr-   r:   s     r/   checkSubjectz RecursiveSerializer.checkSubject<   sh     [[!!	t~--DO++$*q..7F++ 3A15t}1L1L5tr0   c                    || j         v S )z$Return true if subject is serialized_serializedrD   s     r/   r>   zRecursiveSerializer.isDoneG   s    $***r0   List[_SubjectType]c                    i g } j         D ]q}t           j                            t          j        |                    }|                                 |                    |           |D ]}d j        |<   d|<   r fd j	        D             }|                                 |                    d |D                        |S )NTc                ^    g | ])}|vt          |t                    j        |         |f*S r#   )rB   r   _references).0r:   seenr-   s     r/   
<listcomp>z5RecursiveSerializer.orderSubjects.<locals>.<listcomp>Y   sG     
 
 
d"" '')9')BGL"""r0   c                    g | ]\  }}}|	S r#   r#   )rM   isbnoderefsr:   s       r/   rO   z5RecursiveSerializer.orderSubjects.<locals>.<listcomp>`   s    LLL%=gtWLLLr0   )

topClasseslistr%   subjectsr   typesortextendr@   r?   )r-   rU   classURImembersmember
recursablerN   s   `     @r/   orderSubjectsz!RecursiveSerializer.orderSubjectsK   s    )+') 	$ 	$H4:..sxBBCCGLLNNNOOG$$$! $ $*.'#V$
 
 
 
 
>
 
 

 	LLLLLMMMr0   c                j    | j                             d          D ]}|                     |           d S )NNNN)r%   triplespreprocessTriple)r-   triples     r/   
preprocesszRecursiveSerializer.preprocessd   sC    j(();<< 	* 	*F!!&))))	* 	*r0   spor   c                P    |\  }}}| j         |xx         dz  cc<   d| j        |<   d S )Nr=   T)rL   r?   )r-   rd   spos        r/   ra   z$RecursiveSerializer.preprocessTripleh   s>    1aq  qr0   c                   d| _         i | _        i | _        t          t                    | _        i | _        i | _        i | _        | j	        rt          | j	        d          r@| j                                        D ]$\  }}|| j	        v r|                     ||           %d S | j                                        D ]\  }}|                     ||           d S d S )Nr   __iter__)rA   listsr7   r   intrL   rH   r?   r@   r$   hasattrr%   r9   )r-   r1   nss      r/   r+   zRecursiveSerializer.resetm   s    
')
-/3>s3C3C573546" 	2t.
;; 2"&*"7"7"9"9 6 6JFB!888))&"5556 6 #'*"7"7"9"9 2 2JFB%%fb1111	2 	22 2r0   #Mapping[_PredicateType, List[Node]]c                    i }| j                             |ddf          D ]6\  }}}|                    |g           }|                    |           |||<   7|S )zb
        Build a hash key by predicate to a list of objects for the given
        subject
        N)r%   r`   getappend)r-   r:   
propertiesrf   rg   rh   oLists          r/   buildPredicateHashz&RecursiveSerializer.buildPredicateHash   sh     8:
z))7D$*?@@ 	" 	"GAq!NN1b))ELLOOO!JqMMr0   rs   List[_PredicateType]c                r   |                                 D ]\  }}|                                 g }i }| j        D ]$}||v r||vr|                    |           d||<   %t	          |                                          }|                                 |D ] }||vr|                    |           d||<   !|S )zzTake a hash from predicate uris to lists of values.
        Sort the lists of values.  Return a sorted list of properties.T)itemsrW   predicateOrderrr   rT   keys)r-   rs   propobjectspropListrN   propss          r/   sortPropertiesz"RecursiveSerializer.sortProperties   s     (--// 	 	MD'LLNNNN *,+-' 	" 	"D
""T)9)9%%%!T
Z__&&''

 	" 	"D4%%%!T
r0   c                    d| j         |<   dS )zMark a subject as done.TNrG   rD   s     r/   subjectDonezRecursiveSerializer.subjectDone   s    $(!!!r0   r   modifierrl   c                &    | j         |z   | j        z  S )z-Returns indent string multiplied by the depth)rA   indentString)r-   r   s     r/   indentzRecursiveSerializer.indent   s    
X%):::r0   textc                l    | j                             |                    | j        d                     dS )zWrite text in given encoding.replaceN)r*   writeencodeencoding)r-   r   s     r/   r   zRecursiveSerializer.write   s0     	$++dmY??@@@@@r0   r   Union[_StrT, URIRef]c                    | j         }|i|                    |          rTd|                    |d          vr<d|                    |d          vr$t          |                    |dd                    }|S )N# /r=   )base
startswithr   r   )r-   r3   r   s      r/   
relativizezRecursiveSerializer.relativize   sy    yt$$ 3;;tR00003;;tR0000 T2q1122C
r0   r%   r   )r1   r2   r3   r   r4   r5   r:   r   r4   r;   )r4   rI   r4   r5   )rd   r   r4   r5   )r:   r   r4   ro   )rs   ro   r4   rv   )r:   r   r4   r5   )r   )r   rl   r4   r2   )r   r2   r4   r5   )r3   r   r4   r   )__name__
__module____qualname____doc__r   ClassrS   r   rV   labelry   rC   r   r$   __annotations__r)   r9   rE   r>   r]   rc   ra   r+   ru   r   r   r   r   r   __classcell__r.   s   @r/   r   r   &   s        //*Jh
+NHL*,,,,,     
& & & &	 	 	 	+ + + +   2* * * *! ! ! !
2 2 2 2&      4) ) ) ); ; ; ; ;A A A A

 
 
 
 
 
 
 
r0   r=      Fc                       e Zd ZdZdZdZd; fdZd< fdZd= fdZ	 	 	 d>d?dZ	d@ fdZ
dAdBd"Zd=d#Zd=d$ZdCd'ZdCd(ZdCd)ZdDdEd/ZdDdFd0ZdGd1ZdDdFd2ZdHd4ZdId5ZdDdJd6ZdDdKd7ZdLd:Z xZS )Mr    zTurtle RDF graph serializer.turtlez    r%   r   c                    i | _         t          t          |                               |           t          j        di| _        |                                  d | _        t          | _
        d S )Na)_ns_rewriter(   r    r)   r   rV   keywordsr+   r*   _SPACIOUS_OUTPUT	_spaciousr,   s     r/   r)   zTurtleSerializer.__init__   sV    +-%%..u555*-(C

)r0   r1   r2   	namespacer   r4   c                P   |dk    r|d         dk    s| j                             ||          |k    rJ|| j        vr&d|z   }|| j         v rd|z   }|| j         v || j        |<   | j                            ||          }t          t          |                               ||           |S )Nr   r   _rg   )r7   rq   r   r(   r    r9   )r-   r1   r   rg   r.   s       r/   r9   zTurtleSerializer.addNamespace   s     RKKF1I,,1D1DI2
 2
2 2 T---&L4?**aA 4?**+, (%))&&99F%%2269EEEr0   r5   c                    t          t          |                                            i | _        d| _        i | _        d S )NF)r(   r    r+   _shortNames_startedr   )r-   r.   s    r/   r+   zTurtleSerializer.reset   s=    %%++----/r0   Nr*   	IO[bytes]r   Optional[str]r   spaciousOptional[bool]kwargsr   c                4   |                                   || _        ||| _        n| j        j        | j        j        | _        ||| _        |                                  |                                 }|                                  d}|D ]H}|                     |          r|rd}| 	                    |          r|s| 
                    d           I|                                  |
                    d                    d                     d | _        d S )NTF
zlatin-1)r+   r*   r   r%   r   rc   r]   startDocumentr>   	statementr   endDocumentr   )	r-   r*   r   r   r   r   subjects_list	firstTimer:   s	            r/   	serializezTurtleSerializer.serialize   s    	

DIIZ_(
DI%DN**,,	$ 	! 	!G{{7##  "!	~~g&& !y !

4   T[[++,,,			r0   rb   r   c                   t          t          |                               |           t          |          D ]\  }}|t          k    r{|| j        v r| j        jt          |t                    rU|	                    | j                  r;d|
                    | j        d          vrd|
                    | j        d          vr|                     ||t          k               t          |t                    r(|j        r!|                     |j        t                     |d         }t          |t                    r| j        |xx         dz  cc<   d S d S )Nr   r   r   )
gen_prefixr=   )r(   r    ra   	enumerateVERBr   r   rB   r   r   r   getQNamer   datatype_GEN_QNAME_FOR_DTr   rL   )r-   rb   inoderg   r.   s        r/   ra   z!TurtleSerializer.preprocessTriple  s`   %%66v>>> (( 	K 	KGAtDyy4=((I)"400 *	22 * 4<<	2#>#>>>4<<	2#>#>>> MM$AIM777$(( KT] Kdm8IJJJ1Ia 	%Q1$	% 	%r0   Tr3   r   r   r;   c                   t          |t                    sd S d }	 | j                            ||          }n:# t          $ r- | j        j                            |          }|||df}nY d S Y nw xY w|\  }}}|                    dd                              dd          }|                    d          rd S |                     ||          }|d|S )	N)generater   (z\()z\).:)	rB   r   r%   compute_qnamer8   r1   r   endswithr9   )r-   r3   r   partspfxr1   r   locals           r/   r   zTurtleSerializer.getQName7  s   #v&& 	4
	J,,S:,FFEE 	 	 	*"))#..Cc2 tt 	 $) 	5dE**224?? >># 	4""6955 &&%%((s   8 1A/.A/c           	        d| _         t          | j                                                  }| j        r2|                     |                                 d| j        z  z              |D ]6\  }}|                     |                                 d|d|dz              7|r| j        r|                     d           d S d S d S )NTz@base <%s> .
z@prefix z: <z> .
r   )r   sortedr7   rx   r   r   r   r   )r-   ns_listr1   r3   s       r/   r   zTurtleSerializer.startDocumentU  s    ..00119 	EJJt{{}}'7$)'CCDDD" 	O 	OKFCJJt{{}}}'MMNNNN 	t~ 	JJt	 	 	 	r0   c                B    | j         r|                     d           d S d S )Nr   )r   r   )r-   s    r/   r   zTurtleSerializer.endDocument`  s.    > 	JJt	 	r0   r:   r   c                    |                      |           |                     |          p|                     |          S r'   )r   	s_squared	s_defaultrD   s     r/   r   zTurtleSerializer.statementd  s9    !!!~~g&&A$..*A*AAr0   c                    |                      d|                                 z              |                     |t                     |                     |           |                      d           dS )Nr    .T)r   r   pathSUBJECTpredicateListrD   s     r/   r   zTurtleSerializer.s_defaulth  s`    

4$++--'(((		'7###7###

4tr0   c                   | j         |         dk    st          |t                    sdS |                     d|                                 z   dz              |                     |           |                     d           dS )Nr   Fr   z[]r   T)rL   rB   r   r   r   r   rD   s     r/   r   zTurtleSerializer.s_squaredo  sx    W%))*We2L2L)5

4$++--'$.///7###

4tr0   Fr   positionrl   newlinec                    |                      |||          s*|                     |||          st          d|d          d S d S )NzCannot serialize node '')	p_squared	p_defaultr   r-   r   r   r   s       r/   r   zTurtleSerializer.pathw  se    NN4733	@~~dHg66	@ %>???		@ 	@ 	@ 	@r0   c                    |t           k    r|s|                     d           |                     |                     ||                     dS )N T)r   r   r   r   s       r/   r   zTurtleSerializer.p_default~  sF    wwJJsOOO

4::dH--...tr0   c                T    |t           j        k    rdS |t          u r| j        v r j        |         S t	          |t
                    r|                    d fd          S                      |          }                     ||t          k              p|	                                S )Nz()Tc                :                         | t                    S r'   )r   r   )dtr-   s    r/   <lambda>z(TurtleSerializer.label.<locals>.<lambda>  s    $--<M*N*N r0   )	use_plainqname_callback)
r   nilr   r   rB   r   _literal_n3r   r   n3)r-   r   r   s   `  r/   r   zTurtleSerializer.label  s    37??4t 5 5=&&dG$$ 	F##NNNN $   
 ??4((D==x4'788EDGGIIEr0   c                   t          |t                    r%|| j        v s| j        |         dk    s|t          k    rdS |s|                     d           |                     |          r`|                     d           | xj        dz  c_        |                     |           | xj        dz  c_        |                     d           n| 	                    |           | xj        dz  c_        |                     d           | xj        dz  c_        | 
                    |d           |                     d	           | xj        dz  c_        d
S )Nr=   Fr   r   z )r   [r   z ]T)rB   r   rH   rL   r   r   isValidListrA   doListr   r   r   s       r/   r   zTurtleSerializer.p_squared  sF   4''	t'''%))7""5 	JJsOOOD!! 	JJsOOOJJ!OJJKKJJ!OJJJJtT"""JJ!OJJJJsOOOJJ!OJJtU333JJtJJ!OJJtr0   l_c                `   	 | j                             |t          j                  dS n# t          $ r Y dS w xY w|rq|t          j        k    r:t          t          | j                             |                              dk    rdS | j                             |t          j	                  }|qdS )zW
        Checks if l is a valid RDF list, i.e. no nodes have other properties.
        NFr   T)
r%   valuer   firstr8   r   lenrT   predicate_objectsrest)r-   r   s     r/   r   zTurtleSerializer.isValidList  s    	zCI..6u 7 	 	 	55	 	0SW}}T$**F*Fr*J*J%K%K!L!LPQ!Q!Qu!!"ch//B	  	0
 ts   %* 
88c                
   |r| j                             |t          j                  }|0|                     |t
                     |                     |           | j                             |t          j                  }|~d S d S r'   )r%   r   r   r   r   OBJECTr   r   )r-   r   items      r/   r   zTurtleSerializer.doList  s     	0:##B	22D		$'''  $$$!!"ch//B  	0 	0 	0 	0 	0r0   c                   |                      |          }|                     |          }t          |          dk    rd S |                     |d         |           |                     ||d                             |dd          D ]_}|                     d|                     d          z              |                     |d           |                     ||                    `d S )Nr   r   r=   z ;
T)ru   r   r   verb
objectListr   r   )r-   r:   r   rs   r}   	predicates         r/   r   zTurtleSerializer.predicateList  s    ,,W55
&&z22x==AF		(1+w	///
8A;/000!!"" 	3 	3IJJvA.///IIiI...OOJy12222	3 	3r0   c                >    |                      |t          |           d S r'   )r   r   )r-   r   r   s      r/   r   zTurtleSerializer.verb  s    		$g&&&&&r0   r|   Sequence[Node]c                t   t          |          }|dk    rd S |dk    rdpd}| xj        |z  c_        |                     |d         t                     |dd          D ]J}|                     d|                     d          z              |                     |t          d           K| xj        |z  c_        d S )Nr   r=   z,
Tr   )r   rA   r   r   r   r   )r-   r|   countdepthmodobjs        r/   r   zTurtleSerializer.objectList  s    GA::FQJ%A*

h

		'!*f%%%122; 	1 	1CJJut{{1~~-...IIc64I0000

h



r0   r   )r1   r2   r   r   r4   r2   r   r_   )r*   r   r   r   r   r   r   r   r   r   r4   r5   )rb   r   r4   r5   )T)r3   r   r   r;   r4   r   r   )F)r   r   r   rl   r   r;   r4   r5   )r   r   r   rl   r   r;   r4   r;   )r   r   r   rl   r4   r2   )r   r   r4   r;   )r   r   r4   r5   )r:   r   r   r;   r4   r5   )r   r   r   r;   r4   r5   )r|   r  r4   r5   )r   r   r   r   
short_namer   r)   r9   r+   r   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r/   r    r       s$       &&JL* * * * * *     0      #"&#'$ $ $ $ $L% % % % % %2) ) ) ) )<	 	 	 	   B B B B      @ @ @ @ @    F F F F    B    0 0 0 0
3 
3 
3 
3 
3' ' ' ' '
 
 
 
 
 
 
 
r0   N)-r   
__future__r   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   rdflib.exceptionsr   rdflib.graphr   rdflib.namespacer   r   rdflib.serializerr   rdflib.termr   r   r   r   r2   r   r   r   r   __all__r   r   r   r   r   r   r    r#   r0   r/   <module>r     s
   
 # " " " " " # # # # # #                            $ # # # # #       & & & & & & & & ( ( ( ( ( ( 4 4 4 4 4 4 4 4 4 4 4 4s### GFFFFFFFFFF "4
5Y Y Y Y Y* Y Y Yx 	
  \ \ \ \ \* \ \ \ \ \r0   